首页 > 解决方案 > 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))

标签: pythonnumpymatplotlib

解决方案


推荐阅读