我的任务是整合下面的1d菲涅耳衍射方程式,红色为:
关键是你将光圈转换为屏幕上的图案,但现在只关注在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))
答案 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
定义在哪里。
此外,代码的第二部分与第一部分有很大不同。如果同样的问题适用,那么你应该完全删除第一个片段和/或重新解释你的问题,因为从我在第二个浏览器中看到的,你声称要获得的错误不应该被提出。