使用Lambda和sympify的Sympy错误:“SympifyError:S”

2024-04-28 22:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法同时使用sympify和Lambda。我想声明一个函数(func_mx),它接受参数S。在

然后我想在一个符号表达式X中包含它

下面是我要执行的代码:

import sympy as sp

S = sp.Symbol('S')
A = sp.Symbol('A')
mux_m = sp.Symbol('mux_m')
KX = sp.Symbol('KX')

func_mux = sp.Lambda(S, (mux_m * S) / (KX + S))
X = sp.sympify("(func_mux(S) - D) * X", locals={"func_mux": func_mux})

这是我得到的错误,我很难解释它的意思:

^{pr2}$

Tags: lambda函数代码import声明参数表达式符号
1条回答
网友
1楼 · 发布于 2024-04-28 22:17:18

不幸的是,“S”是在sympy中预定义的,因此被sympify解释为sympy.core.singleton.SingletonRegistry,请参见{a1}:

The registry for the singleton classes (accessible as S).

当您在一个简单的表达式上尝试sympify时,这一点更加明显,例如

>> sp.sympify('S + A')
TypeError: unsupported operand type(s) for +: 'SingletonRegistry' and 'Symbol'

您可以通过将“S”替换为任何其他字母(例如小写字母“S”)来避免此问题。 如果要保留字母“S”,也可以使用前面定义的符号将其添加到locals中:

X = sp.sympify("(funcmux(S) - D) * X", locals={"funcmux": funcmux, "S": S})

相关问题 更多 >