本知识点的主要内容:
数值微分算法
中心差差分方法及其MATLAB实现
二元函数的梯度计算
由给定数据进行梯形求积
单变量数值积分问题求解
广义数值积分问题求解
双重积分问题的数值解
三重定积分的数值求解
多重积分数值求解
6.数值微分问题
前面介绍了已知原型函数,可以通过 diff() 函数求取各阶导数解析解的方法,并得出结论,高达 100 阶的导数也可以用 MATLAB 语言在几秒钟的时间内直接求出。应该指出,前面介绍的解析解方法的前提是原型函数为已知的。如果函数表达式未知,只有实验数据,在实际应用中经常也有求导的要求,这样的问题就不能用前面的方法获得问题的解析解。要求解这样的问题,需要引入数值算法得出所需问题的解。
6.1数值微分算法
基于前向和后向差分的数值微分算法求取高阶微分时的精度一般都是很低的,介绍两种中心差分的算法
6.2中心差分方法及其 MATLAB 实现
编写的 M-函数调用格式为[dy,dx] = diff_ctr(y,?t,n)
6.3二元函数的梯度计算
如果给定二元函数的函数值矩阵z,其中z为网格数据,则可以由gradient() 函数求取二元函数的梯度。该函数的调用格式为[fx,fy] = gradient(z)
7.数值积分问题
本节将分几种情况介绍数值积分问题的求解方法。首先,如果被积函数的数学表达式未知,则需要由实测数据通过梯形算法求出积分的近似值;如果被积函数已知,则将分别介绍一元函数积分、一元函数广义积分、二重积分以及多重积分问题。采用前面介绍的解析解方法和vpa()函数,可以得出任意一元函数的积分值,所以若安装了符号运算工具箱,则没有太大必要采用本节介绍的纯数值方法;对于重积分问题来说,如果内重积分是解析不可积的,则解析解方法是不能得出积分值的,必须采用数值积分方法.
7.1由给定数据进行梯形求积
假设已经建立起向量 x = [x1, x2, · · · , xN]T, y = [y1, y2, · · · , yN]T,则由 MATLAB 的trapz() 函数可以直接用梯形法求解积分问题,该函数调用格式为S = trapz(x,y)
7.2单变量数值积分问题求解
MATLAB 8.0 版开始引入新的自适应变步长数值积分求取函数 integral(),其调用格式为 I = integral(f ,a,b,属性设置对)
7.3广义数值积分问题求解
前面介绍的integral() 可以直接用于广义积分的求取,但该函数只能在 MATLAB 8.0 及后续版本下运行。早期版本中可以采用quadgk()函数求无穷积分,该函数采用了Gauss–Kronrod 算法。函数的调用格式与前面介绍的完全一致,直接在积分限位置给出-inf或inf即可。
7.4积分函数的数值求解
绘制出函数的积分函数曲线函数的调用格式为 [x,f1] = intfunc(f ,a,b,n)
7.5双重积分问题的数值解
使用 MATLAB 提供的 integral2() 函数就可以直接求出上述双重定积分的数值解。该函数的调用格式为 I = integral2(f ,xm,xM,ym,yM, 属性参数对)
7.6三重定积分的数值求解
可以由 MATLAB 提供的 integral3() 函数得出。该函数调用格式为
I = integral3(f ,xm,xM,ym,yM,zm,zM,属性参数对)
7.7多重积分数值求解
NIT 工具箱还可以解决多重超长方体边界的定积分问题,例如,使用 quadndg() 函数,但对一般积分区域来说则没有现成的求解函数。
该问题的求解语句为 I = quadndg(f ,[x1m, x2m, · · · , xpm],[x1M, x2M, · · · , xpM],?)