【问题标题】:simplifying formulas in maxima在极大值中简化公式
【发布时间】:2014-04-18 15:35:12
【问题描述】:

我正在使用 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)) 会返回 a/(x-b) 但它没有。

  1. 我想引入一个新的中缀运算符来表示两个表达式大致相等。例如,如果 x 是 约等于 y。我要注意它

    x =~ y
    
    infix("=~").
    

如何配置简化器,以便输入时为

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

输出是

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

【问题讨论】:

    标签: maxima


    【解决方案1】:

    嗯,您可以通过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)
    

    【讨论】:

    • 谢谢,这真是一个好的开始。我只是添加了 rbp=80 和 lbp=80 来去掉括号。这就是我需要解决我的中缀“近似”运算符的问题。中缀(“=〜”); matchdeclare([aa,bb,cc],all);告诉imp((aa =~ bb)*cc,(aa * cc) =~ (bb * cc));告诉imp((aa =~ bb)+cc,(aa + cc) =~ (bb + cc)); (2*x+3) =~ (5*y^2+6); (%-3)/2; 2*x+3 =~ 5*y^2+6; (%-3)/2;中缀("=~",80,80); 2*x+3 =~ 5*y^2+6; (%-3)/2; "=~"(2*x,3*y+4); %-4;
    猜你喜欢
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2016-06-09
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多