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实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
python的常见矩阵运算(小结)
Aug 07 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
Django CBV模型源码运行流程详解
Aug 17 Python
python 如何调用 dubbo 接口
Sep 24 Python
python 实现的截屏工具
May 08 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
php 日期和时间的处理-郑阿奇(续)
2011/07/04 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
用js重建星际争霸
2006/12/22 Javascript
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
Prototype Hash对象 学习
2009/07/19 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
express express-session的使用小结
2018/12/12 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
Python栈算法的实现与简单应用示例
2017/11/01 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
2020/04/01 Python
python 装饰器的基本使用
2021/01/13 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
一套Java笔试题
2016/08/20 面试题
.net软件工程师面试题
2015/03/31 面试题
Unix控制后台进程都有哪些进程
2016/09/22 面试题
学生安全责任书模板
2014/07/25 职场文书
营销总监岗位职责
2014/09/16 职场文书
人事代理委托书
2014/09/27 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers