Maxima は asin(1 / 2) が π/6 であることを知っている:
(%i1) asin(1/2);
%pi
(%o1) ---
6
しかし、asin(1/sqrt(2)) が π/4 であることは知らない:
(%i2) asin(1/sqrt(2));
1
(%o2) asin(-------)
sqrt(2)
Maxima の知らない簡易化規則を定義するのが tellsimp であり、書式
tellsimp(複雑な式, 簡単な式)
で用いる。
(%i3) tellsimp(asin(1/sqrt(2)), %pi/4);
(%o3) [asinrule1, simp-%asin]
(%i4) asin(1/sqrt(2));
%pi
(%o4) ---
4
定義した簡易化規則を削除する(デフォルトに戻す)には kill を使う:
(%i5) kill(asinrule1);
(%o5) done
(%i6) asin(1/sqrt(2));
1
(%o6) asin(-------)
sqrt(2)
全ての規則を削除する場合は kill(rules) を実行する。変数 rules には現在定義されている規則の名前が代入されている:
(%i7) rules; (%o7) [trigrule0, trigrule1, trigrule2, trigrule3, trigrule4, htrigrule1, htrigrule2, htrigrule3, htrigrule4, asinrule1, asinrule2, asinrule3, asinrule4, acosrule1, acosrule2, acosrule3, acosrule4, atanrule1, atanrule2, atanrule3, atanrule4]
それぞれの簡易化規則を表示するには disprule を用いる:
(%i8) disprule(trigrule0);
sin(a)
(%o8) trigrule0 : tan(a) -> ------
cos(a)
例えば、三角関数の計算において cos(x)^2 = 1 - sin(x)^2 と簡易化するためには matchdeclare を併用する必要がある:
(%i9) matchdeclare(x, true);
(%o9) done
(%i10) tellsimp(cos(x)^2, 1 - sin(x)^2);
(%o10) [^rule1, simpexpt]
(%i11) cos(x)^2;
2
(%o11) 1 - sin (x)
(%i12) cos(y)^2;
2
(%o12) 1 - sin (y)
そうしない(matchdeclare(x, false) の)場合、cos(y)^2 など(変数が x 以外)は簡易化されない。なお、^ で始まる規則を削除する場合は引用符で囲む必要がある(kill("^rule1"))。
補足 方程式 t^2 = t + 1 に従って簡易化するために、
としても上手くいかない:(%i1) tellsimpafter(t^2, t + 1); (%o1) [^rule1, simpexpt]
(%i2) t^2;
(%o2) t + 1
(%i3) t^3;
3
(%o3) t
このような目的のためには tellrat を使う。