亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python quad 集成似乎不準確

python quad 集成似乎不準確

qq_遁去的一_1 2021-05-30 03:32:56
我是python的新手,正在嘗試以數字方式集成函數。一切似乎都正常,但是我得到的結果與我在Mathematica中得到的結果(我知道是正確的)有很大不同。有人可以幫我弄清楚發生了什么嗎?這是代碼:def integrand(x, d, a, b, l, s, wavelength, y):    return b*(np.sinc((np.pi*a/(wavelength*s))*(y + s*b*x/l))**2)*np.cos((np.pi*d/(wavelength*s))*(y + s*b*x/l))**2def intensity(y):    result, error = si.quad(integrand, -1/2, 1/2, epsrel = 1e-16, epsabs = 1e-16,                            args=(0.0006, 0.000150, 0.000164, 0.8, 1.06, 0.0000006328, y))    return result例如,如果我計算強度(0),我會在 python 中得到 0.0001580120220796804,在 Mathematica 中得到 0.000158898。在 0.5% 以內,所以這看起來沒問題。但是如果我計算強度(0.001),我會在 python 中得到 1.8729902318383768e-05,在 Mathematica 中得到 0.00012034,它們相差近一個數量級。請注意,我已嘗試減少絕對誤差和相對誤差,但這沒有任何效果。任何幫助,將不勝感激。這是Mathematica代碼:NumInt[d_, a_, b_, l_, s_, lambda_, y_] := NIntegrate[b Sinc[(a Pi/(s lambda)) (y - (s*b*      x/l))]^2 Cos[(d Pi/(s lambda)) (y - (s*b*x/l))]^2, {x, -1/2,1/2}]然后NumInt[0.0006, 0.000150, 0.000164, 0.8, 1.06, 0.0000006328, 0.001]
查看完整描述

1 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

numpy.sinc定義為sin(pi*x)/(pi*x)。Mathematica的Sinc函數不包含的因數pi。要修復差異,請np.pi從sinc()Python 代碼中的參數中刪除。當我進行更改時,我得到的結果與 Mathematica 一致(我修改intensity()為還返回由 返回的錯誤quad):


In [12]: intensity(0)

Out[12]: (0.00015889773970382816, 1.764119291800849e-18)


In [13]: intensity(0.001)

Out[13]: (0.00012034021042092513, 1.3360447239754727e-18)


查看完整回答
反對 回復 2021-06-01
  • 1 回答
  • 0 關注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號