matlab積分為什麼答案不對?

時間 2021-05-29 23:58:08

1樓:孫剛

應用MATLAB中的函式還是要看幫助檔案的。

搞清楚每一種積分演算法的適用範圍。

通常而言,我會用乙個while迴圈,逐步增加取樣點數,得到較好的近似解。

2樓:

quad所採用的演算法是adaptive Simpson quadrature,

簡單來說這個演算法在提高計算速度的同時,會有可能損失一定的數值精度。因此,對於區間很大,但是「密度」很小積分問題不是很適用。

為驗證這一點,你可以嘗試把積分上界逐漸增大,然後從第二個輸出變數觀察函式被evaluate的次數。

比如:1)

>> [Q,FCNT] = quad('1.437/2.*exp(-1.437*t).*(1.437*t).^2',0,10)

Q =0.9999

FCNT =

65(結果是0.9999,被積函式執行次數是65)

2)>> [Q,FCNT] = quad('1.437/2.*exp(-1.437*t).*(1.437*t).^2',0,100)

Q =1.0000

FCNT =

77(結果是1,被積函式執行次數是77)

3)但是把上界提到1000以後

>> [Q,FCNT] = quad('1.437/2.*exp(-1.437*t).*(1.437*t).^2',0,1000)

Q =2.8043e-37

FCNT =

13被積函式的呼叫次數只有13次了。一旦出現這樣的下降,就說明數值精度可能受到了影響。這個時候你可以考慮把幾個區間分開進行計算然後把結果相加,而不是使用這個區間用於一次計算。

最後,quad函式在今後的版本中會逐漸被integral取代。後者會有更好的準確性。quadgk也可以嘗試,它使用adaptive Gauss-Kronrod quadrature演算法,相對於quad來講,有更多的引數可以用於調整計算的過程。

3樓:

quad是老版本的數值積分函式,精度不高,不適用的積分也比較多,目前版本建議使用integral函式

如果是老版本沒有這個函式的話可以使用quadgk計算這個積分

稍微解釋下:

quad的收斂的判斷依據是5點Simpson積分法和三點Simpson積分法的結果做差,小於乙個容差就認為收斂。所以當函式值正好在區間劃分點很小而區間上存在較大值時這種判斷顯然是不正確的。舉個更直觀的例子:

>>quad

(@(x)(x

>0).*(

x<1),

0,1e5)

ans=

0這個被積函式值只有在0到1(不包含0,1)上為1,其餘部分皆為0,正確結果顯然為1,而區間的劃分點正好都取在其他部分,所以quad得到的結果為0

如果改一下

>> quad(@(x)(x>=0).*(x<1),0,1e5)

ans0.999986321810219

這裡僅僅只是包含了初始的端點,這就會使得第一次計算不收斂而進行遞迴,最後結果就準確很多

其實包括integral在內的其他數值積分函式也有類似問題,不過它們的演算法相對而言更加健壯,檢測處理也要複雜一些,所以出錯的可能性小一些

微積分 為什麼?

千石 1.為什麼是y y不是1 y 你可以考慮函式y x 2,這個函式的導數是什麼?是不是印象中寫成 y 2x 而不是1 2x 其實其中y 2x可以寫作 y 1 2x 其含義是等式兩邊同時對x求導,注意這裡是對x。那麼這題等號前半部分就很明確了 lny對y求導是1 y 但是對x求導的話,用鏈式法則可...

對dz z x dx z y dy兩邊積分,為什麼不相等?

能否舉個具體的例子?不然我不知道我是否答得文不對題。比如z xy,那麼dz ydx xdy。等號右邊是乙個整體,當你想把這個整體從積分符號裡面拿出來的時候需要考慮考慮了,因為兩部分的積分物件都不同,不能輕易地拿。拓展一下 事實上dx dy形式的積分是屬於路徑積分,從點 0,0 到點 a,b 有無數種...

曲面積分為什麼區分上下側?

人仁韌忍 上下側只是在將左邊的曲面積分轉化為二重積分時的正負號選取,推薦看一下B站上湯家鳳老師的課程,很詳細。我也是聽了他的課才懂的。 0 三維空間 本身是可定向的。1 曲面作為 的二維子流形,同樣分 可定向 和 不可定向 兩種。對於不可定向的曲面 比如莫比烏斯環 你就沒法區分 上下側 ps 對於不...