简化maxima软件中的公式

时间:2014-04-18 15:35:12

标签: maxima

我正在使用maxima软件来帮助我简化公式。通常情况下,我可以轻松地管理subst,ratsubst,factor,ratsimp,......但是仍然有很少的公式我觉得很难简化我想要的方式。

  1. 假设a> b和c> d,我想以这样的方式简化以 - 符号开头的分数:

    -(a - b)/(d - c)    ->   ( a - b )/( c - d)
    

    但我不知道怎么做。似乎是最大值简化算法 将尝试以自己的方式对变量进行排序。

    我创建了自己的最大值函数,试图简化这些无用的减号。

    no_minus(fraction):=
      block([simp:true,
         numerat:expand(-ratnumer(fraction)),
         denominat:expand(-ratdenom(fraction))],
        block([simp:false],
          numerat/denominat));
    -a/(b-x);
    no_minus(-a/(b-x));
    no_minus(-a*b*c/(b-x*b*f-f));
    

    我预计no_minus(-a /(b-x))会返回一个/(x-b),但它没有。

  2. 我想介绍一个新的中缀运算符来表示两个表达式大致相等。例如,如果x是 大约等于y。我想注意一下

      

    x =~ y

         

    infix("=~").

  3. 如何配置简化器,以便在输入

      

    2*x+3 =~ u+v;
    (%-3)/2;

    输出

      

    x =~ (u+v-3)/2

1 个答案:

答案 0 :(得分:5)

嗯,您可以通过tellsimp(以及tellsimpafterdefruledefmatch)来定义简化规则。也许这足以开始。

(%i3) infix ("=~") $
(%i4) matchdeclare ([aa, bb, cc], all) $
(%i5) tellsimp ((aa =~ bb) * cc, (aa * cc) =~ (bb * cc)) $
tellsimp: warning: rule will treat '?mtimes' as noncommutative and nonassociative.
(%i6) tellsimp ((aa =~ bb) + cc, (aa + cc) =~ (bb + cc)) $
tellsimp: warning: rule will treat '?mplus' as noncommutative and nonassociative.
(%i7) (2*x + 3) =~ (u + v);
(%o7) (2*x+3) =~ (v+u)
(%i8) (% - 3)/2;
(%o8) x =~ ((v+u-3)/2)