如何解决Sympy可以通过收集多个术语来简化有理表达式吗?
给出一个有理表达式E
,例如下面的表达式,我希望使用Sympy将其简化为类似F
(在下面的第二段Python代码中定义):
import sympy as sp
a,b,c,d,n,t,A,B,C = sp.symbols('a,C',real = True)
E = n/(c-b) * ( B - (c-b)/(c-a)*A - (b-a)/(c-a)*B ) * (c-t)/(c-b) + n/(c-b) * ( (d-c)/(d-b)*B + (c-b)/(d-b)*C - B ) * (t-b)/(c-b)
print(sp.pretty( E ))
print(sp.pretty( E.simplify() ))
此打印
⎛ B⋅(-c + d) C⋅(-b + c)⎞ ⎛ A⋅(-b + c) B⋅(-a + b) ⎞
n⋅(-b + t)⋅⎜-B + ────────── + ──────────⎟ n⋅(c - t)⋅⎜- ────────── - ────────── + B⎟
⎝ -b + d -b + d ⎠ ⎝ -a + c -a + c ⎠
───────────────────────────────────────── + ─────────────────────────────────────────
2 2
(-b + c) (-b + c)
-n⋅((a - c)⋅(b - t)⋅(-B⋅(b - d) + B⋅(c - d) + C⋅(b - c)) + (b - d)⋅(c - t)⋅(A⋅(b - c) + B⋅(a - b) - B⋅(a - c)))
────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2
(a - c)⋅(b - c) ⋅(b - d)
但是,可以手动将表达式进一步简化,其结果标记为F
:
F = n/(c-a) * (B - A) * (c-t)/(c-b) + n/(d-b) * (C - B) * (t-b)/(c-b)
print(sp.pretty( F ))
print((F-E).simplify())
此输出
n⋅(-A + B)⋅(c - t) n⋅(-B + C)⋅(-b + t)
────────────────── + ───────────────────
(-a + c)⋅(-b + c) (-b + c)⋅(-b + d)
0
我研究了各种选项,包括factor()
,collect()
和apart()
,但是这些选项似乎都不产生与F
相同结构的表达式。有关如何进行操作的任何指示?
此外,我想知道是否可以通过某种方式调整Sympy的漂亮打印功能
- 保留分子和分母中变量的原始顺序(例如
B - A
而不是-A + B
)。目前,在大多数情况下,订单会被翻转,在前面带有减号的情况下看起来很难看。 - 将复合分数显示为简单分数的乘积(例如,
a/b c/d
而不是ac/bd
),尽管在某些情况下,在何处/如何“拆分”这种复合分数当然是模棱两可的。 li>
解决方法
这里的情况是您有两个词的Add
。可以使用factor
分别简化每个术语,但每个抵消的因素都不相同,因此,在整个factor
上调用Add
找不到可能的抵消。
考虑到这一点,我们需要谨慎地独立处理Add
的条款,这可以通过访问.args
来完成:
In [122]: E.func(*(factor(term) for term in E.args))
Out[122]:
n⋅(A - B)⋅(-c + t) n⋅(B - C)⋅(-b + t)
────────────────── - ──────────────────
(a - c)⋅(b - c) (b - c)⋅(b - d)
变量的顺序实际上是由打印机在显示表达式时确定的,不一定与args的内部顺序相同,也不一定与创建表达式时使用的顺序相同。调用signsimp
可以规范表达式中的减号
In [123]: signsimp(_)
Out[123]:
n⋅(A - B)⋅(c - t) n⋅(B - C)⋅(b - t)
- ───────────────── + ─────────────────
(a - c)⋅(b - c) (b - c)⋅(b - d)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。