Matlab数值微分与数值积分

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 数值积分的实现

  1. 基于变步长辛普森法,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、fft2fftn,还包括求上述各维离散傅里叶变换的逆变换函数ifft、ifft2ifftn等。
    MATLAB提供了对向量或直接对矩阵进行离散傅里叶变换的函数。
    以一维离散傅里叶变换函数为例:其调用格式为:
    在这里插入图片描述
    取N=128,对t从0~1s采样,用fft函数作快速傅里叶变换,绘制相应的振幅—频率图。
    在这里插入图片描述
    求X的快速傅里叶逆变换:
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章