【问题标题】:Writing code to integrate 1D Fresnel Diffraction in Python编写代码以在 Python 中集成一维菲涅耳衍射
【发布时间】:2018-01-26 12:57:23
【问题描述】:

我的任务是整合下面的一维菲涅耳衍射方程,用红色表示:

关键是您正在将光圈转换为屏幕上的图案,但现在只专注于将水平条整合到 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))

【问题讨论】:

  • 顺便说一句,你不需要cmath.sqrt(-1)1j 工作正常。
  • 请将您的问题回滚到之前的状态。如果您认为您的问题不再属于该网站,则可以将其删除。但请不要编辑所有问题详细信息,因为它会使问题的所有答案无效。

标签: python math integration physics


【解决方案1】:

您在定义变量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 之外的所有其他内容提供了初始值。

【讨论】:

  • 但是我把xp=xp1,用户放入函数中
【解决方案2】:

当你定义 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)

【讨论】:

    【解决方案3】:

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

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

    此外,我在print(X(0,1,x,expfunc,10)) 中没有看到变量x 在任何地方定义。

    另外,第二段代码与第一段有很大不同。如果同样的问题适用,那么您应该完全删除第一个片段和/或重新表述您的问题,因为从我在第二个卡盘中看到的情况来看,您声称遇到的错误不应该被提出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多