【问题标题】:sympy: Lambdify doesn't convert sqrt expressionsympy:Lambdify 不转换 sqrt 表达式
【发布时间】:2017-05-30 15:47:10
【问题描述】:

我尝试对一些计算出的特征值进行lambdify,但出现以下错误。

File "<string>", line 1, in <lambda>
AttributeError: 'Symbol' object has no attribute 'sqrt'

为了避免命名空间冲突(在这篇文章中解释 What causes this error (AttributeError: 'Mul' object has no attribute 'cos') in Python?)我使用了以下导入命令而不是 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 lambdify abs for use with NumPy),它们是否包含命令 lambdify(x, f(x), ["numpy", {'Abs': numpy.abs}]),但如您所见,它在我的代码中不起作用

我该如何解决我的问题?

【问题讨论】:

    标签: python numpy sympy


    【解决方案1】:

    问题不在于 sqrt。您的第二个特征值涉及 Rzy,您在对其进行羔羊化时未将其包含在变量中。修复它,它可以简单地与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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多