1. 程式人生 > >用MATLAB求定積分

用MATLAB求定積分

一、符號積分
符號積分由函式int來實現。該函式的一般呼叫格式為:
int(s):沒有指定積分變數和積分階數時,系統按findsym函式指示的預設變數對被積函式或符號表達式s求不定積分;
int(s,v):以v為自變數,對被積函式或符號表達式s求不定積分;
int(s,v,a,b):求定積分運算。a,b分別表示定積分的下限和上限。該函式求被積函式在區間[a,b]上的定積分。a和b可以是兩個具體的數,也可以是一個符號表達式,還可以是無窮(inf)。當函式f關於變數x在閉區間[a,b]上可積時,函式返回一個定積分結果。當a,b中有一個是inf時,函式返回一個廣義積分。當a,b中有一個符號表達式時,函式返回一個符號函式。
例:
求函式x^2+y^2+z^2的三重積分。內積分上下限都是函式,對z積分下限是sqrt(x*y),積分上限是x^2*y;對y積分下限是sqrt(x),積分上限是x^2;對x的積分下限1,上限是2,求解如下:
>>syms x y z  %定義符號變數
>>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2)  %注意定積分的書寫格式
F2 =
1610027357/6563700-6072064/348075*2^(1/2)+14912/4641*2^(1/4)+64/225*2^(3/4)    %給出有理數解

>>VF2=vpa(F2)  %給出預設精度的數值解
VF2 =
224.92153573331143159790710032805


二、數值積分
1.數值積分基本原理
求解定積分的數值方法多種多樣,如簡單的梯形法、辛普生(Simpson)法、牛頓-柯特斯(Newton-Cotes)法等都是經常採用的方法。它們的基本思想都是將整個積分割槽間[a,b]分成n個子區間[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。這樣求定積分問題就分解為求和問題。
2.數值積分的實現方法
基於變步長辛普生法,MATLAB給出了quad函式來求定積分。該函式的呼叫格式為:
[I,n]=quad('fname',a,b,tol,trace)
基於變步長、牛頓-柯特斯(Newton-Cotes)法
,MATLAB給出了quadl函式來求定積分。該函式的呼叫格式為:
[I,n]=quadl('fname',a,b,tol,trace)
其中fname是被積函式名。a和b分別是定積分的下限和上限。tol用來控制積分精度,預設時取tol=0.001。trace控制是否展現積分過程,若取非0則展現積分過程,取0則不展現,預設時取trace=0。返回引數I即定積分值,n為被積函式的呼叫次數。
例:
求函式'exp(-x*x)的定積分,積分下限為0,積分上限為1。
>>fun=inline('exp(-x.*x)','x');  %用行內函數定義被積函式fname
>>Isim=quad(fun,0,1)  %辛普生法
Isim =
  0.746824180726425
IL=quadl(fun,0,1)   %牛頓-柯特斯法
IL =
0.746824133988447


三、梯形法求向量積分
trapz(x,y)—梯形法沿列方向求函式Y關於自變數X的積分(向量形式,數值方法)。
>>d=0.001;
>>x=0:d:1;
>>S=d*trapz(exp(-x.^2))
S= 
0.7468
或:
>>format long g
>>x=0:0.001:1;  %x向量,也可以是不等間距
>>y=exp(-x.^2);   %y向量,也可以不是由已知函式生成的向量
>>S=trapz(x,y);   %求向量積分
S =
    0.746824071499185 
 
 
附:int與quad區別
int的積分可以是定積分,也可以是不定積分(即有沒有積分上下限都可以積)可以得到解析的解
,比如你對x^2積分,得到的結果是1/3*x^3,這是通過解析的方法來解的。如果int(x^2,x,1,2)得到的結果是7/3


quad是數值積分,它只能是定積分(就是有積分上下限的積分),它是通過simpson數值積分來求得的(並不是通過解析的方法得到解析解,再將上下限代入,而是用小梯形的面積求和得到的)。如果f=inline('x.^2');quad(f,1,2)得到的結果是2.333333,這個數並不是7/3


int是符號解,無任何誤差,唯一問題是計算速度;quad是數值解,有計算精度限制,優點是總是能有一定的速度,即總能在一定時間內給出一個一定精度的解。