我正在为我的论文写一个非常简单的宏。
我想用4个输入参数定义一个符号函数:其中两个对应于数值,而另两个是将用于集成函数的符号变量。
以下是该函数的代码:
def VelocityDistribution_notNorm(v_DM,costheta,v_0,v_e):
return exp(-(v_DM**2 + v_e**2 + 2*v_DM*v_e*costheta)/(v_0**2));
v_0和v_e对应于数值,而V_DM和costheta是两个符号变量。 在另一个函数中,我通过以下方式调用了先前的函数:
v_0 = 220 #km/s
v_e = 232 #km/s
v_DM = Symbol("v_DM")
cosTheta = Symbol("cosTheta")
integrand_0 = v_DM * VelocityDistribution_notNorm(v_DM,v_e,v_0,cosTheta)
我还导入了以下模块:
from math import *
from sympy import *
from sympy.functions.elementary.exponential import *
from scipy import *
from scipy.constants import *
但是尝试运行宏时出现此错误:
File "prova.py", line 38, in VelocityDistribution_notNorm
return exp(-(v_DM**2 + v_e**2 + 2*v_DM*v_e*costheta)/(v_0**2));
AttributeError: 'Add' object has no attribute 'exp'
我做错了什么?
答案 0 :(得分:0)
函数exp
在math
包中。使用前将其导入:
from math import exp
答案 1 :(得分:0)
我认为您在这里混合使用符号函数和显式函数。您可以通过不从数学中导入任何内容来解决此问题。这就是为什么通常建议不要进行from xyz import *
from sympy import *
import scipy
def VelocityDistribution_notNorm(v_DM,costheta,v_0,v_e):
return exp(-(v_DM**2 + v_e**2 + 2*v_DM*v_e*costheta)/(v_0**2));
v_0 = 220 #km/s
v_e = 232 #km/s
v_DM = Symbol("v_DM")
cosTheta = Symbol("cosTheta")
integrand_0 = VelocityDistribution_notNorm(v_DM,v_e,v_0,cosTheta)