我正在使用maxima软件来帮助我简化公式.通常情况下,我可以轻松地管理subst,ratsubst,factor,ratsimp,......但是仍然有很少的公式我觉得难以简化我想要的方式.
假设a> b和c> d,我想用这样的方式简化以#开头的分数:
-(a - b)/(d - c) -> ( a - b )/( c - d)
Run Code Online (Sandbox Code Playgroud)
但我不知道怎么做.似乎maxima简化算法将尝试以自己的方式对变量进行排序.
我创建了自己的最大值函数来尝试简化这些无用的减号.
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));
Run Code Online (Sandbox Code Playgroud)
我原以为no_minus(-a /(bx))会返回/(xb),但事实并非如此.
我想介绍一个新的中缀运算符来表示两个表达式大致相等.例如,如果x大约等于y.我想注意一下
x =~ y
infix("=~").
如何配置简化器以便在输入时
2*x+3 =~ u+v;
(%-3)/2;
输出是
x =~ (u+v-3)/2
那么,你可以通过定义简化规则tellsimp(和tellsimpafter,defrule和defmatch).也许这足以开始.
(%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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
640 次 |
| 最近记录: |