Re: [問題] 數值積分
: 我想求出最大值發生處以及其數值,然後用 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
05/05 16:25, 1F
→
05/05 16:26, , 2F
05/05 16:26, 2F
討論串 (同標題文章)
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章