matlab進行數值近似積分,含變化的常數做為參數


  
關於matlab中求定積分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 ;

最新心得:
看一本書上介紹quad積分時,是創建了一個子函數形式,如
function f=quadl(x)
f=x.^2;

Q=quad('quadl',0,2)

結果Q =
    2.6667

如果函數中有一個已知變量如a的話,如
function f=quadl(x)
a=2;
f=a+x.^2;




Q=quad('quadl',0,2)
結果Q =
    6.6667

當用使用inline函數的時候可以避免調用子函數的麻煩,直接把這個功能集成於總程序,如
f=inline('x.^2');quad(f,1,2)
但是當函數為
a=2;
f=inline('a+x.^2');
quad(f,1,2)

計算就會出錯,說明inline中不能帶已知的字母。

但是很多時候,變量a是循環變化的,這樣就導致這種調用子函數的方法非常不好用,
a不能及時改變,下面的方法可以解決這個問題:

a=2;
f=@(x)(a+x.^2);
Q=quad(f,0,2)

結果Q =
    6.6667 正確
用@來表達函數要比inline應用更廣,在循環中應用更有利!

本人對matlab認知尚淺,不知道上面的說法有什么不妥的地方還請指正!
 
 
 
 
---------------------------分割線-------------------------------
matlab的積分個人感覺好奇怪,各種報錯,樓主這種方法的確可用。
 
起初我用int(y,x)求積分,結果得到的還是int,也就是積不出來,所以開始使用數值近似解積分quad
 
不知道為什么我quad(f,0,inf)會報錯說超出數值解,但是我用quad(f,0,10000)卻可以。。。一直以為是我式子不對導致不收斂
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM