Как я могу определить символическую функцию в Python? - PullRequest
0 голосов
/ 15 октября 2019

Я пишу очень простой макрос для своей диссертации.

Я хочу определить символическую функцию с 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'

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Я думаю, вы смешиваете здесь символические и явные функции. Вы можете решить это, не импортируя ничего из математики. Вот почему обычно не рекомендуется делать 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)
0 голосов
/ 15 октября 2019

функция exp находится в пакете math. Импортируйте его перед использованием:

from math import exp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...