第5章定积分 第4章介绍了不定积分的概念及求解方式,本章将介绍定积分的定义、定积分的近似计算求解、反常积分的有关计算等内容。本章内容侧重理论与计算,第6章将会对定积分在几何与物理上的应用做更详尽的介绍说明。 5.1本章目标 本章将尝试用MATLAB编写有关计算函数来加深对定义的理解,并解决如下问题: (1) 运用定积分的几何意义编写求解函数; (2) 定积分的近似计算与数值积分; (3) 定积分的符号求解; (4) 积分上限函数及其求导; (5) 两种反常积分的符号求解与近似求解——Γ函数与Β函数; (6) 定积分方法的综合运用; (7) 积分的数值求解。 5.2相关命令 下面介绍涉及定积分的MATLAB命令。 (1) int: 定积分求解函数。用法如下:  int(expr,var,a,b): 计算出区间[a,b]上关于var的表达式expr的定积分,如果未指定变量,int将使用symvar确定的默认变量。如果expr是常量,则默认变量为x。  int(,Name,Value): 使用一个或多个Name,Value对参数指定选项。例如,'IgnoreAnalyticConstraints',true指定int对积分器应用额外的简化。 (2) trapz: 梯形法求定积分。用法如下:  trapz(Y): 通过梯形法计算Y的近似积分(采用单位间距),Y的大小确定求积分所沿用的维度。如果Y为向量,则trapz(Y)是Y的近似积分; 如果Y为矩阵,则trapz(Y)对每列求积分并返回积分值的行向量; 如果Y为多维数组,则trapz(Y)对其大小不等于1的第一个维度求积分。  trapz(X,Y): 根据X指定的坐标或标量间距对Y进行积分。  trapz(,dim): 使用以前的任何语法沿维度dim求积分,必须指定Y,也可以指定X。如果指定X,则它可以是长度等 size(Y,dim)的标量或向量。例如,如果Y为矩阵,则trapz(X,Y,2)对Y的每行求积分。 (3) quad: 抛物线(simpson)法求定积分。用法如下:  quad(fun,a,b,tol): 使用递归自适应simpson积分法求取函数fun从a到b的近似积分,误差为tol,默认为1e-6。 (4) integral: 计算数值积分。用法如下:  integral(fun,xmin,xmax): 使用全局自适应积分和默认误差容限在xmin至xmax间以数值形式为函数 fun 求积分。  integral(fun,xmin,xmax,Name,Value): 指定具有一个或多个Name,Value对组参数的其他选项。例如,指定 'WayPoints',后跟实数或复数向量,为要使用的积分器指示特定点。 (5) gamma: 求gamma积分。用法如下:  gamma(x): 其中x为实数参数。 (6) beta: 求beta积分。用法如下:  beta(p,q): 求beta积分,其中p,q为实数参数。 (7) feval: 将变量数值代入符号函数。用法如下:  feval(fun,x1,…,xm): 将x1,…,xm分别代入fun方程求解。 (8) vpasolve: 求方程数值解。用法如下:  vpasolve(fun,var): 用数值方法求解变量为var的方程fun的根。 5.3定积分的几何意义与近似计算 先回顾一下定积分的定义。 定义51设函数fx在a,b上有界,在a,b中插入若干个分点 a=x0梯形法>矩形法。 计算定积分近似值的方法还有很多,如: NewtonCotes公式法、Gauss法、复化梯形法、复化simpson法等,它们精确度更高,依赖的函数更为复杂,被更多地应用于追求高精度数值解的情形,这部分内容将在本章末尾做简要说明。 5.4定积分的符号计算 通常用求原函数的方式计算定积分的值,这依赖于一个重要公式,即: 定理51(牛顿莱布尼茨公式) 如果函数Fx是连续函数fx在区间a,b上的一个原函数,那么 ∫bafxdx=Fb-Fa 在MATLAB中,与不定积分的求解相同,仍然使用int函数求解符号函数的定积分,调用方式为: Q=int(fun,x,a,b):fun为待积分符号函数表达式(可为单个方程或矩阵),x为符号变量,当fun为单一变量时,可以默认。a、b分别为定积分的下限与上限 。 例53计算下列表达式: (1) ∫3-1dx1+x2; (2) ∫-1-2dxx; (3) ∫π0xcosxx2+1 xcoskx3+sinx2+cosxdx。 解: syms x k f1=1/(1+x^2); f2=1/x; f3=[x,cos(x)/((x^2+1)^0.5); x*cos(k*x),(3+sin(x))/(2+cos(x))]; int(f1,3^0.5,-1) ans = -7π12 int(f2,-2,-1) ans = -log(2) int(f3,0,pi) ans = π22∫π0cos(x)x2+1dx -2sinπk22-πksin(πk)k2log(3)+π3 题(3)中出现了不可积的定积分。对于该类情况,可以使用vpa函数,得到其任意精度的数值解: F=int(cos(x)/(x^2 + 1)^(1/2), x, 0, pi); vpa(F,5) ans = 0.48827 5.5积分上限函数及其性质 Φx=∫xaftdt(a≤x≤b) 定理52如果函数fx在积分区间a,b上连续,那么积分上限函数 Φx=∫xaftdt 在a,b上可导,并且它的导数 Φ′x=ddx∫xaftdt=fx 定理53如果函数fx在积分区间a,b上连续,那么函数 Φx=∫xaftdt 就是fx在a,b上的一个原函数。 例54计算ddx∫cosxsinxcosπt2dt的导数。 解: syms t x F1=cos(pi*t^2); F11=int(F1,sin(x),cos(x)) F11 = 2(C(2cos(x))-C(2sin(x)))2 diff(F11) ans = -2(2cos(πcos(x)2)sin(x)+2cos(πsin(x)2)cos(x))2 5.6无穷限区间的反常积分 定义52设函数fx在区间a,+∞上连续,任取t>a,作定积分∫tafxdx,再求极限: limt→+∞∫tafxdx(51) 若极限存在,则上式称为函数fx在无穷区间a,+∞上的反常积分,记为∫+∞afxdx,即 ∫+∞afxdx=limt→+∞∫tafxdx 此时也称反常积分收敛; 若上述极限不存在,则∫+∞afxdx无意义,称为反常积分∫+∞afxdx发散。 类似地,设函数fx在区间-∞,b上连续,任取t0) 解: syms x t f1=1/(1+x^2); int(f1,-inf,inf) ans = π syms a p positive % 输入变量及变量范围 f2=t*exp(-p*t); int(f2,t,0,inf) ans = 1p2 5.7无界函数的反常积分 定义53若函数fx在点a的任意邻域无界,则称点a为fx的瑕点,该类积分又称为瑕积分。 设函数fx在区间a,b上连续,点a为fx的瑕点,任取t>a,作定积分∫btfxdx,再求极限: limt→a∫btfxdx(53) 若极限存在,则上式称为函数fx在区间a,b上的反常积分,记为∫bafxdx,即 ∫bafxdx=limt→a∫btfxdx 此时也称反常积分收敛; 若上述极限不存在,则∫bafxdx无意义,称为反常积分∫bafxdx发散。 当b为瑕点时亦然,这里不再过多陈述。 例56证明下列无界反常积分,当0range b=a+1; I=quad(fun,a,b,tol); Q=Q+I; a=b; end elseif isinf(a) Q=0;I=1; while I>range a=b-1; I=quad(fun,a,b,tol); Q=Q+I; b=a; end else Q=quad(fun,a,b,tol); end 5.9Γ函数与B函数 下面介绍在理论和实际应用中都非常重要的反常积分Γ函数,并对与它联系紧密同样重要的反常积分Β函数做课本的补充说明。 定义54Γ函数的定义为 Γs=∫+∞0xs-1e-xdx 为查看其定义域,将Γ函数写为 Γs=∫10xs-1e-xdx+∫+∞1xs-1e-xdx 可见,该函数既为无穷限区间的反常积分,当s-1<0时,又为无界函数的反常积分。 s≤0时,等式右边第一个反常积分发散; s>0时,等式右边两个反常积分都收敛,因此该函数定义域为0,+∞。 定义55B函数的定义为 Bp,q=∫10xp-11-xq-1dx 为查看其定义域,将B函数写为 Bp,q=∫120xp-11-xq-1dx+∫112xp-11-xq-1dx p>0时等式右边第一个反常积分收敛,q>0时等式右边第二个反常积分收敛,因此该函数的定义域为p,q∈0,+∞×0,+∞。 MATLAB提供了求Γ函数与B函数函数值的内置函数gamma,beta,其调用形式为 Y1=gamma(x); Y2=beta(p,q) 参数说明: x,p,q为参数,它必须为实数,Y1,Y2分别为对应积分值。 利用MATLAB绘制Γ函数与简单的B函数的图形(如图56、图57所示): fplot(@gamma) %运用内置fplot函数直接画出gamma函数的一种情况 legend('Gamma(x)') %用内置legend函数做图例标注 grid on xlabel('x'); ylabel('y'); p=linspace(0,5);q=linspace(0,5); Y2=beta(p,q); %画出beta函数的一种情况 plot(Y2) legend('Beta(p,q)') grid on xlabel('x'); ylabel('y'); 图56Γ函数图形 图57B函数图形 由于函数gamma的特殊性,也有自己的性质。对于整数n: (1) gamma(n+1)=factorial(n)=prod(1: n)。 (2) gamma函数的域通过解析延拓延伸到负实数,在负整数处有简单的极点。这种扩展源于以下递归关系的重复应用: Γs+1=sΓs Γ函数与B函数的关系: Bp,q=ΓpΓqΓp+q(p>0,q>0) 5.10拓展实例 下面将综合运用以上方法,在具体实例中体会MATLAB在处理定积分问题上提供的便利条件。 例58求函数Fa=∫a-asinaxsinxadx(a>0)的最大值。 解: syms a x; assume(a >=0);%设置参数范围(a>=0) %a=1与a~=1时分别有两种情况 F = int(sin(a*x)*sin(x/a),x,-a,a) F = 1-sin(2)2a=1 2a(sin(a2)cos(1)-a2cos(a2)sin(1))a4-1a≠1 F1 = piecewise(a == 1, 1 - sin(2)/2, a ~= 1, (2*a*(sin(a^2)*cos(1) - a^2*cos(a^2)*sin(1)))/(a^4 - 1)) F1 =4912087702119901 9007199254740992a=1 2a1216652631687587sin(a2)2251799813685248-3789648413623927a2cos(a2)450359927370496a4-1 a≠1 %为了后续计算便利,先只考虑a~=1的情况 assumeAlso(a ~= 1); F= int(sin(a*x)*sin(x/a),x,-a,a) F = 2a(sin(a2)cos(1)-a2cos(a2)sin(1))a4-1 fplot(F,[0,10], 'linewidth',3) xlabel('x'); ylabel('y'); hold on Fa = diff(F,a) Fa = 2σ1a4-1+2a(2acos(a2)cos(1)-2acos(a2)sin(1)+2a3sin(a2)sin(1))a4-1-8σ4σ1(a4-1)2 where σ1=sin(a2)cos(1)-a2cos(a2)sin(1) 本节程序还可以得到F的图形(如图58所示),根据F的图形,可以很清晰地看到F的最值分布情况及收敛情况,该函数的最大值点为区间[1,2]的极大值点。为了便于进一步确定,在该图上还可以绘制F一阶导数Fa的图形: fplot(Fa,[0,10], '--','linewidth',2) legend('F','Fa') grid on hold off 可以看出,F的极值点恰为Fa的零点,这样在区间[1,2]内求Fa的根,即为区间[1,2]F函数取极大值时a的取值: a_max = vpasolve(Fa,a,[1,2]) a_max = 1.5782881585233198075558845180583 %将a的取值代入F函数,可得最大值点 F_max = vpa(subs(F,a,a_max)) F_max = 1.2099496860938456039155811226054 vpa(int(sin(x)*sin(x),x,-1,1)) ans = 0.54535128658715915230199006704413 图58函数F与Fa的图形 最后对a=1的情况进行验证,结果表明F(1)不是最大值,从而确定在区间[1,2]内的最大值就是函数在整个定义域内的最大值。 5.11定积分的数值求解的补充说明 除了在正文部分提到的定积分的近似计算的方法,还有很多方法对定积分进行数值求解。下面介绍依赖Lagrange插值多项式的插值法求解定积分的数值解。 定义56设函数fx在a,b上的m+1个互异点x0,x1,…,xm上的函数值和若干阶导数值f(j)xi(i=0,1,2,…,m; j=0,1,…,ni-1)是已知的,这里∑mi=0ni=n+1 若存在一个n次多项式pnx,满足如下插值条件 p(j)nxn=f(j)xi(i=0,1,2,…,m; j=0,1,2,…,ni-1) 则称pnx是fx在a,b上关于插值节点(一般简称节点)x0,x1,…,xm的n次插值多项式,而 rnx=fx-pnx 称为插值余项。 根据以上定义,介绍Lagrange插值法。 n0=n1=…=nm=1,m=n 这时n+1个插值条件均为函数值而不包括导数值,即pnx满足 pnxi=fxi,i=0,1,2,…,n 如果能找到一组n次多项式qkx,k=0,1,2,…,n,满足 qkxi=σik 这里 σik=0,i≠k 1,i=k 取 qkx=∏ni=0i≠kx-xi ∏ni=0i≠k xk-xi,k=0,1,2,…,n 于是就得到了fx的n次插值多项式 pnx=∑nk=0fxk∏ni=0i≠kx-xixk-xi 这就是Lagrange插值多项式。 则 ∫bafxdx=∫bapnxdx=∫ba∑nk=0fxk∏ni=0i≠kx-xixk-xidx=∑nk=0fxk∫ba∏ni=0i≠kx-xixk-xidx 取等分步长h=b-an,则 xk=x0+khk=0,1,2,…,n 作变换 t=x-x0h 则 ∫ba∏ni=0i≠kx-xixk-xidx=h∫n0∏nj=0j≠kt-jk-jdt=-1n-khn-k!k!∫n0∏nj=0j≠kt-jdtk=0,1,2,…,n 这种方法通常称为NewtonCotes公式。 根据上述公式,可编写函数程序interpoly,用插值法求解定积分的数值解: function I=interpoly(fun,a,b,n) % INTERPOLY 插值法求解定积分的数值解 % 输入参数: %——fun:被积函数 %——a:积分下限 %——b:积分上限 %——h:等分步长 % 输出参数: %——I:求解定积分的数值解 % 调用说明: % I=interpoly(fun,a,b,h):插值法求解定积分的数值解,待积分函数为fun,积分区间为[a,b],等 % 分步长为h fun=matlabFunction(fun); X=linspace(a,b,n+1); Y=feval(fun,X); I=0; for k=1:n A=(-1)^(n-k)*h/(factorial(n-k)*factorial(k)); T=1; syms t for j=0:n T=T*(t-j); end T=T/(t-k); Ak=A*int(T,0,n); I=I+eval(Ak*Y(k)); end 例59用插值法求定积分∫1041+x2dx的近似值。 解: syms s x fun=4/(1+x^2) fun = 4x2+1 format long I=interpoly(fun,0,1,1/50) I = 3.165111293937786 5.12动手实践 请用MATLAB求解下列问题。 1. 依据右取法(矩形右上角与曲线刚好相交)编写矩形法求积分函数。 2. 计算下面函数的导数: limx→0∫1cosxe-t2dtx2。 3. 计算无穷限区间的反常积分值∫+∞adxxp(a>0)。 4. 求解函数∫+∞11x2dx。 5. 对函数f(x)=11+25x2进行拉格朗日插值,观察插值函数是否收敛于原函数。