Matlab如何求离散点的导数

1.通过差分估算

已知同维度的x和y序列,则可使用diff(y)./diff(x)来估算。设x为n维向量,Dx=diff(x) 计算向量x的向前差分,DX(i)=X(i+1)-X(i),0<i<n。

例一

y=[7.86 7.84 7.82 7.77 7.72 7.68 7.61 7.51 7.42 7.33 7.21 7.07 6.94 6.79 6.64 6.48 6.29 6.11 ...5.92 5.72 5.50 5.27 5.03 4.78 4.53 4.25 3.98 3.69 3.40 3.10 2.78 2.43 2.09 1.77 1.42 1.09 ...0.68 0.30];
x=0:0.04:1.48;
plot(x,y)
dy=diff(y)./diff(x);
dx=0.04:0.04:1.48;
figure
plot(dx,dy)

 

 2.通过梯度估算

已知同维度的x和y序列,则可使用gradient(y)./gradient(x)来估算 。梯度用的是中心点差分,diff()用的前后两点差分;所以从区间上看梯度用的范围比导数大一倍!所以梯度方式精度会更高一些!但是梯度法的边界可能会出现误差问题。

2.1梯度的含义与使用

[Fx,Fy]=gradient(F),其中Fx为其水平方向上的梯度,Fy为其垂直方向上的梯度,Fx的第一列元素为原矩阵第二列与第一列元素之差,Fx的第二列元素为原矩阵第三列与第一列元素之差除以2,以此类推:Fx(i,j)=(F(i,j+1)-F(i,j-1))/2。最后一列则为最后两列之差。同理,可以得到Fy。

例二

x=[6,9,3,4,0;5,4,1,2,5;6,7,7,8,0;7,8,9,10,0];
[Fx,Fy]=gradient(x)

运行结果:

Fx =3.0000   -1.5000   -2.5000   -1.5000   -4.0000-1.0000   -2.0000   -1.0000    2.0000    3.00001.0000    0.5000    0.5000   -3.5000   -8.00001.0000    1.0000    1.0000   -4.5000  -10.0000Fy =-1.0000   -5.0000   -2.0000   -2.0000    5.00000   -1.0000    2.0000    2.0000         01.0000    2.0000    4.0000    4.0000   -2.50001.0000    1.0000    2.0000    2.0000         0

 2.2通过梯度估算

例三:差分与梯度对比

y=[7.86 7.84 7.82 7.77 7.72 7.68 7.61 7.51 7.42 7.33 7.21 7.07 6.94 6.79 6.64 6.48 6.29 6.11 ...5.92 5.72 5.50 5.27 5.03 4.78 4.53 4.25 3.98 3.69 3.40 3.10 2.78 2.43 2.09 1.77 1.42 1.09 ...0.68 0.30];
x=0:0.04:1.48;
dy=gradient(y)./gradient(x);
dx=0:0.04:1.48;
dx1=0.04:0.04:1.48;
figure
plot(dx,dy,'r')
dy1=diff(y)./diff(x);
hold on
plot(dx1,dy1,'b')
legend('梯度','差分')

运行结果

3. 数据拟合后求导

例四

y=[7.86 7.84 7.82 7.77 7.72 7.68 7.61 7.51 7.42 7.33 7.21 7.07 6.94 6.79 6.64 6.48 6.29 6.11 ...5.92 5.72 5.50 5.27 5.03 4.78 4.53 4.25 3.98 3.69 3.40 3.10 2.78 2.43 2.09 1.77 1.42 1.09 ...0.68 0.30];
x=0:0.04:1.48;
p=polyfit(x,y,10);  %使用10次多项式拟合
y3=polyval(p,x);    %求出预测值
plot(x,y,'b',x,y3,'r')
legend('原始数据','拟合函数')
dy=diff(y)./diff(x);
dx=0.04:0.04:1.48;
% dy3=diff(y3)./diff(x);
p1=polyder(p);  
dy3=polyval(p1,dx);
figure
plot(dx,dy,'b',dx,dy3,'r')
legend('差分求导','拟合多项式求导')

运行结果

4.3点、4点、5点求导法 

例五:使用5点求导法[5]

y=[7.86 7.84 7.82 7.77 7.72 7.68 7.61 7.51 7.42 7.33 7.21 7.07 6.94 6.79 6.64 6.48 6.29 6.11 ...5.92 5.72 5.50 5.27 5.03 4.78 4.53 4.25 3.98 3.69 3.40 3.10 2.78 2.43 2.09 1.77 1.42 1.09 ...0.68 0.30]';
x=(0:0.04:1.48)';
y1 = fivePoint1Order(y,0.04);
figure
plot(x(2:end,1),y1,'r')
function [value] = fivePoint1Order(Sig,h)
% 使用五点法求一阶导数
% Sig被求导的列向量
% h步长,单位为秒
lengSig = size(Sig,1);
value = zeros(lengSig-1,1);
% 边缘点使用差分,参考matlab梯度函数的做法
value(1,1) = (Sig(2,1) - Sig(1,1))/h;for i = 1:lengSig-4
fivePoints = Sig(i:i+4,1);
f_2 = fivePoints(1,1);
f_1 = fivePoints(2,1);
f1 = fivePoints(4,1);
f2 = fivePoints(5,1);
value(i+1,1) = (f_2 - 8*f_1 + 8*f1 - f2)/(12*h);
end
value(i+2,1) = (Sig(i+3,1) - Sig(i+2,1))/h;
value(i+3,1) = (Sig(i+4,1) - Sig(i+3,1))/h;% 边缘点
end

运行结果

 三点、四点求导法请参考https://blog.csdn.net/weixin_30565327/article/details/95006050

参考文献

[1]https://zhidao.baidu.com/question/406266767.html

[2]http://blog.sina.com.cn/s/blog_53be544e0101cd8a.html

[3]https://www.jianshu.com/p/eb8f64a4bec4

[4]https://jingyan.baidu.com/article/59a015e3586c7ff79488650a.html

[5]RAFATI FARD M, SHARIAT MOHAYMANY A, SHAHRI M. A new methodology for vehicle trajectory reconstruction based on wavelet analysis [J]. Transportation Research Part C: Emerging Technologies, 2017, 74(150-67).

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ERROR 6: GEOS support not enabled.

要学习GEOS库&#xff0c;肯定绕不开地理方面的东西。如果需要判断的两个多边形或几何图形&#xff0c;不是自己创建的&#xff0c;而是来自shapefile文件&#xff0c;那就得将GEOS库和GDAL/OGR库结合使用了。实际上只需要OGR就行了&#xff0c;但OGR和GDAL是放在一起的。OGR库…

java面向对象(this关键字)

一.this的作用 1.this 相当于是指向当前对象本身 2.成员变量和局部变量同名问题 class Person {private int age;private String name;// 给姓名和年龄初始化的构造方法Person(String name, int age) {// 当需要访问成员变量是&#xff0c;只需要在成员变量前面加上this.即可th…

c语言float二进制输出代码_下面C语言中这十四大谜题,不看答案你能做出来吗?...

C语言领取福利资料前往文末领取本篇文章《C语言的谜题》展示了14个C语言的迷题以及答案&#xff0c;代码应该是足够清楚的&#xff0c;而且我也相信有相当的一些例子可能是我们日常工作可能会见得到的。通过这些迷题&#xff0c;希望你能更了解C语言。如果你不看答案&#xff0…

平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术

介绍 由于世界仍在Java的掌控之中&#xff0c;因此我们经常定义所谓的基于组件的平台 。 我在2000年的OpenUSS&#xff08;开放大学支持系统&#xff09;方面拥有这一经验。 当时我有一个想法&#xff0c;就是开发一个可以使用组件体系结构和J2EE技术​​&#xff08; OpenUSS …

webm文件怎么在手机上正常播放以及在电脑上转换为mp4格式!

webm是一个开放、免费的媒体文件格式。WebM影片格式是以Matroska&#xff08;即MKV&#xff09;容器格式为基础开发的新容器格式&#xff0c;里面包括了VP8影片轨和Ogg Vorbis音轨&#xff1b;其中Google将其拥有的VP8视频编码技术以类似BSD授权开源&#xff0c;而Ogg Vorbis本…

WKT介绍

WKT&#xff0c;是一种文本标记语言&#xff0c;用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式&#xff0c;亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。 目录 1概念2几何对象…

DS树+图综合练习--构建邻接表

题目描述 已知一有向图&#xff0c;构建该图对应的邻接表。邻接表包含数组和单链表两种数据结构&#xff0c;其中每个数组元素也是单链表的头结点&#xff0c;数组元素包含两个属性&#xff0c;属性一是顶点编号info&#xff0c;属性二是指针域next指向与它相连的顶点信息。单…

mysql datetime 间隔,MySQL datetime默认时间间隔

Is it possible to add to a default time with NOW(), 10 minutes?Ive tried something like that:CREATE TABLE table1 (date DATETIME NOT NULL DEFAULT DATE_ADD(NOW(), INTERVAL 10 MINUTE));However, it doesnt work.解决方案I dont think you can do this.The DEFAULT …

golang mysql 崩溃_mysql连接问题,goruntime里执行总是出错,程序一直崩溃

初学golang&#xff0c;尝试写一个程序&#xff0c;但是在mysql操作时遇到了问题~看网上文章&#xff0c;推荐mysql直接创建一个db全局变量&#xff0c;然后连接一次&#xff0c;以后使用到直接用这个db&#xff0c;我按照这样的方法&#xff0c;然后进行操作&#xff0c;可是程…

牛客网——点菜问题

题目描述 北大网络实验室经常有活动需要叫外卖&#xff0c;但是每次叫外卖的报销经费的总额最大为C元&#xff0c;有N种菜可以点&#xff0c;经过长时间的点菜&#xff0c;网络实验室对于每种菜i都有一个量化的评价分数&#xff08;表示这个菜可口程度&#xff09;&#xff0c;…

OGR示例:写shp,求面与面的交和差操作

编译命令&#xff1a;g main.cpp -lgdal 调用命令&#xff1a;./a.out 输出shp名称 操作选项 注释&#xff1a;操作选项&#xff08;1&#xff1a;多边形A - 多边形B&#xff0c;2&#xff1a;B - A&#xff0c;3&#xff1a;A和B的交集部分&#xff09; #include "ogr…

Spring Boot和Thymeleaf:重新加载模板和静态资源,而无需重新启动应用程序

Thymeleaf是围绕自然模板的概念设计的&#xff0c;该模板允许进行静态原型制作&#xff1a;模板逻辑不会影响用作原型的模板。 尽管这是一项很棒的技术&#xff0c;但您可能还希望在运行的Spring Boot应用程序中查看结果&#xff0c;而不必每次更改Thymeleaf视图时都重新启动服…

写cookies注意事项

在调试模式下是无法写到cookie的&#xff0c;因为cookie需要写到域名下&#xff0c;并且需要写的域名和运行的域名一致才能写入。同样在读取cookie时也只能读取到当前域名的cookie&#xff0c;无法读取其他域名的cookie。 比如下面用jquery表示在baidu.com的域名下写入cookie&a…

mysql记录当前表数据的数据条数据类型_mysql的表的操作 数据类型

一 数据类型1 数字&#xff1a;整型&#xff1a;tinyint int bigint小数&#xff1a;float:在位数较短的情况下不精准double:在位数比较长的情况下不精准1 数字整型&#xff1a;tinyint int big小数&#xff1a;float:在位数比较短的情况下不精准double:在位数比较长的…

C++中的继承与虚函数各种概念

虚继承与一般继承 虚继承和一般的继承不同&#xff0c;一般的继承&#xff0c;在目前大多数的C编译器实现的对象模型中&#xff0c;派生类对象会直接包含基类对象的字段。而虚继承的情况&#xff0c;派生类对象不会直接包含基类对象的字段&#xff0c;而是通过一个间接的指针去…

中国科学院大学数学院本科生教材

中国科学院大学数学科学学院本科生教材&#xff08;不完全统计&#xff09; 注&#xff1a;不同的任课老师使用不太一样的教材&#xff0c;仅供参考。 一年级&#xff1a; 微积分I-A&#xff1a;《数学分析&#xff08;第4版&#xff09;》第1卷&#xff0c;卓里奇&#xff0c;…

sqlite mysql php_PHP实现的简单操作SQLite数据库类与用法示例

本文实例讲述了PHP实现的简单操作SQLite数据库类与用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;SQLite是一款轻型的数据库&#xff0c;是遵守ACID的关联式数据库管理系统&#xff0c;它的设计目标是嵌入式的&#xff0c;而且目前已经在很多嵌入式产品中使用了它…

Win7下WinDbg开启Local Kernel Debug调试

问题&#xff1a;在Win7 64bit系统中用管理员权限打开WinDbg开启Local Kernel Debug时报错&#xff1a; The system does not support local kernel debugging. Local kernel debugging requires Windows XP, Administrative privileges, and is not supported by WOW64. Only …

idea 不能及时编译_您是否能及时编译?

idea 不能及时编译还记得上次被C开发人员嘲笑的时候吗&#xff1f; Java如此繁琐&#xff0c;以至于他们甚至都不会考虑使用这种语言&#xff1f; 在许多方面&#xff0c;这一概念仍然成立。 但是对于典型的用法&#xff08;在大型企业的骨干中&#xff09;&#xff0c;Java性…

接口开发-导读

接下来的这个系列&#xff0c;完全针对“APP接口”开发进行&#xff0c;所以&#xff0c;希望你有一定的Java开发基础、以及一定的接口交互经验。 思来想去&#xff0c;决定按照下面的提纲进行 1. 基于SpringBoot创建基础框架&#xff1b; 2. 集成数据库操作&#xff08;mybati…