Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-Maxima入門- コマンドを入力して計算を実行する進んだやり方=トップレベルでカンマを使う。

 

Maximaでは式を書いて、セミコロンをつけて、改行(wxMaximaではshift-改行)すれば、計算が実行されて、結果が表示されます、ということを2年前の記事で書きました。

 

そしてその次の記事では、Maximaでは分数や無理数虚数などを含んだ計算は全て正確に実行されること、もし結果(分数や無理数)を小数に直す場合には、式の後ろに , numerを付ける方法を記載しました。

 

ところで、このカンマで区切ってnumerとつけるのはどんな文法に従っているのでしょうか。このことはマニュアルの8. Evaluationの項目にはわずかに記載がありますが、1. Introduction to Maximaにも4. Command Lineにも記載がありません。

 

この記法はとても便利なので、ここで一度おさらいをしておきます。Maximaのコマンド入力では、次のような書式を使います。

expr, arg1, arg2, …, argn;

最後のセミコロンはドルでも構いません。このような入力を受け取るとMaximaはこれを

ev(expr, arg1, arg2, …, argn);

という式に変換してから評価を開始します。ev()はかなり特殊な関数です。大雑把に言えば、arg1〜argnを評価環境としてexprという式を評価する、というのがev()の意味になります。ただしこの評価環境はこのev()の評価の最中だけ有効です。またarg1〜argnには色々な書式で色々なことを評価環境として記述できます。

結局このカンマでつなげる書式はev()関数呼び出しの略記法なのですが、この記法はコマンド入力(トップレベル)でしか使えません。関数定義の中やコマンドの引数の中では必ずev()を正しく使ってください。

以下に例を幾つかお見せします。

変数の一時的な束縛(コロンも等号も使えます)

(%i1) (x+y)^2,x:4;

$$ \tag{%o1} \left(y+4\right)^2 $$

関数の一時的な定義

(%i2) integrate(f(x),x);

$$ \tag{%o2} \int {f\left(x\right)}{\;dx} $$

(%i3) %,f(x):=x^2;

$$ \tag{%o3} \int {x^2}{\;dx} $$

評価方法の変更 名詞形の関数を動詞系に変換して評価する

(%i4) %, nouns;

$$ \tag{%o4} \frac{x^3}{3} $$

評価方法の変更 浮動小数で計算

(%i5) %e*2, numer;

$$ \tag{%o5} 5.43656365691809 $$

評価方法の変更 精度を指定して任意精度小数で計算

(%i6) %pi*2, fpprec:50, bfloat;

$$ \tag{%o6} 6.2831853071795864769252867665590057683943387987502B0 $$

追加の計算を指定 式の展開, 式の因数分解

(%i7) (x+y+z)^2, expand;

$$ \tag{%o7} z^2+2\,y\,z+2\,x\,z+y^2+2\,x\,y+x^2 $$

(%i8) %, factor;

$$ \tag{%o8} \left(z+y+x\right)^2 $$

 

他にも便利な環境指定方法があります。マニュアル8. Evaluation の中のev()関数の説明を読んで試してみてください。

 

小さな応用を一つ。方程式を解いて、その解を別の式に代入して計算する、というのはよくあることです。Maximaではこんな風にやるのがお洒落でしょう。

(%i9) solve(x^2+2*x-2=0,x);

$$ \tag{%o9} \left[ x=-\sqrt{3}-1 , x=\sqrt{3}-1 \right]  $$

(%i10) x^2,first(%);

$$ \tag{%o10} \left(-\sqrt{3}-1\right)^2 $$ 

first(%)は \( x=-\sqrt{3}-1 \) となるので、これをxの束縛としてx^2を計算する、ということになります。