尝试将表达式与 lambda 集成时出现问题
我正在尝试集成一个具有实数和复数值的表达式,将其定义为 lambda 表达式。积分变量是 kx,积分的结果解将在 x 和 y 维度上求值,但是在我积分并尝试求积分后,我得到以下错误:
File "/opt/tools/anaconda/2020.11/lib/python3.8/site-packages/scipy/integrate/quadpack.py", line 351, in quad
retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit,
File "/opt/tools/anaconda/2020.11/lib/python3.8/site-packages/scipy/integrate/quadpack.py", line 463, in _quad
return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
TypeError: <lambda>() missing 2 required positional arguments: 'x' and 'y'
这是我正在使用的代码:
import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt
"Constants and parameters"
f = 8500 # Source frequency [Hz]
rho = 1.225 # Density of air [kg/m^3]
c0 = 343 # Speed of sound [m/s]
omega = 2*np.pi*f # Angular velocity [rad/s]
k = omega/c0 # Wave number [rad/m]
Z = -426 # Impedance
"Domain parameters"
Lx = 0.1 # Total x-dimension [m]
Ly = 0.1 # Total y-dimension [m]
nx = 50 # Number of points to discretize the domain in x
ny = int(nx/2) # Number of points to discretize the domain in y
integrandReal = lambda kx, x, y: np.real(((2*np.sqrt(k**2 - kx**2)*Z)/(np.sqrt(k**2 - kx**2)*Z + omega*rho))*((np.exp(1j*(kx*x + np.sqrt(k**2 - kx**2)*y)))/(np.sqrt(k^2 - kx^2))))
integrandImag = lambda kx, x, y: np.imag(((2*np.sqrt(k**2 - kx**2)*Z)/(np.sqrt(k**2 - kx**2)*Z + omega*rho))*((np.exp(1j*(kx*x + np.sqrt(k**2 - kx**2)*y)))/(np.sqrt(k**2 - kx**2))))
integral = lambda x, y: integrate.quad(integrandReal, -100*k, 100*k) + 1j*integrate.quad(integrandImag-100*k, 100*k)
G = integral(1,1)
如果有人可以帮助我。
I am trying to integrate an expression that has real and complex values defining it as a lambda expression. The integration variable is kx and the resulting solution of the integral will be evaluated in x and y dimensions, but after I integrate and try to evaluate the integral I get the following error:
File "/opt/tools/anaconda/2020.11/lib/python3.8/site-packages/scipy/integrate/quadpack.py", line 351, in quad
retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit,
File "/opt/tools/anaconda/2020.11/lib/python3.8/site-packages/scipy/integrate/quadpack.py", line 463, in _quad
return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
TypeError: <lambda>() missing 2 required positional arguments: 'x' and 'y'
This is the code I am using:
import numpy as np
from scipy import integrate
import matplotlib.pyplot as plt
"Constants and parameters"
f = 8500 # Source frequency [Hz]
rho = 1.225 # Density of air [kg/m^3]
c0 = 343 # Speed of sound [m/s]
omega = 2*np.pi*f # Angular velocity [rad/s]
k = omega/c0 # Wave number [rad/m]
Z = -426 # Impedance
"Domain parameters"
Lx = 0.1 # Total x-dimension [m]
Ly = 0.1 # Total y-dimension [m]
nx = 50 # Number of points to discretize the domain in x
ny = int(nx/2) # Number of points to discretize the domain in y
integrandReal = lambda kx, x, y: np.real(((2*np.sqrt(k**2 - kx**2)*Z)/(np.sqrt(k**2 - kx**2)*Z + omega*rho))*((np.exp(1j*(kx*x + np.sqrt(k**2 - kx**2)*y)))/(np.sqrt(k^2 - kx^2))))
integrandImag = lambda kx, x, y: np.imag(((2*np.sqrt(k**2 - kx**2)*Z)/(np.sqrt(k**2 - kx**2)*Z + omega*rho))*((np.exp(1j*(kx*x + np.sqrt(k**2 - kx**2)*y)))/(np.sqrt(k**2 - kx**2))))
integral = lambda x, y: integrate.quad(integrandReal, -100*k, 100*k) + 1j*integrate.quad(integrandImag-100*k, 100*k)
G = integral(1,1)
I will be grateful if someone can help me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一些事情
-100*k
到+100*k
。^
是预期的**
。[0]
获取它A few things
args=(x,y)
. The limits of integration in your example are-100*k
to+100*k
.^
where**
was expected.[0]