在 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)
收到错误信息,最后一步不对。
出现错误消息的原因是t
和aid
的大小不同。那是因为 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)
你怎样才能得到低于 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)
收到错误信息,最后一步不对。
出现错误消息的原因是t
和aid
的大小不同。那是因为 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)