python - 我有一个很长的表达式,我想简化它但假设一个方程成立
问题描述
在 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:不一致的假设
有人对此有任何想法吗?谢谢你。
解决方案
如果你想使用什么样的表达式和假设没有一定的范围,这可能是一个无法解决的问题,所以我会做一些假设。
如果您想简化基于其他多项式表达式为零的多项式表达式,那么您可以在 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
推荐阅读
- python - 使用 cx_Oracle 和 Python 3.7 对远程数据库进行长时间运行的 SQL 查询
- common-lisp - 应用从函数列表中选择的函数
- npm - 执行“npm start”命令时出错
- c - 为什么我在 C 中输出的字符串不正确?
- algorithm - 多个变量和函数的时间复杂度
- javascript - 异步操作如何运行?
- python - 如何将列表转换为字符串
- javascript - 尝试使用 nodemailer 在 nodejs 中设置密码恢复
- java - 如果硒中有可用的结果列表,如何检查屏幕是否需要向下滚动以查看搜索结果
- python - 如何比较两个数据框熊猫