用matlab求如下轨迹长度,求算法及过程~在线等~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用matlab求如下轨迹长度,求算法及过程~在线等~相关的知识,希望对你有一定的参考价值。

条件:
x=2.7t
y=67*sin(1.6*t+45)
0<t<28

t=linspace(0,28,10000);%从0到28取10000个点,点越多越精确
x=2.7*t;
y=67*sin(1.6*t+45);
dl=sqrt(diff(x).^2+diff(y).^2);%每小段线段长
l=sum(dl); %求总长
disp(l);追问

为什么要对x,y求diff? 然后输出的答案大概是1.8几几几e+003应该怎样解释?

追答

因为要求曲线的长度,
所以将曲线分为很多小的直线段
再将每段线段的长度求总和,就可以近似得到曲线轨迹的长度

而每段的长度可以用每段的x坐标增量和y坐标增量得到
dl=sqrt(dx^2+dy^2);
所以用diff求出每段x和y的增量,继而求出每段线段的长度

最后求和就可以了

1.8***e003就是科学记数法,也就是1.8***x10^3

num2str(l,'%f')

ans =

1891.799559

实在看不明白,就格式输出为一般浮点数的表述方法

追问

问题就出在对y=67*sin(1.6*t+45)求diff以后有dy=608*cos((8*t+225)/5)/5这个式子上面。你可以随便代入个t=27.0000进去,结果dy=3.8195然后代入t=27.0028 dy=3.8100。我明白你的思路是正确的,可是dy出来以后真的不再是y的增量了。最终计算出来L的结果比真实值大了1700+啊。。。

我用别的方法做出来了~谢谢你哈~(/≧▽≦)/~分数给你吧~

追答

这里直接是数据差分,不是求导数

如果是函数求导,那么求出的导数还要乘以dt才是长度
所以值就大了很多倍

参考技术A

以上是关于用matlab求如下轨迹长度,求算法及过程~在线等~的主要内容,如果未能解决你的问题,请参考以下文章

用MATLAB建立bp神经网络模型,求高手,在线等

基于Matlab和高斯-赛德尔迭代应用有限差分法求电势及电场分布

数据结构C语言版 图的遍历 DFS和BFS算法,用邻接矩阵储存 急阿在线等 求大神指点

matlab怎么计算线段的长度

基于Matlab用遗传算法求一元函数最值问题(附源码)

用Dijkstra算法求最短路径的MATLAB程序