MATLAB 如何求取离散点的曲率最大值


Posted in Python onApril 16, 2021

我就废话不多说了,大家还是直接看代码吧~

x0 = linspace(0.1,2,100);%x0,y0验证函数离散点,可以非等间隔
y0 = 1./x0;
h1 = abs(diff(x0)) ;
h = [h1 h1(end)];
ht = h;
yapp1 = gradient(y0)./ht; %matlab数值近似
yapp2 = del2(y0)./ht; %matlab数值近似
k2 = abs(yapp2)./(1+yapp1.^2).^(3/2);
figure
plot(k2)
title('曲率曲线')
[~,maxFlag] = max(k2);%曲率最大位置
x_max = x0(maxFlag);
y_max = y0(maxFlag);
%画出图像 标注曲率最大点
figure
plot(x0,y0,'.-');
hold on;
plot(x_max,y_max,'rp')
title('标注最大曲率点')
xlabel('log10((norm(B*Xk-L)))')
ylabel('log10((norm(Xk)))')

MATLAB 如何求取离散点的曲率最大值

补充:MATLAB 插值+计算离散点曲率

思路:点足够密的话直接用 diff、gradient 求曲率,稀疏的话先插值再算曲率。

公式:

MATLAB 如何求取离散点的曲率最大值

点密的情况 输入曲线坐标(1-2)求一、二阶导数(4-9)通过公式求得曲率(10)

x = 0:0.01:7;
y = cos(x*0.5*pi); 
h1 = abs(diff(x));
h = [h1 h1(end)];
ht = h; 
y1 = gradient(y)./ht;
y2 = gradient(y1)./ht;
curv = abs(y2)./sqrt((1+y1.^2).^3); 
plot(x,y,'-',x,curv,'--r);
legend('Raw Data, 'Curvature','Location',"best");
grid on

图像与下文理论值图像相同

点稀疏的情况

1、输入散点坐标(1-2)

2、用样条曲线(B-Spline)等方法插值得到拟合曲线(3-4)

3、diff、gradient 函数求拟合曲线的一、二阶导数(6-11)

4、通过公式求得曲率(12)

例:余弦函数取 8 个点,用 B-Spline 插值

x = 0:1:7;
y = cos(x*0.5*pi);
xx = 0:0.01:7;
yy = spline(x,y,xx); 
h1 = abs(diff(xx));
h = [h1 h1(end)];
ht = h; 
yy1 = gradient(yy)./ht;
yy2 = gradient(yy1)./ht;
curv = abs(yy2)./sqrt((1+yy1.^2).^3); 
plot(xx,yy,'-',xx,curv,'--r',x,y,'o-');
legend('B-Spline', 'Curvature','Raw Data','Location',"best");
grid on

MATLAB 如何求取离散点的曲率最大值

补充用法

求最大曲率并在图中标出

[max_val,max_ind]=max(curv);
hold on
plot(xx(max_ind),yy(max_ind),'*r');

与理论值(余弦函数曲线)对比

 

 

 

曲线对比

 

MATLAB 如何求取离散点的曲率最大值

曲率对比

几种插值方法对比

列举四种方法,分别为:分段线性插值、三次样条曲线(B-Spline)插值、三次 Hermite 插值(PCHIP)、修正 Akima 分段三次 Hermite 插值(Akima)

Case 1: 三维螺线

 

 

MATLAB 如何求取离散点的曲率最大值

 

 

三维螺线散点

 

 

MATLAB 如何求取离散点的曲率最大值

 

 

插值

 

 

MATLAB 如何求取离散点的曲率最大值

 

 

俯视

 

 

MATLAB 如何求取离散点的曲率最大值

 

 

侧视

Case 2:二维梯形波

 

 

MATLAB 如何求取离散点的曲率最大值

 

 

二维梯形波

Case 3:三维不规则折线

 

 

MATLAB 如何求取离散点的曲率最大值

 

 

三维不规则折线(不等间距)

对比可得:

Case 1:B-Spline>Akima>PCHIP>Linear

Case 2:Linear>PCHIP>Akima>B-Spline

Case 3:Linear≈PCHIP≈Akima>B-Spline

故在插值的时候需要选择适合的计算方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
在Python中实现贪婪排名算法的教程
Apr 17 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
Python实现的建造者模式示例
Aug 06 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
python画蝴蝶曲线图的实例
Nov 21 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
Python如何进行时间处理
Aug 06 Python
用Python远程登陆服务器的步骤
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 #Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 #Python
python中print格式化输出的问题
Apr 16 #Python
CocosCreator ScrollView优化系列之分帧加载
深度学习tensorflow基础mnist
Python 多线程之threading 模块的使用
Apr 14 #Python
You might like
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
2016/01/14 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
Django 路由系统URLconf的使用
2018/10/11 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
python实现连连看游戏
2020/02/14 Python
详解Python中的Lock和Rlock
2021/01/26 Python
Javascript如何发送一个Ajax请求
2015/01/26 面试题
中学生自我评价范文
2014/02/08 职场文书
法人代表授权委托书
2014/04/08 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
销售2014年度工作总结
2014/12/08 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
未婚证明格式
2015/06/15 职场文书
《实心球》教学反思
2016/02/23 职场文书