Re: [問題] 數值積分

看板Mathematica作者 (追風箏的孩子)時間9年前 (2015/05/04 14:32), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《obelisk0114 (追風箏的孩子)》之銘言: : 我想要用數值積分求下面這積分的 FWHM(半高全寬) : http://i.imgur.com/LgocICB.png
: 我想求出最大值發生處以及其數值,然後用 FindRoot 解 : 但是第一步用 MaxValue 就跑出什麼 max precision 的問題 : 想問有什麼簡單的數值方法大致求出 FWHM : 附上積分程式碼 : Integrate[( : Abs[Integrate[ : E^(I*2*Pi/0.7*z*0.5^2*p^2)*BesselJ[0, 2*Pi/0.7*r*0.5*p]*p, {p, : 0, 1}]])^2*r, {r, 0, 3552/15}] 後來用 Simpson's 3/8 rule (for n intervals) http://en.wikipedia.org/wiki/Simpson%27s_rule 在 NIntegrate 出現精確度的問題 他說甚麼 bisection 在 9 次遞迴無法精確收斂之類的 f[z_?NumericQ, r_?NumericQ] := Abs@NIntegrate[ E^(I*2*Pi/0.7*z*0.5^2*p^2)*BesselJ[0, 2*Pi/0.7*r*0.5*p]*p, {p, 0, 1}] g[z_, n_Integer] := ParallelTable[f[z, x]^2*x, {x, 0, 3552/15, 3552/15/n}].Join[{1}, Flatten[Table[{3, 3, 2}, {(n - 1)/3}]], {1}]*(3552/15/n)*3/8; data = {#, g[#, 1000]} & /@ Range[-0.05, 3, 0.05] ListLinePlot@data Show[Plot[InterpolatingPolynomial[data, z], {z, 0, 1}], ListLinePlot@data] FindRoot[D[InterpolatingPolynomial[data, z], z], {z, 1}] 不知 NIntegrate 那邊要如何修改? 在 n 的數值,也就是切割次數那邊 假如切1000份,還會有 FindRoot 不夠逼近問題, 切割更細(試過4000)可以解決 不過 NIntegrate 問題仍然存在 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.232.118 ※ 文章網址: https://www.ptt.cc/bbs/Mathematica/M.1430721134.A.73A.html

05/05 16:25, , 1F
後來設定 MaxRecursion->20, AccuracyGoal->8
05/05 16:25, 1F

05/05 16:26, , 2F
PrecisionGoal->8, 沒有出現錯誤訊息
05/05 16:26, 2F
文章代碼(AID): #1LHn9kSw (Mathematica)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
文章代碼(AID): #1LHn9kSw (Mathematica)