原文地址:關於matlab中求定積分int和quad命令的使用作者:笨笨貓
關於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認知尚淺,不知道上面的說法有什么不妥的地方還請指正!
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)卻可以。。。一直以為是我式子不對導致不收斂

![[轉載]關於matlab中求定積分int和quad命令的使用](/image/aHR0cDovL3d3dy5jaGluYXZpYi5jb20vZm9ydW0vaW1hZ2VzL3llc3hwX2xpdmUvYWdyZWUuZ2lm.png)