|
|
看推薦的帖子,積分用 quadgk,出結(jié)果了~~
【http://blog.sina.com.cn/s/blog_8138d87601013wrk.html】
四、[q,errbnd] = quadgk(fun,a,b,param1,val1,param2,val2,...)
自適應(yīng)Gauss-Kronrod數(shù)值積分,適用于高精度和震蕩數(shù)值積分,支持無(wú)窮區(qū)間,并且能夠處理端點(diǎn)包含奇點(diǎn)的情況,同時(shí)還支持沿著不連續(xù)函數(shù)積分,復(fù)數(shù)域線性路徑的圍道積分法。
注意事項(xiàng):
1.積分限[a,b]可以是[-inf,inf],但必須快速衰減;
2.被積函數(shù)在端點(diǎn)可以有奇點(diǎn),如果區(qū)間內(nèi)部有奇點(diǎn),將以奇點(diǎn)區(qū)間劃分成多個(gè),也就是說(shuō)奇點(diǎn)只能出現(xiàn)在端點(diǎn)上;
3.被積函數(shù)可以劇烈震蕩;
4.可以計(jì)算不連續(xù)積分,此時(shí)需要用到'Waypoints'參數(shù),'Waypoints'中的點(diǎn)必須嚴(yán)格單調(diào);
5.可以計(jì)算圍道積分,此時(shí)需要用到'Waypoints'參數(shù),并且為復(fù)數(shù),各點(diǎn)之間使用直線連接;
6.param,val為函數(shù)的其它控制參數(shù),比如上面的'waypoints'就是,具體看幫助。
出現(xiàn)錯(cuò)誤:
1.'Reached the limit on the maximum number of intervals in use'
2.'Infinite or Not-a-Number function value encountered'
例4 計(jì)算有奇點(diǎn)積分int(exp(x)*log(x),0,1)。
>>F=@(x)exp(x).*log(x);%奇點(diǎn)必須在端點(diǎn)上,否則請(qǐng)先進(jìn)行區(qū)間劃分。
>>Q = quadgk(F,0,1)
Q =
-1.3179
例5 計(jì)算半無(wú)限震蕩積分int(x^5*exp(-x)*sin(x),0,inf)。
>>F=@(x)x.^5.*exp(-x).*sin(x);
>>fplot(F,[0,100])%繪圖,看看函數(shù)的圖形
>>[q,errbnd] = quadgk(F,0,inf,'RelTol',1e-8,'AbsTol',1e-12)%積分限中可以有inf,但必須快速收斂
q =
-15.0000
errbnd =
9.4386e-009
例6 計(jì)算不連續(xù)積分,積分函數(shù)為f(x)=x^5*exp(-x)*sin(x),但是人為定義f(2)=1000,f(5)=-100,積分區(qū)間為[1 10]。
>>F=@(x)x.^5.*exp(-x).*sin(x);
>>[q,errbnd] = quadgk(F,1,10,'Waypoints',[2 5])%顯然2,5為間斷點(diǎn)
q =
-10.9408
errbnd =
3.2296e-014
例7 計(jì)算圍道積分,在復(fù)數(shù)域內(nèi),積分函數(shù)1/(2*z-1),積分路徑為由[-1-i 1-i 1+i -1+i -1-i]圍成的矩形邊框。
>>Waypoints=[-1-i 1-i 1+i -1+i -1-i];
>>plot(Waypoints);%繪制積分路徑
>>xlabel('Real axis');ylabel('Image axis');axis([-1.5 1.5 -1.5 1.5]);grid on;
>>Q = quadgk(@(z)1./(2*z - 1),-1-i,-1-i,'Waypoints',[1-i,1+i,-1+i])%注意各點(diǎn)間使用直線連接
ans =
0.0000 + 3.1416i
>> quadgk(@(z)1./(2*z - 1),-1-i,-1-i,'Waypoints',Waypoints)%使用這個(gè)的效果也是一樣的,就是說(shuō)始末點(diǎn)可以隨便包不包含在Waypoints中。
ans =
0.0000 + 3.1416i |
|