微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在 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:不一致的假设

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

解决方法

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

如果您想基于其他多项式表达式为零来简化多项式表达式,那么您可以使用 ratsimpmodprime 在 sympy 中执行此操作:

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. 假设 Payee。这是我能找到的表达您想要做出的假设的唯一方法。不幸的是,它似乎不够聪明,没有注意到这个假设允许它用 x 代替 y。

     @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
    
        final Transaction transaction = tTransactions.get(holder.getAdapterPosition());
    
    
       holder.payee.setText( ????????? ) ;        
       holder.date.setText(date);
       holder.transAmount.setText(amount);
    

    这只是返回原始表达式。

  2. 请 sympy 替换表达式。这不是自动的 - 您要求它进行替换而不是给它进行替换的选项,但它确实适用于这个玩具示例。

    x - y = 0

    打印 1。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。