Python 导数及其符号表达式的转换
我需要得到一个导数,以便在以后的数值计算中使用。我的代码根本不起作用。我尝试使用lambdify,但错误是“无法将符号转换为int”。我读了其他类似问题的答案,但仍然不起作用Python 导数及其符号表达式的转换,python,numpy,sympy,Python,Numpy,Sympy,我需要得到一个导数,以便在以后的数值计算中使用。我的代码根本不起作用。我尝试使用lambdify,但错误是“无法将符号转换为int”。我读了其他类似问题的答案,但仍然不起作用 import numpy as np from scipy.integrate import odeint from scipy.integrate import quad from scipy.integrate import solve_bvp as bvp import matplotlib.pyplot as pl
import numpy as np
from scipy.integrate import odeint
from scipy.integrate import quad
from scipy.integrate import solve_bvp as bvp
import matplotlib.pyplot as plt
from scipy.special import genlaguerre as L
from scipy.special import gamma as G
from math import factorial
from math import sqrt
import sympy as sym
from sympy.utilities.lambdify import lambdify
mp = 938.2720813
mn = 939.5654133
mu = (mn + mp)/4
hbar = 197.3270533
h2m = hbar**2/(2*mu)
V0 = 20
Rv = 1.5
Q0 = 1.5
Rq = 4.5
EIm = 0.3
ERe = 1
V = lambda r : -V0*np.exp(-r/Rv)
Q = lambda r : -Q0*np.exp(-r/Rq)
chi = lambda r, l : sqrt(factorial(l)*beta**3/(G(3 + l))) * r * L(l,2)(beta * r) * np.exp(- beta * r / 2)
r, l, beta = sym.symbols('r, l, beta')
def chifD(r, l, beta):
return sqrt(factorial(l)*beta**3/(G(3 + l))) * r * L(l,2)(beta * r) * np.exp(- beta * r / 2)
def chiD(r, l, beta):
return sym.diff(chifD(r ,l, beta), r)
print(chiD(r, l, beta))
chiLambdified = lambdify(((r,l, beta),),chiD(r,l, beta),"numpy")
print(chiD(1, 1, 1))
我很确定你在混合模块,你不应该。我一直在修改你的气功能,直到我得到了一些有效的东西。除了删除所有的
math
和scipy
函数外,没有其他函数返回的不是TypeError
#与sympy sqrt一起使用。
chi=λr,l:sym.sqrt(l*r)
印刷品(chi(r,l))
#不适用于数学或numpy sqrt。
chi=lambda r,l:math.sqrt(l*r)
印刷品(chi(r,l))
如果要使用函数,必须使用Symphy附带的函数,使用基本运算符定义自己的函数(以便接受Symphy对象),或者找到更简单的方法来定义操作:sqrt()可以简单地用**(1/2)代替
也许你应该寻找一种方法,让sympy接受来自其他模块的函数,因为自己编写scipy的所有特殊函数看起来会很痛苦。我很确定你混合了不应该混合的模块。我一直在修改你的气功能,直到我得到了一些有效的东西。除了删除所有的
math
和scipy
函数外,没有其他函数返回的不是TypeError
#与sympy sqrt一起使用。
chi=λr,l:sym.sqrt(l*r)
印刷品(chi(r,l))
#不适用于数学或numpy sqrt。
chi=lambda r,l:math.sqrt(l*r)
印刷品(chi(r,l))
如果要使用函数,必须使用Symphy附带的函数,使用基本运算符定义自己的函数(以便接受Symphy对象),或者找到更简单的方法来定义操作:sqrt()可以简单地用**(1/2)代替
也许您应该寻找一种方法,让sympy接受来自其他模块的函数,因为自己编写scipy的所有特殊函数看起来会很痛苦。似乎scipy、numpy和math函数都是不接受符号表达式的专用数值函数,这就是为什么Symphy有自己的一组等价函数。他们的定义中可能有这样一行:
f input!=浮动或输入!=int;raise TYPE ERROR
谢谢,至少现在我知道问题出在哪里了。但我确实需要找到一种方法来使用scipy中的特殊函数。似乎阶乘和伽马都有辛函数,但即使是那些函数也不能处理符号表达式。真的有必要象征性地处理一切吗?因为我认为sympy没有符号处理函数是有原因的。是的,我已经找到了gamma和阶乘,修正了它并得到了新的错误。“无法确定关系的真值”我不确定是否有必要使用符号计算,我只是认为这必须是最简单的方法,因为通常以符号方式获得此函数的导数不是问题。似乎scipy,numpy和math函数都是专门的数值函数,不接受符号表达式,这就是为什么sympy有自己的一组等价函数。他们的定义中可能有这样一行:f input!=浮动或输入!=int;raise TYPE ERROR
谢谢,至少现在我知道问题出在哪里了。但我确实需要找到一种方法来使用scipy中的特殊函数。似乎阶乘和伽马都有辛函数,但即使是那些函数也不能处理符号表达式。真的有必要象征性地处理一切吗?因为我认为sympy没有符号处理函数是有原因的。是的,我已经找到了gamma和阶乘,修正了它并得到了新的错误。“无法确定关系的真值”我不确定是否有必要使用符号计算,我只是认为这必须是最简单的方法,因为通常以符号方式获得此函数的导数不是问题。