首页 > 解决方案 > 我有一个很长的表达式,我想简化它但假设一个方程成立

问题描述

在 Mathematica 中,您可以使用函数 FullSimplify[expression,assumptions] 来简化使用假设的表达式. 例如,如果我这样做:

完全简化[x^2-y^2,x^2-y^2==1],

那么结果将为 1,因为这是与我为软件提供的功能等效的最简单表达式。

现在我需要对 Python 做同样的事情,但我不知道该怎么做。我在此页面上看到了有关命令 sympy.refine 的文档:

https://docs.sympy.org/latest/modules/assumptions/refine.html

但是,我无法将等式用作假设。用 Q 函数来假设这样的事情似乎是不可能的。

我试图做这样的事情:

import sympy as sp
x,y=sp.symbols('x y')
sp.refine(x**2-y**2,x==y)

但是,这给了我以下错误:ValueError:不一致的假设

有人对此有任何想法吗?谢谢你。

标签: pythonwolfram-mathematicasympysimplify

解决方案


如果你想使用什么样的表达式和假设没有一定的范围,这可能是一个无法解决的问题,所以我会做一些假设。

如果您想简化基于其他多项式表达式为零的多项式表达式,那么您可以在 sympy 中使用ratsimpmodprime

In [1]: x, y = symbols('x, y')

In [2]: assumptions = [x**2 + y**2 - 1]

In [3]: expression = x**2 + y**2

In [4]: ratsimpmodprime(expression, assumptions)
Out[4]: 1

https://docs.sympy.org/latest/modules/simplify/simplify.html#ratsimpmodprime


推荐阅读