Re: [問題] 關於積分問題已回收
※ 引述《great99 (多力多滋好好吃)》之銘言:
: 大家好,小弟為matlab新手,
: 目前碰到了小問題,希望各位高手幫小弟一下,
: 幫我看一下哪裡出錯了,
: y=[1-exp((r^-6 - r^-12)/4)]*r^2 對r積分,
: 積分範圍由零到無限大,
: 目前的寫法:
: y=int('(1-exp((r^-6-r^-12)/4))*r^2)','r',0,inf)
: 不知到哪邊錯了,拜託各位高手了
Exponential function 收斂很快,畫個圖就可以知道,
所以求值的話並不需要積到 infinity。
y = quad(@(r)(1-exp((r.^-6-r.^-12)./4)).*r.^2, 0, 1000, 1e-10)
以上是由 0 積到 1000,然後誤差容忍值設為 10^-10
可以得到結果如下:
y = 0.17171343500784372
大概就已經可以準到小數以下第八位了。
如果要快的話其實積到 100 就已經非常足夠了,就算和積到 1000 比,
也是到小數以下第七位才不一樣。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
推
05/06 10:32, , 1F
05/06 10:32, 1F
→
05/06 10:38, , 2F
05/06 10:38, 2F
→
05/06 10:38, , 3F
05/06 10:38, 3F
→
05/06 13:40, , 4F
05/06 13:40, 4F
→
05/06 21:42, , 5F
05/06 21:42, 5F
mules 大說得沒錯,如果要在數學上較為嚴謹的話,是可以將原積分式分為兩部分,
一個部份是由 0 積到 1,另一部分是由 1 積到無限大。
接著將由 1 積到無限大的部份以 r = 1/x 做變數變換,就可以將這部份的積分轉換為
另一個由 0 積到 1 的積分式。
∞
∫(1-exp((r^-6-r^-12)./4))*r^2 dr =
0
1 1
∫(1-exp((r^-6-r^-12)./4))*r^2 dr + ∫(1-exp((x^6-x^12)./4))*x^-4 dx
0 0
程式部份
y = quad(@(r)(1-exp((r.^-6-r.^-12)./4)).*r.^2, 0, 1, 1e-15) + ...
quad(@(x)(1-exp((x.^6-x.^12)./4)).*x.^-4, 0, 1, 1e-15);
結果
y = 0.17171343543762976
※ 編輯: DigiPrince 來自: 140.113.94.230 (05/10 09:02)
討論串 (同標題文章)