看板 Mathematica 關於我們 聯絡資訊
※ 引述《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
obelisk0114: 後來設定 MaxRecursion->20, AccuracyGoal->8 05/05 16:25
obelisk0114: PrecisionGoal->8, 沒有出現錯誤訊息 05/05 16:26