我尝试对一些计算出的特征值进行参数化,但出现以下错误。
File "<string>", line 1, in <lambda>
AttributeError: 'Symbol' object has no attribute 'sqrt'
为了避免命名空间冲突(在这篇文章中解释了Python 中出现此错误的原因(AttributeError: 'Mul' object has no attribute 'cos')?)我使用了以下导入命令而不是from sympy import *
import sympy as sp
import numpy as np
def calculate_general_eigenvalues():
Y, Z = sp.symbols("Y,Z")
Rzy = sp.symbols("Rzy", positive=True)
eigenvalues = [Y + Z,Rzy*Y + sp.sqrt(Rzy*Z)]
print("eigenvalues of the system ")
print(eigenvalues[0])
print(eigenvalues[1])
lam1 = sp.lambdify((Y,Z), eigenvalues[0] ,modules=['numpy'])
lam2 = sp.lambdify((Y,Z), eigenvalues[1] ,modules=["numpy", {'sqrt': np.sqrt}])
print(lam1(1,1))
print(lam2(1,1))
return (lam1,lam2)
l1,l2 = calculate_general_eigenvalues()
我还在这里找到了第二个提示(Python: SymPy lamdify abs for use with NumPy)是否包含该命令,lambdify(x, f(x), ["numpy", {'Abs': numpy.abs}])
但如您所见,它在我的代码中不起作用
我该如何解决我的问题?
问题不在于 sqrt。您的第二个特征值涉及 Rzy,您在对其进行lambdify 时未将其包含在变量中。解决这个问题,它可以简单地与modules="numpy"
. 无需重新映射 sqrt:NumPy 知道 sqrt,只是不知道如何将其应用于 Rzy 等符号。
lam1 = sp.lambdify((Y,Z), eigenvalues[0], modules='numpy')
lam2 = sp.lambdify((Y,Z,Rzy), eigenvalues[1], modules='numpy')
print(lam1(1,1))
print(lam2(1,1,1))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句