python – 使用字符串subs(‘x’,’w’)代替符号subs(x,w)的Sympy替换

我正在研究一个带有电路模拟器ahkab的应用程序,长话短说我需要用1j * w代替一些方程中的laplace变量s.对我来说,使用符号名称而不是符号本身来执行此替换和其他替换更方便.我遇到了一些奇怪的行为.

如果你这样做

    >>> x = Symbol('x')
    >>> y = Symbol('y')
    >>> expr = x + y
    x + y
    >>> expr.subs('x', 'w')
    w + y

这似乎像我期望的那样有效.问题来自于此处使用complex = True声明符号

    >>> s = Symbol('s', complex = True)
    >>> y = Symbol('y')
    >>> expr = s + y
    s + y
    >>> expr.subs(s, 'w') #Works as expected
    w + y
    >>> expr.subs('s', 'w') #Has no effect, this is my problem.
    s + y

我无法在文档中以这种方式找到有关替换的信息.对我来说,这似乎是一个错误,但我不知道应该是什么行为.

解决方法:

subs调用同意它的论点.例如,请参见https://github.com/sympy/sympy/blob/master/sympy/core/basic.py#L845.这意味着字符串将转换为符号,但是sympify无法知道您希望将字符串转换为具有非默认假设的符号.唯一的方法是实际传入符号.请注意,具有不同假设的符号不被视为相等.

In [1]: from sympy import Symbol

In [2]: x = Symbol('s')

In [3]: y = Symbol('s')

In [4]: x == y
Out[4]: True

In [5]: y = Symbol('s', complex=True)

In [6]: x == y
Out[6]: False
上一篇:python – 使用Sympy和Pypy


下一篇:运用模型绑定和web窗体显示和检索数据(Retrieving and displaying data with model binding and web forms)