Re: [問題] 關於積分問題已回收

看板MATLAB作者 (幻無影)時間15年前 (2010/05/06 08:05), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串3/4 (看更多)
※ 引述《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
其實我也不知道怎麼查matlab一些函數的容忍值跟誤差..
05/06 10:38, 2F

05/06 10:38, , 3F
真的要去看m檔案裡面的程式碼?
05/06 10:38, 3F

05/06 13:40, , 4F
有書可以看
05/06 13:40, 4F

05/06 21:42, , 5F
1~無線大 ==> 用倒數 ,0~1 ==>直接積分 ?
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)
文章代碼(AID): #1BuWVdwl (MATLAB)
文章代碼(AID): #1BuWVdwl (MATLAB)