python - Sympy 替换使用字符串 subs ('x' , 'w' ) 而不是符号 subs(x, w)

标签 python scipy sympy symbolic-math

我正在使用电路模拟器开发应用程序 ahkab ,长话短说,我需要用 1j*w 替换某些方程中的拉普拉斯变量 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 对其参数调用 sympify。参见 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 替换使用字符串 subs ('x' , 'w' ) 而不是符号 subs(x, w),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30989307/

相关文章:

Python sympy 符号

python - Sympy - limit() 错误 : Result depends on the sign

python - 如果用户输入无效答案如何重做输入

python - 使用索引列表有效地填充 NumPy 数组

python - 将元素设置为零的有效方法,其中掩码在 scipy 稀疏矩阵上为 True

Python 停止在 loadmat 上工作

python - 在 Sage Python 和矩阵求逆中使用外部库

python - python-mode、ipython、(ipython.el) 版本/发行版和 init.el/.emacs.d 代码的组合如何工作?

Python-从字典列表创建动态嵌套字典

python - 使用 scipy 最大化目标(通过 kelly criterium)