MATLAB數值積分函數積分的表示形式

1.       採用inline內聯函數

Matlab中可以有采用幾種不同的方式來指定被積函數。對於簡單的、長度不超過一行的公式採用inline命令比較方便。例如,

可用下面的語句進行計算

>> f=inline('1/sqrt(1+x^4)')    %採用inline內聯函數

 

f =

 

     內聯函數:

     f(x) = 1/sqrt(1+x^4)

 

>> q=quadtx(f,0,1)

 

q =

 

0.9270

從matlab第七版開始,內聯(inline)對象被一種功能更強大的結構匿名函數(anonymousfunction)所替代。在matlab第七版內聯對象還允許被使用,但推薦用匿名函數,因爲後者可以生成更高效率的程序代碼。採用匿名函數,上面的例子變爲

>> f=@(x) 1/sqrt(1+x^4)   %採用匿名函數@(x)

 

f =

 

    @(x)1/sqrt(1+x^4)

 

>> q=quadtx(f,0,1)

 

q =

 

0.9270

 

2.      特殊點不可積函數,採用realmin

如果我們想要計算

可能使用下面的語句

>> f=inline('sin(x)/x')

 

f =

 

     內聯函數:

     f(x) = sin(x)/x

 

>> q=quadtx(f,0,pi)

已達到最大遞歸限制 500。使用set(0,'RecursionLimit',N) 可更改此限制。請注意,超出可用堆棧空間可能會使 MATLAB 和/或計算機崩潰。

 

出錯 inlineeval

 

此時inline函數積分時好像出現了問題,因爲在計算f(0)時,出現了除以0的情況,並且最終產生遞歸限制錯誤。一種補救的方法是,將積分的下限由0變爲最小的正浮點數,realmin。

>> q=quadtx(f,realmin,pi)

 

q =

 

1.8519

這樣就可以避免遞歸錯誤情況的發生。

 

3.      使用m文件寫函數

針對上面出現的問題,另一種方法是使用M文件,而不是內聯函數。創建包含下面程序的文件sinc.m

 

function f=sinc(x)

%函數sin(x)/x

if x==0

    f=1;

else

    f=sin(x)/x;

end

 

然後使用函數句柄計算積分

>> Q=quadtx(@sinc,0,pi)

 

Q =

 

    1.8519

 

4.      依賴於參數的積分

一個典型的例子是β函數,它定義爲

matlab中已經實現了一個現成的β函數,但我們可以以它爲例,說明如何處理積分中的參數。創建一個帶三個參數的內聯函數

>> F=inline('t^(z-1)*(1-t)^(w-1)','t','z','w')

或者創建一個M文件:

function f=betaf(t,z,w)

f= t^(z-1)*(1-t)^(w-1)

並將其命名爲betaf.m。

就像任何函數一樣,參數的順序是很重要的。定義被積函數時,必須讓積分變量爲其第一個參數。然後給出其他參數的值,作爲傳遞給quadtx的附加參數。要計算β(8/3,10/3)

應該先設

>> z=8/3;

>> w=10/3;

>> tol=1e-6;

然後運行命令

>> Q=quadtx(F,0,1,tol,z,w)

 

Q =

 

0.0348

或Q=quadtx(@betaf,0,1,tol,z,w)
--------------------- 
作者:吉大秦少游 
來源:CSDN 
原文:https://blog.csdn.net/zhanshen112/article/details/78390330 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章