今回は、代数、といっても式の入力と、方程式の根をもとめる方法の入り口付近をなでてみます。これだけでも十分便利だけれども。ただ、触っていると裏側に隠れている恐ろし気なもの、というか、衣の下の鎧がみえる感じがします。まだまだ奥に進んだわけでないのだけれど。
※「忘却の微分方程式」投稿順 index はこちら
Raspberry Piを利用したWolfram言語プロジェクト により無償で使用できるMathematica(Wolfram言語)と、定番の無償ツールMaximaをWindows上のGUIから使えるようにしたWxMaximaを使用してみている4回目です。目標は自在に微分方程式を解けるようになりたい、ですが、先は長い。
例によって学生でも無いのに参照させていただいとりますWolfram社の以下のページを参考にさせていただいております。
因数分解、真偽の判定
前回まで、先攻Mathematica、後攻Maximaでしたが、今回はMaxima先攻です。まずは因数分解から。Maximaの例題から引用させていただいたものでありますが、自分じゃ、絶対にやりたくない因数分解です。その後につづくのが真偽の判定についてですが、この辺はMaximaとMathmaticaのクセの強さで差が出ている感じです。
Maximaの場合、何かと何かが「等しい」ということを記述する場合に普通にイコール記号を使えるのですが、ただ、= で結んだだけでは「真偽」の判定はしてくれません。真偽判定を迫られる、演算子 and とか、判定のための if 文に渡さないと true や false といった判定結果は得られないようです。
また、方程式の左辺と右辺を繋ぐのも「等しい」ということで 素直に = で書けます。
さて以下はMathmaticaの場合です。因数分解については同名のFactor[](Maximaは小文字のfactorで、丸カッコ)で行えました。因数分解よりも印象的なのは、べき乗の入力からして数学っぽく美しいところです。CTRL+6キーでべき乗部分に入力できるようになります。右矢印キー押せば抜けます。
違いが際立つのは、「等しい」という入力です。= = とイコールを2回入力すると素の等号2個から、等号2個を並べた記号に変換してくれます。遠くからみればイコール1個に見えなくもない。そして、真偽を判定できるような式を入力すれば、即座に真偽が返ってきます。方程式の右辺、左辺を繋ぐのも==です。
方程式の根
Maximaの場合、方程式を解くために、結構いろいろな関数が使えそうでありました。Maxima素人には、これ使えば良い、とは言えない感じです。
solve()関数に、式と変数を与えれば、解がもとまります。式=0は書かなくても、暗黙でOKなようです。solve()の場合、数値で求まれば数値で出力されますが、文字で書かれた代数式を代入しても解けます。a*x^2+b*x+c=0みたいな方程式をxで解けば、解の公式が出力されます。
また、solve()に連立方程式を渡してもちゃんと解いてくれます。その際、複数の式や解くべき変数は角カッコのMaximaのList形式で与えます。
これに対して、allroots()関数に式を渡すと、実数近似値で解を列挙してくれます。エンジニアリング的にはこちらの方がお役だちかもしれません。
Mathmaticaも関数名が大文字で、引数を角カッコで囲むことを除けば同じ Solveで方程式の根を求められます。数値解(近似値)を求める場合は NSolve です。
勿論、Solveに連立方程式も渡せますが、Mathmaticaのリストは中カッコです。似ているようで、チラチラ違いがあって、どちらもクセが強い。
不等式
Maximaも不等式を扱えるようだったのですが、標準でインストールされている外部(?)モジュールをloadしないとならないようでした。一応 ineq というモジュールをloadしてみたのです。これだけでもいろいろ調べないと使いこなせなそうだったので、パスしてしまいました。
Mathmaticaの場合、何も準備せずに使える Reduce[]関数で不等式の簡約ができました。その上、ちょっと「いいね」なのは、数直線上に不等式をプロットする関数 NumberLinePlotがあることです。中学生のときにこういうのがあると良かったね。ともかく、UIの良さというか美しさがMathmatica、いいです。
そして、Mathmatica最大の強み?が、自然言語による入力です。冒頭のアイキャッチ画像に掲げましたが、入力行の冒頭で = キーを押して自然言語(といって英語)の入力モード?にしてから、
quadratic equation
と入力すれば、2次方程式を解く「計算機」やら解説やら、グラフやらいろいろ出てきました。ここはMaximaには無いところ。細かいところを言えば、入力は英語だったのに、出力は日本語になってました。出力モードを日本語にしているためでしょうが、どこまで日本語で教えてくれるのだろう?