编写代码以在Python中集成1D菲涅耳衍射

时间:2018-01-26 12:57:23

标签: python math integration physics

我的任务是整合下面的1d菲涅耳衍射方程式,红色为:

formula

关键是你将光圈转换为屏幕上的图案,但现在只关注在1d中整合水平条带(暂时忽略高度)。因此忽略了yprime。你也有固定的z和k,j是一个虚数。我为它编写了以下代码:

import math 
import numpy as np
import cmath 

k=5
z=5
x=0
j=cmath.sqrt(-1)
func=math.exp((j*k/2*z)(x-xp)*(x-xp))
def X(xp1,xp2,function,N):

    h=(xp2-xp1)/N
    y=0.0
    xp=xp1

    for x in np.arange(1, N/2 +1): #summing odd order y terms

        y+=4*f(xp)
        xp+=2*h

    xp=xp1+2*h
    for x in np.arange(0, N/2): #summing even order y terms

        y+=2*f(x)
        xp+=2*h

    integral= (h/3)*(y+f(xp1)+f(xp2))    

    return integral

print(simpson(0,5,func,10))

然而,它是说没有定义xp。但我明确地在函数中定义了xp。

有没有人知道可能出现什么问题?

由于

编辑:这是我的代码的更简洁的版本。但它仍然要求我定义xp ..

import math
import cmath

lamda=0.2
k=(2*math.pi)/lamda
z=0.1

def expfunc(x, xp):

    func = math.exp(((1j)*k/2*z)(x-(xp))*(x-(xp)))

    return(func)


def X(xp1,xp2,x,f,N):

    h=(xp2-xp1)/N
    y=0.0
    xp=xp1

    for i in np.arange(1, N/2 +1): #summing odd order y terms

        y+=4*f(xp)
        xp+=2*h

    xp=xp1+2*h
    for i in np.arange(0, N/2): #summing even order y terms

        y+=2*f(xp)
        xp+=2*h

    integral= (h/3)*(y+f(xp1)+f(xp2))    

    return integral

print(X(0,1,x,expfunc,10))

3 个答案:

答案 0 :(得分:0)

在定义变量之前,您尝试使用变量xp

import math 
import numpy as np
import cmath 

k=5
z=5
x=0
j=cmath.sqrt(-1)
func=math.exp((j*k/2*z)(x-xp)*(x-xp)) #xp is not defined yet

您为xp以外的所有其他内容提供了初始值。

答案 1 :(得分:0)

当您定义func

func=math.exp((j*k/2*z)(x-xp)*(x-xp))

您定义了一个名为func的值。你可能想要的是这样的:

func = lambda x,xp : math.exp((j*k/2*z)(x-xp)*(x-xp))

然后将func的来电更改为

   y+=4*f(x, xp)

    y+=2*f(x, xp)

答案 2 :(得分:0)

我认为问题是y+=4*f(xp)在函数X的第一个for循环中。

最后,您print(X(0,1,x,expfunc,10)) expfunc代码f中的y+=4*f(xp)充当expfunc。函数xp有两个参数,其中一个定义为f。虽然您在xp中传递的变量是使用名称x定义的,但该函数只能看到您传入了第一个参数xp而不是参数x

此外,我没有看到print(X(0,1,x,expfunc,10))中的变量root@ubuntu:/# python multiUser.py user_password.txt 定义在哪里。

此外,代码的第二部分与第一部分有很大不同。如果同样的问题适用,那么你应该完全删除第一个片段和/或重新解释你的问题,因为从我在第二个浏览器中看到的,你声称要获得的错误不应该被提出。