【问题标题】:Use Lambdify for multiple symbolic variables对多个符号变量使用 Lambdify
【发布时间】:2017-10-25 17:36:54
【问题描述】:

下面的 python 脚本计算表达式中的第一项, 4.939e-3xAxB+8.7989(A,B) = (1.0,1.0)

 import sympy
 from sympy import *

 A = sympy.Symbol(A)
 B = sympy.Symbol(B)
 F = 4.939e-3*A*B+8.7989
 G = str(F).split("+")[0]
 H = lambdify([A,B], G, "numpy")
 print H(1,1)

输出为:0.004939

现在下面的代码旨在实现相同的目标:

A = sympy.Symbol(A)
B = sympy.Symbol(B)
F = 4.939e-3*A*B+8.7989
G = str(F).split("+")[0]
H = lambdify(A, G, "numpy")
I = lambdify(B, H(1), "numpy")
print I(1)

但这会返回错误: NameError: global name 'B' is not defined

有人可以解释一下吗?

【问题讨论】:

    标签: python sympy lambdify


    【解决方案1】:

    您在多个实例中将字符串和符号混为一谈。所有这些都起作用的唯一原因是 SymPy 将 sympify 应用于许多输入 (sympify("A")==Symbol("A")) 和 Python 的鸭子类型。具体来说,G 是一个字符串,当它应该是一个符号表达式时,传递给 lambdify 的所有第一个参数都是字符串或字符串列表,当它们应该是符号或其列表时。

    您的第一个代码的干净版本是:

    from sympy.abc import A,B
    import sympy
    
    G = 4.939e-3*A*B # now this is a symbolic expression, not a string
    H = lambdify( [A,B], G, "numpy" )
    print(H(1,1))
    

    第二个代码也是如此:

    from sympy.abc import A,B
    import sympy
    
    G = 4.939e-3*A*B # now this is a symbolic expression, not a string
    H = lambdify( A, G, "numpy" )
    I = lambdify( B, H(1), "numpy" )
    print(I(1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      相关资源
      最近更新 更多