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

2021-09-25 02:21:09 字數 1700 閱讀 9045

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

Matlab數值積分

function gc,ak,xk guasschebyshev fun,n 高斯 勒讓德數值積分 引數說明 fun 積分表示式,可以是函式控制代碼 inline函式 匿名函式 字串表示式,但是必須可以接受向量輸入 a,b 積分上下限只能 1 1 故忽略 n 積分階數,可以任意正整數,但是不建議設定...

matlab 數值積分!

1.梯形格式 2.其他格式 matlab提供了quad quadl 等函式命令計算一元函式的數值積分,其中quad 採用遍歷的自適應simpson法計算函式的數值積分,quadl採用遍歷的自適應lobatto法計算函式的數值積分。其呼叫格式一般為 q,fcnt quad function,a,b 其...

MATLAB 數值微積分

學習筆記 郭彥甫 yan fu kuo 台大生機系 matlab教學 10數值微積分 representing polynomials in matlab values of polynomials polyval a 9,5,3,7 x 2 0.01 5 f polyval a,x plot x,...