相关函数:
%符号积分
int(f,v)
int(f,v,a,b)
%数值积分
trapz(x,y)% 梯形法沿列方向求函数Y关于自变量X的积分
cumtrapz(x,y)% 梯形法沿列方向求函数Y关于自变量X的累计积分
quad(fun,a,b,tol) %采用递推自适应Simpson法计算积分
quad1(fun,a,b,tol) % 采用递推自适应Lobatto法求数值积分
dbquad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)% 二重(闭型)数值积分指令
triplequad(fun,xmin,xmax,ymin,ymax,zmin,zmax,tol)% 三重(闭型)数值积分指令
% 二元函数重积分的数值计算
dblquad(fun,xmin,xmax,ymin,ymax)% 矩形区域上的二重积分
quad2dggen(fun,xlower,xupper,ymin,ymax)%任意区域上二元函数的数值积分
函数1 quad、quadl、quad8
功能: 数值定积分,自适应Simpleson积分法。
格式: q =quad(fun,a,b)%近似地从a到b计算函数fun的数值积分,误差为10-6。若给fun输入向量x,应返回向量y,即fun是一单值函数。
q = quad(fun,a,b,tol) %用指定的绝对误差tol代替缺省误差。tol越大,函数计算的次数越少,速度越快,但结果精度变小。
q = quad(fun,a,b,tol,trace,p1,p2,…) %将可选参数p1,p2,…等传递给函数fun(x,p1,p2,…),再作数值积分。若tol=[]或trace=[],则用缺省值进行计算。
[q,n] =quad(fun,a,b,…) % 同时返回函数计算的次数n
… = quadl(fun,a,b,…) % 用高精度进行计算,效率可能比quad更好。
… =quad8(fun,a,b,…) % 该命令是将废弃的命令,用quadl代替。
例1.
>>fun =inline(‘’3*x.^2./(x.^3-2*x.^2+3)’);
>>Q1 = quad(fun,0,2)
>>Q2 = quadl(fun,0,2)
计算结果为:
Q1 = 3.7224
Q2 = 3.7224
函数2trapz、 cumtrapz
功能: 梯形法数值积分
注意:积分结果要乘以自变量间隔才是积分结果!!!
格式: T =trapz(Y)%用等距梯形法近似计算Y的积分。若Y是一向量,则trapz(Y)为Y的积分;若Y是一矩阵,则trapz(Y)为Y的每一列的积分;若Y是一多维阵列,则trapz(Y)沿着Y的第一个非单元集的方向进行计算。积分结果需要乘以自变量间隔dX,即Q=dx*trapz(Y)。
T =trapz(X,Y)% 用梯形法计算Y在X点上的积分。若X为一列向量,Y为矩阵,且size(Y,1) =length(X),则trapz(X,Y)通过Y的第一个非单元集方向进行计算。
T = trapz(X,Y,dim) %沿着dim指定的方向对Y进行积分。若参量中包含X,则应有length(X)=size(Y,dim)。
trapz(x,y)% 梯形法沿列方向求函数Y关于自变量X的积分,结果为一常数
cumtrapz(x,y)%梯形法沿列方向求函数Y关于自变量X的累计积分,即从x数组的起点开始,每一个x点都作为积分上限得到的积分值,积分为一个与x维度一样的数组,最后一个数与trapz(x,y)一样
例2。 计算f(t)=exp(-t^2)在[0,1]上的定积分
>>symsx
int(exp(-x^2),0,1)
ans = 1/2*erf(1)*pi^(1/2) %erf为误差函数
>>vpa(int(exp(-x^2),0,1))
ans = .7468241328124270
>>d=0.001;x=0:d:1;d*trapz(exp(-x.^2))
ans = 0.7468
>>quad('exp(-x.^2)',0,1,1e-8)
ans = 0.7468