簡體   English   中英

使用Lambda和sympify的Sympy錯誤:“ SympifyError:S”

[英]Sympy error using Lambda and sympify: “SympifyError: S”

我在同時使用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})

這是我遇到的錯誤,我無法解釋其含義:

 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

不幸的是,“ 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”,也可以使用之前定義的符號將其添加到locals用戶:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM