我有一个很长的表达式,我想简化它,但假设一个方程成立

2024-09-30 08:34:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

完全简化[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:不一致的假设

有人对此有什么想法吗?多谢各位


Tags: 函数文档https命令docs软件表达式事情
2条回答

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

如果要基于其他多项式表达式为零简化多项式表达式,则可以使用ratsimpmodprime在Symphy中执行此操作:

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

我尝试了两种方法来解决这个问题

  1. 假设x - y = 0。这是我唯一能找到的表达你想做的假设的方法。不幸的是,它似乎不够聪明,没有注意到这个假设允许它用x代替y

    print("refine:", sp.refine(x**2-y**2,Q.zero(x-y)))
    

    这只是返回原始表达式

  2. 请sympy替换该表达式。这并不是自动的——你要求它做替换,而不是给它做替换的选项,但它确实适用于这个玩具示例

    expr = (x**2-y**2)
    print("substitution:", expr.subs(x**2-y**2, 1))
    

    打印1

相关问题 更多 >

    热门问题