我正在尝试执行以下积分
使用 Gauss-Hermite,使用Simpson 1/3 规则,但没有成功。我找不到我的错误,但输出应该如图 2 所示。这是我的代码(抱歉我的格式错误,这是我第一次在这里上传)。
应假定为 1。
import numpy as np
import matplotlib.pyplot as plt
import scipy.special as ss
def rt(d, r, theta ,sig):
return r*(d-r*np.cos(theta))*np.exp(-r**2/(2*sig**2))/(d**2+r**2-2*d*r*np.cos(theta))
def intheta1(d, r, b, sig, N):
h = b/N
I = rt(d,r,0,sig) + rt(d,r,b,sig)
for i in range(1, N, 2):
I += 4*rt(d, r, i*h, sig)
for j in range(2, N, 2):
I += 2*rt(d, r, j*h, sig)
return I*h/3
def intr1(d, b, sig, N, M):
x, w = ss.roots_hermitenorm(N)
s = 0
for k in range(N):
s += intheta1(d, x[k], b, sig, M)*w[k]
return s/2
ps = np.linspace(0, 5, 1000)
qs = intr1(xs, 2*np.pi, 1, 1000, 90)
plt.plot(ps, qs)

