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

时间:2016-05-18 17:27:57

标签: math diff difference 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)

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

1 个答案:

答案 0 :(得分:0)

错误消息的原因是taid的大小不同。这是因为diff返回一个向量少于输入的向量。您可以在示例中查看其工作原理: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)