7.1数值微分与数值积分
一、数值微分
1、数值差分与差商:微积分中,任意函数f(x)在x0点的导数是通过极限定义的:
如果去掉极限定义中h趋向于0的极限过程,得到函数在x0点处以h(h>0)为步长的向前差分、向后差分和中心差分公式:
向前差分:
向后差分:
中心差分:
函数f(x)在点x0的微分接近于函数在该点的差分,而f在点x的导数接近于函数在该点的差商。
差商亦可以如下公式求出:
一阶差商:
二阶差商:
2、数值微分的实现:MATLAB提供了求向前差分的函数diff,其调用格式有三种:
dx=diff(x):计算向量x的向前差分,dx(i)=x(i+1)-x(i),i=1,2,…,n-1。
dx=diff(x,n):计算向量x的n阶向前差分。例如,diff(x,2)=diff(diff(x))。
dx=diff(A,n,dim):计算矩阵A的n阶差分,dim=1时(默认状态),按列计算差分;dim=2,按行计算差分。
注意:diff函数计算的是向量元素间的差分,故差分向量元素的个数比原向量少了一个。同样,对于矩阵来说,差分后的矩阵比原矩阵少了一行或一列。 另外,计算差分之后,可以用f(x)在某点处的差商作为其导数的近似值。
e.g. 设f(x)=sinx在[0,2π]范围内随机采样,计算f'(x)的近似值,并与理论值f'(x)=cosx进行比较。
代码:>> x=[0,sort(2*pi*rand(1,5000)),2*pi]; //取[0,2π]内随机数,并按从小到大顺序排列
>> y=sin(x); //做原函数y=sin(x)
>> f1=diff(y)./diff(x); //求x,y的一阶向前差分,并求出差商向量f1
>> f2=cos(x(1:end-1)); //求差商向量的理论值f2
>> plot(x(1:end-1),f1,x(1:end-1),f2); //绘制f1、f2的曲线
>> d=norm(f1-f2) //求出f1与f2之差
标签:差商,f1,f2,差分,学习,进度,diff,向量 来源: https://www.cnblogs.com/GPChuansuo/p/15449757.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。