如何在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)
收到错误消息,最后一步不对。
答案 0 :(得分:0)
错误消息的原因是t
和aid
的大小不同。这是因为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)