Python 使用Lambda和sympify时出现Sympy错误:“0”;SympifyError:S";

Python 使用Lambda和sympify时出现Sympy错误:“0”;SympifyError:S";,python,sympy,symbolic-math,Python,Sympy,Symbolic Math,我无法同时使用sympify和Lambda。我想声明一个函数(func\u 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("(

我无法同时使用sympify和Lambda。我想声明一个函数(
func\u 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})
这就是我遇到的错误,我很难理解它的意思:

 File "utils.py", line 87, in <module>
    X = sp.sympify("(func_mux(S) - D) * X", locals={"func_mux": func_mux})
  File "/usr/local/lib/python2.7/site-packages/sympy/core/sympify.py", line 354, in sympify
    expr = parse_expr(a, local_dict=locals, transformations=transformations, evaluate=evaluate)
  File "/usr/local/lib/python2.7/site-packages/sympy/parsing/sympy_parser.py", line 894, in parse_expr
    return eval_expr(code, local_dict, global_dict)
  File "/usr/local/lib/python2.7/site-packages/sympy/parsing/sympy_parser.py", line 807, in eval_expr
    code, global_dict, local_dict)  # take local objects in preference
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/sympy/core/function.py", line 1553, in __call__
    return self.expr.xreplace(dict(list(zip(self.variables, args))))
  File "/usr/local/lib/python2.7/site-packages/sympy/core/basic.py", line 1101, in xreplace
    value, _ = self._xreplace(rule)
  File "/usr/local/lib/python2.7/site-packages/sympy/core/basic.py", line 1115, in _xreplace
    a_xr = a._xreplace(rule)
  File "/usr/local/lib/python2.7/site-packages/sympy/core/basic.py", line 1115, in _xreplace
    a_xr = a._xreplace(rule)
  File "/usr/local/lib/python2.7/site-packages/sympy/core/basic.py", line 1122, in _xreplace
    return self.func(*args), True
  File "/usr/local/lib/python2.7/site-packages/sympy/core/cache.py", line 93, in wrapper
    retval = cfunc(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/sympy/core/compatibility.py", line 809, in wrapper
    result = user_function(*args, **kwds)
  File "/usr/local/lib/python2.7/site-packages/sympy/core/operations.py", line 30, in __new__
    args = list(map(_sympify, args))
  File "/usr/local/lib/python2.7/site-packages/sympy/core/sympify.py", line 387, in _sympify
    return sympify(a, strict=True)
  File "/usr/local/lib/python2.7/site-packages/sympy/core/sympify.py", line 303, in sympify
    raise SympifyError(a)
sympy.core.sympify.SympifyError: SympifyError: S
文件“utils.py”,第87行,在
X=sp.sympify(((func_mux(S)-D)*X),局部变量={“func_mux”:func_mux})
sympify中的文件“/usr/local/lib/python2.7/site packages/sympy/core/sympify.py”,第354行
expr=parse\u expr(a,local\u dict=locals,transformations=transformations,evaluate=evaluate)
文件“/usr/local/lib/python2.7/site packages/sympy/parsing/sympy\u parser.py”,第894行,在parse\u expr中
返回评估表达式(代码、本地命令、全局命令)
文件“/usr/local/lib/python2.7/site packages/sympy/parsing/sympy_parser.py”,第807行,eval_expr中
代码,全局(全局,局部(局部)#优先选择局部对象
文件“”,第1行,在
文件“/usr/local/lib/python2.7/site packages/sympy/core/function.py”,第1553行,在调用中__
返回self.expr.xreplace(dict(list(zip(self.variables,args)))
文件“/usr/local/lib/python2.7/site packages/sympy/core/basic.py”,第1101行,在xreplace中
值,u=self.xreplace(规则)
文件“/usr/local/lib/python2.7/site packages/sympy/core/basic.py”,第1115行,替换为
a_xr=a._xreplace(规则)
文件“/usr/local/lib/python2.7/site packages/sympy/core/basic.py”,第1115行,替换为
a_xr=a._xreplace(规则)
文件“/usr/local/lib/python2.7/site packages/sympy/core/basic.py”,第1122行,替换为
返回self.func(*args),True
文件“/usr/local/lib/python2.7/site packages/symphy/core/cache.py”,第93行,在包装器中
retval=cfunc(*args,**kwargs)
文件“/usr/local/lib/python2.7/site packages/symphy/core/compatibility.py”,第809行,在包装器中
结果=用户函数(*args,**kwds)
文件“/usr/local/lib/python2.7/site packages/sympy/core/operations.py”,第30行,新__
args=列表(映射(_sympify,args))
文件“/usr/local/lib/python2.7/site packages/sympy/core/sympify.py”,第387行,在sympify中
返回sympify(a,strict=True)
sympify中的文件“/usr/local/lib/python2.7/site packages/sympy/core/sympify.py”,第303行
引发错误(a)
sympy.core.sympify.SympifyError:SympifyError:S
不幸的是,“S”是在sympy中预定义的,因此被
sympify
解释为
sympy.core.singleton.SingletonRegistry
,请参阅:

单例类的注册表(可通过
S
访问)

当您尝试对一个简单表达式进行
sympify
,例如

>> sp.sympify('S + A')
TypeError: unsupported operand type(s) for +: 'SingletonRegistry' and 'Symbol'
您可以通过将“S”替换为任何其他字母(例如小写的“S”)来避免此问题。 如果要保留字母“S”,还可以使用前面定义的符号将其添加到您的
局部变量中:

X=sp.sympify(((funcmux(S)-D)*X),局部变量={funcmux:funcmux,S:S})