1. 数值微分
-
1.1 数值差分与差商
任意函数f(x)在x点的导数是通过极限定义的:
如果去掉上述等式右端的h→0的极限过程,并引进记号就形成了差分方程,以下分别是在x点处以h(h>0)为步长的向前差分、向后差分和中心差分。
当步长h充分小时,称△f(x)/h、▽f(x)/h及 δf(x)/h
分别为函数在x点处以h(h>0)为步长的向前差商、向后差商和中心差商。 -
1.2 数值微分的实现
有两种方式计算任意函数f(x)在给定点x的数值导数:
①用多项式或样条函数g(x)对f(x)进行逼近(插值或拟合),然后用逼近函数g(x)在点x处的导数作为f(x)在点x处的导数;
②用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,按行计算差分。
例: 设x由[0,2π]间均匀分布的6个点组成,求sinx的1~3阶差分。
例:用不同的方法求下列函数f(x)的数值导数,并在同一个座标系中做出f '(x)的图像。
2. 数值积分
-
2.1 数值积分基本原理
现有:
在求任意函数f(x)在[a,b]上的定积分时,可以寻找一个在[a,b]上与f(x)逼近,但形式上却简单且易于求积分的函数p(x),用p(x)在[a,b]上的积分值近似地代替f(x)在[a,b]上的积分值,一般选择被积函数的插值多项式充当这样的替代函数。选择的插值多项式的次数不同,就形成了不同的数值积分公式。
对被积函数f(x)采用一、二次多项式插值,然后对插值多项式求积分,就得到了几个常见的数值积分公式:
-
2.2 数值积分的实现
-
基于变步长辛普森法,MATLAB给出了quad函数和quadl函数来求定积分。函数的调用格式为:
[I,n]=quad(filename,a,b,tol,trace)
[I,n]=quadl(filename,a,b,tol,trace)
filename:被积函数名;
a和b:定积分的下限和上限,
tol:用来控制积分精度,默认时取tol=10-6;
trace:控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,默认时取trace=0;
I:定积分值,
n:被积函数的调用次数。例:就下列函数积分
例: 分别用quad函数和quadl函数求函数的近似值,并在相同的积分精度下,比较函数的调用次数。
2.自适应积分法
- MATLAB提供了基于全局自适应积分算法的integral函数来求定积分,函数的调用格式为:
I=integral(filename,a,b)
其中,I是计算得到的积分;filename是被积函数;a和b分别是定积分的下限和上限,积分限可以为无穷大 。
例:求下列积分函数
3.高斯-克朗罗德法
-
MATLAB提供了基于自适应高斯-克朗罗德法的quadgk函数来求振荡函数的定积分。该函数的调用格式为
[I,err]=quadgk(filename,a,b)
其中,err返回近似误差范围,其他参数的含义和用法与quad函数相同。积分上下限可以是−Inf或Inf,也可以是复数。如果积分上下限是复数,则quadgk在复平面上求积分。
求下列积分函数:
4.梯形积分法
- 在科学实验和工程应用中,函数关系表达式往往是不知道的,只有实验测定的一组样本点和样本值,这时,人们就无法使用quad等函数计算其定积分。在MATLAB中,对由表格形式定义的函数关系的求定积分问题用梯形积分函数trapz,其调用格式为:
I=trapz(X,Y)
其中,向量X、Y定义函数关系Y = f(X)。X、Y是两个等长的向量:X = (x1,x2,…,xn),Y = (y1,y2,…,yn),并且x1<x2<…<xn,积分区间是[x1,xn]。
例:求下列积分函数
5.累计梯形积分
-
在MATLAB中,提供了对数据积分逐步累计的函数cumtrapz。该函数调用格式如下。
Z=cumtrapz(Y)
Z=cumtrapz(X,Y)
对于向量Y,Z是一个与Y等长的向量;对于矩阵Y,Z是一个与Y相同大小的矩阵,累计计算Y每列的积分。函数其他参数的含义和用法与trapz函数的相同。
例:
2.3 多重定积分的数值求解
-
重积分的被积函数是二元函数或三元函数,积分范围是平面上的一个区域或空间中的一个区域。
MATLAB提供的integral2、quad2d、dblquad、integral3、triplequad函数用于求函数 的数值解。函数的调用格式为:
I=integral2(filename,a,b,c,d)
I=quad2d(filename,a,b,c,d)
I=dblquad(filename,a,b,c,d,tol)
I=integral3(filename,a,b,c,d,e,f)
I=triplequad(filename,a,b,c,d,e,f,tol)
例:二重积分:
例题:
3. 离散傅里叶变换
- MATLAB提供了一套计算快速傅里叶变换的函数,它们包括求一维、二维和N维离散傅里叶变换函数
fft、fft2
和fftn
,还包括求上述各维离散傅里叶变换的逆变换函数ifft、ifft2
和ifftn
等。
MATLAB提供了对向量或直接对矩阵进行离散傅里叶变换的函数。
以一维离散傅里叶变换函数为例:其调用格式为:
取N=128,对t从0~1s采样,用fft函数作快速傅里叶变换,绘制相应的振幅—频率图。
求X的快速傅里叶逆变换: