最近、maximaを使って計算している。というのも、面倒だから。 まぁ、あまり本質的な計算をさせるわけでもないし。 久しぶりにmaximaに頑張ってもらおうとしたんだけど、ちょっと分からない所が出てきたので、そのメモ。 maximaで方程式を解かせて、その結果を別の方程式に代入したいとき、どうすればいいのか。 これが分からなくて困りました。 maximaで方程式を解かせた時、その答えはリストで返ってくる。 例えば、 A:solve(x^2-1=0,x); と入力すると、 [x=1,x=-1] と返ってくる。ここで、この結果を使いたい時にはリストの中から要素を抜き出す必要がある。 ここで A[1]; とすると x=1 が返されるんだけど、これをxに代入したらどうしたらいいのか。(このままではxには何の値も代入されない) 調べてみると以下の2つの方法がありそう。というわけで今日のびぼーろく。 右辺を抜き出すコマンド rhsを使う。具体的には x:rhs(A[1]) とすることで、xにAの最初の要素の右辺、つまり1が代入される。 ただし、xには値が残るので kill(x); として、xを元の変数に戻す必要があるのでひと手間多いかな? もうひとつはsubstを使う方法。substは次のように使う。 subst(x=1,x^2*y^2); --->> y^2 subst(x=2,x^2*y^2); --->> 4y^2 つまり、後ろ側の引数の中の変数を最初の引数の条件で置き換えてくれる。 大体、結果は代入したいことが多いので、これは便利。 例えば、解いた方程式(eqn1)の結果を別の方程式(eqn2)に代入したいときには次のように使う。 Ax:solve(eqn1,x); subst(Ax[1],eqn2); これでeqn2にeqn1の結果を代入してくれる。また、xには値が残らないので便利。 今日はしばらくmaximaのマニュアルとにらめっこしてました。おかげで半日無駄に過ごす。疲れた...。