[已解决] 求拟合曲线曲率的最大点为什么提示错误?

[复制链接]
7720804004 发表于 2021-10-12 22:38:05
拟合了一段曲线,想找出这个曲线曲率最大点的位置,然后运行的时候提示:slope = abs(diff(yt,2))./((1+diff(yt).^2).^(3./2));这个地方出错了,求大佬帮忙看看,指点一下。代码如下,

p = polyfit(x,y,6);
xt = linspace(min(x), max(x));
yt = polyval(p, xt);
slope = abs(diff(yt,2))./((1+diff(yt).^2).^(3./2));%求曲率
num = find(slope==max(slope))%曲率最大点
plot(xt(num),yt(num),'d','markersize',10);

最佳答案


TouAkira 发表于 2021-10-13 02:52:41
你的数据是离散的,这时候diff函数求的不是微分而是差分,所求差分每高一阶,结果就会比输入数据少一个
输入序列如果有N个离散数据,那么一阶差分的输出就只有N-1个、二阶差分则只有N-2个,长度是不相等的
要么改用解析式求(比如使用拟合的多项式)、要么更换"微分"的近似方法
回复此楼

1 条回复


TouAkira 发表于 2021-10-13 02:52:41
你的数据是离散的,这时候diff函数求的不是微分而是差分,所求差分每高一阶,结果就会比输入数据少一个
输入序列如果有N个离散数据,那么一阶差分的输出就只有N-1个、二阶差分则只有N-2个,长度是不相等的
要么改用解析式求(比如使用拟合的多项式)、要么更换"微分"的近似方法
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表