- 13
- 0
- 约5.43千字
- 约 24页
- 2018-10-13 发布于江苏
- 举报
06 数值微分与常微分方程的求解
第6章数值微积分与常微分方程求解 黑龙江大学 电子工程学院 在许多实际问题中要采用数值方法来求函数的微分或积分。 而在实际问题中遇到的常微分方程往往很复杂,在许多情况下得不出一般解,所以,一般是要求获得解在若干个点上的近似值。 【本章学习目标】 掌握微分与积分的数值计算方法; 掌握常微分方程的数值求解方法。 目录 6.1 数值微分 6.2 数值积分 6.3 常微分方程的数值求解 6.1 数 值 微 分 6.1.1 数值差分与差商 6.1.2 数值微分的实现 数值微分的基本思想是先用逼近或拟合等方法将已知数据在一定范围内的近似函数求出,再用特定的方法对此近似函数进行微分。 1.多项式求导法 用多项式或样条函数g(x)对f(x)进行逼近(插值或拟合),然后用逼近函数g(x)在点x处的导数作为f(x)在点x处的导数。该种方法一般只用在低阶数值微分。 2.用diff函数计算差分 用f(x)在点x处的某种差商作为其导数。在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计算的是向量元素间的差分,故所得输出比原向量少了一个元素。 【例6.1】设f(x)?=?sinx,用不同的方法求函数f(x)的数值导数,并在同一个坐标系中做出f?(x)的图像。 为确定计算数值导数的点,假设在[0,pi]区间内以π/24为步长求数值导数。下面用3种方法求f(x)在这些点的导数。首先用一个5次多项式p(x)拟合函数f(x),并对p(x)求一般意义下的导数dp(x),求出dp(x)在假设点的值;第2种方法用diff函数直接求f(x)在假设点的数值导数;第3种方法先求出导函数f?(x)?=?cosx,然后直接求f?(x)在假设点的导数。 x=0:pi/24:pi; %用5次多项式p拟合f(x),并对拟合多项式p求导数dp在假设点的函数值 p=polyfit(x,sin(x),5); dp=polyder(p); dpx=polyval(dp,x); dx=diff(sin([x,pi+pi/24]))/(pi/24); %直接对sin(x)求数值导数 gx=cos(x); %求函数f的导函数g在假设点的导数 plot(x,dpx,x,dx,o,x,gx,+); %作图 对于求矩阵的差分,即为求各列或各行向量的差分,从向量的差分值可以判断列或行向量的单调性、是否等间距以及是否有重复的元素。 【例6.2】生成一个5阶魔方矩阵,按列进行差分运算。 M=magic(5) M= 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 DM=diff(M) %计算M的一阶差分 DM= 6 ?19 6 6 1 ?19 1 6 6 6 6 6 6 1 ?19 1 6 6 ?19 6 可以看出,diff函数对矩阵的每一列都进行差分运算,因而结果矩阵的列数是不变的,只有行数减1。矩阵DM第3列值相同,表明原矩阵第3列是等间距的。 6.2.2 定积分的数值求解实现 在MATLAB中可以使用quad或quadl来进行数值积分。 1.自适应辛普生法 MATLAB提供了基于自适应Simpson法的quad函数和自适应Lobatto法的quadl函数来求定积分。函数的调用格式为 [I,n]=quad(@fname,a,b,tol,trace) [I,n]=quadl(@fname,a,b,tol,trace) 其中fname是被积函数名。a和b分别是定积分的下限和上限。tol用来控制积分精度,默认时取tol?=?10-6。trace控制是否展现积分过程,若取非0则展现积分
原创力文档

文档评论(0)