在 Scilab 中使用 inttrap 和 diff 获取曲线的长度

Using inttrap and diff to get the length of a curve in Scilab

你怎样才能得到低于 0 到 4*pi 的曲线长度?您应该使用的命令是 inttrap 和 diff。这是我现在拥有的:

t=linspace(0,4*%pi)
x=(4+sin(a*t)).*cos(3*t)
y=(4+sin(a*t)).*sin(3*t)
z=cos(3*t)

xx=diff(x)
yy=diff(y)
zz=diff(z)
aid=sqrt(xx^2+yy^2+zz^2)
length=inttrap([t],aid)

收到错误信息,最后一步不对。

出现错误消息的原因是taid 的大小不同。那是因为 diff returns 一个比输入少 1 个条目的向量。您可以在示例中看到它是如何工作的:diff([3 1 5])[-2 4]

要解决此问题,请使用 t(1:$-1),它会省略 t 的最后一个条目。也就是说,

len = inttrap(t(1:$-1), aid)

(请不要使用 length,它是 Scilab 中的一个函数名。)

你遇到的另一个问题是 diff 只是差异,而不是导数。要获得导数,您需要除以步长,在您的情况下为 t(2)-t(1).

此外,不推荐使用语法 xx^2 的元素幂;使用 xx.^2 代替

t = linspace(0,4*%pi)
a = 1
x = (4+sin(a*t)).*cos(3*t)
y = (4+sin(a*t)).*sin(3*t)
z = cos(3*t)

step = t(2)-t(1)
xx = diff(x)/step
xy = diff(y)/step
xz = diff(z)/step
aid = sqrt(xx.^2+yy.^2+zz.^2)
len = inttrap(t(1:$-1), aid)