python - 1D Simpson 积分以创建衍射图案图
问题描述
我正在尝试使用辛普森积分制作衍射图,但这只是绘制一条直线。我知道它只是评估一个数字,但我希望它制作一个中间最强最大值的衍射图案。
import math
import cmath
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
from scipy.integrate import simps
from scipy import integrate
from math import sin, cos, pi
n = 100 #Number of areas to be calculated for integration approximation
λ = 1*10**-6 #Wavelength
z = 0.02 #Screen distance
k = (2*math.pi)/λ #wave number
j = complex(cmath.sqrt(-1))
n = 100
b = 2E-5
a = 0
def f(x):
return np.exp((1j*k)/(2*z)*(x)**2)
x = np.linspace(-0.005, 0.005, 100)
y = np.linspace(0, 0, 100, dtype= "complex")
def g(p, q):
h = (b - a) / n
k = 0
z = 0
for i in range(1, n // 2):
k += 2 * f(a + 2 * i * h)
for i in range(1, n // 2 + 1):
z += 4 * f(a + (2 * i - 1) * h)
return h * (z+k+f(a)+f(b)) / 3.0
for i in range(0,100,n):
if( x[i] == 0 ):
y[i] = 0
else:
q = np.linspace(0,x[i],100)
p = f(q)
y[i] = abs(np.conj(g(p, q))*(g(p, q)))*8.85E-12
plt.plot(x, np.imag(y))
解决方案
推荐阅读
- actions-on-google - 如何在帐户与 Action on Google 相关联时获取用户的 Google ID
- jquery - 如何使用 pixi.js 或 jquery ui 进行自由滚动?
- ios - 如何在 Swift 中为不同文件中的类定义函数?
- javascript - Thymeleaf 表单使用 ArrayList 对象提交
- excel - 将一个 listobject 表的一列中的唯一项复制到另一个 listobject 表中的列的最佳方法是什么?
- mysql - MySQL select distinct with group by 出乎意料地慢
- php - 重定向到登录的电子邮件验证链接
- wix - 使用 WIX 创建的 Windows 安装程序 msi 是否将原始 .msi 文件保存在某处?
- javascript - 数组不适用于 chart.js
- r - 按 R 中的多列分组