Maxima: how to replace common subexpressions with symbols

前端 未结 2 1243
轻奢々
轻奢々 2021-01-01 00:56

Suppose I have an expression like (actually mine is much more complex, thousands of characters)

expr:a+b*c+b*c*d;

and I want to replace an

相关标签:
2条回答
  • 2021-01-01 01:24

    You can try optimize

    http://maxima.sourceforge.net/docs/manual/en/maxima_6.html#IDX219

    (%i14) example(optimize);
    
    (%i15) diff(exp(y+x^2)/(y+x),x,2)
                            2            2              2            2
                   2   y + x        y + x          y + x        y + x
                4 x  %e         2 %e         4 x %e         2 %e
    (%o15)      ------------- + ---------- - ------------ + ----------
                    y + x         y + x               2             3
                                               (y + x)       (y + x)
    (%i16) optimize(%)
                                                     2         y + %2       1
    (%o16) block([%1, %2, %3, %4], %1 : y + x, %2 : x , %3 : %e      , %4 : --, 
                                                                            %1
                                                                     4 x %3   2 %3
                                              4 %2 %4 %3 + 2 %4 %3 - ------ + ----)
                                                                        2       3
                                                                      %1      %1
    
    0 讨论(0)
  • 2021-01-01 01:32

    Take a look at let and letsimp. E.g.:

    (%i2) expr : a + b*c + b*c*d;
    (%o2) b*c*d+b*c+a
    (%i3) let (b*c, k);
    (%o3) b*c --> k
    (%i4) letsimp (expr);
    (%o4) d*k+k+a
    

    letsimp differs from subst and tellsimp or defrule in that those other functions make only formal substitutions, i.e., replacing subexpressions which are exactly the same as some pattern.

    0 讨论(0)
提交回复
热议问题