分数中的 Sympy 替代品无法按预期工作

问题描述 投票:0回答:2

Simply 未检测带有 subs 的基本替换。

我有以下分数:

d₂⋅n₁⋅n₂
──────── + m₂⋅n₁ + mm₂⋅n₂
   nc
─────────────────────────
            nc

写为

cm2 = (d2*n1*n2/nc + m2*n1 + mm2*n2)/nc

现在我想替换n1/nc = np1和n2/nc = np2。所以我写了:

cm2.subs({n1/nc : symbols("np1"), n2/nc: symbols("np2")})

结果是:

d₂⋅np1⋅n₂ + m₂⋅n₁ + mm₂⋅n₂
──────────────────────────
            nc

相反,我希望 sympy 能够找出其他替换和输出:

d2⋅np1⋅np2 + m2⋅np1 + mm2⋅np2

我在这里缺少什么?

python-3.x sympy
2个回答
2
投票

subs
大部分是字面意思,因此在第一次替换后,说
n1/nc->n1p
,然后
n2/nc
不再出现,因此无法替换。但没有必要重新排列表达式以使其达到替换所需的形式,您可以使用
solve
为您解决所有问题:

>>> eqs
(Eq(cm2, (d2*n1*n2/nc + m2*n1 + mm2*n2)/nc), Eq(n1/nc, np1), Eq(n2/nc, np2))
>>> solve(eqs,cm2,n1,n2, dict=True)
[{cm2: d2*np1*np2 + m2*np1 + mm2*np2, n1: nc*np1, n2: nc*np2}]

这里还描述了一个未实现的功能,它也许提供了一种更直观的方法。


1
投票
Sympy 的

subs

 在将一个表达式转换为另一个表达式时可能会遇到问题,特别是如果它们没有按字面意思出现在源表达式中。它也可能非常含糊。

当目标是所有

n1

n2
cm2
 消失时,替换可以用不同的方式编写:

from sympy import symbols d2, n1, n2, nc, m2, mm2, n = symbols("d2 n1 n2 nc m2 mm2 n") np1, np2 = symbols("np1 np2") cm2 = (d2 * n1 * n2 / nc + m2 * n1 + mm2 * n2) / nc cm2.subs({n1: np1 * nc, n2: np2 * nc}).simplify()
结果:

d2*np1*np2 + m2*np1 + mm2*np2


    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.