読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Maxima Tip

Maxima連立方程式を解かせると、解が等式のリストのリスト形式で返されます。

(%i1) solutions : solve([tsuru+kame=8,2*tsuru+4*kame=26],[tsuru, kame]);
(%o1) [[tsuru=3,kame=5]]

その解を使ってある式を評価したいときには、ev()を使います。

(%i2) kame-tsuru, solutions[1]; /* ev(kame-tsuru, solutions[1]); */
(%o2) 2

でも、この後、この解を使い続けるのなら、いっそ、tsuruとkameに解を代入してしまいたい。このかゆいところになかなか手が届かなかったのですが、ようやくなんとか届きました。

(%i3) for each in solutions[1] do lhs(each) :: rhs(each);
(%o3) done
(%i4) tsuru;
(%o4) 3
(%i5) kame;
(%o5) 5

lhs()は等式もしくは不等式の左辺(left-hand side)を、rhs()は右辺(right-hand side)を返します。::は左辺と右辺両方を評価してから代入を実行する代入演算子
なんか、もう少し簡単な表現が用意されているような気もしますが、一応満足しました。