ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

コンピュータ代数システムMaximaを使って数学を学ぼう【第一歩】

計算が苦手でも数学を嫌いにならないために

計算が苦手だという理由で数学を学ぶことを諦めてしまうのはもったいない。現代ではコンピュータと呼ばれる電子計算機が世の中に普及している。これらを用いることで計算が苦手な人でも数式を解くことができる。

Maximaを使ってみよう

ここではMaximaを紹介する。Maximaというアプリを使えば数学上の計算の多くをこれに任せることができる。

Maximaはコンピュータ・アルゲブラ・システムと呼ばれているアプリケーション・ソフトウェア(略してアプリ)の一つ。アルゲブラとは英語でalgebraと綴り、その意味は代数。

このアプリは複数の基本ソフトウェア上で働く。主要な基本ソフトウェアであるAndroid、Linux、MacOS、WindowsやFreeBSDなどの上で利用することができる。GNU GPLと呼ばれている約束事さえ守れば、Maximaは誰でも自由に無料で使うことが許されている。

Maximaの公式サイトのDownloadsというウェブページには、各々の基本ソフトウェア向けにインストール方法が記されている。

Androidにインストールする場合

Google Playにまずアクセスする。maximaという文字列で検索すると、Maxima on Androidと Maxima Keyboardとがヒットするはず。前者がMaxima本体、後者が入力を簡単にしてくれるソフトウェア・キーボード。

インストールというボタンを押してこれらをインストールすればよいが、後者は必須ではない。インストールの前にログインを求められるので、Googleのアカウントとパスワードを使ってログインする必要がある。

ソフトウェア・キーボードをインストールした場合、「設定」-「システム」-「言語と入力」-「仮想キーボード」-「キーボードの管理」でそれをONにして有効にする必要があるかもしれない。

Windowsにインストールする場合

Windows向けのMaximaは、Maximaの公式サイトのDownloadsで説明されているとおり、sourceforge.netにそのインストーラが置かれている。

そこからmaxima-clisp-sbcl-バージョン番号-win64.exeというファイルをダウンロードし、そしてそれを実行するとインストールの手続きが開始される。

インストール対象であるパソコンと基本ソフトウェアが64ビットに対応していない場合は、32ビット用のファイルであるmaxima-clisp-sbcl-バージョン番号-win32.exeを選ぶ必要がある。

Windows 10の場合、「Windowsの設定」-「システム」-「バージョン情報」という順番で辿ると、「デバイスの仕様」の「システムの種類」で64ビットか32ビットかを確認することができるはず。

Maximaは通常、Cドライブ直下の「maxima-バージョン番号」というフォルダ内にインストールされる。その中のbinフォルダにプログラム本体となる実行ファイルがある。

Maxima本体を起動する前にbinフォルダ内のlispselectorを実行する。そして"SBCL"を選ぶ。

binフォルダ内にはコンソール・アプリであるMaxima本体の他に、グラフィック・インターフェースに対応したwxMaximaやxMaximaがある。それら3つの内のいずれか1つを選んで起動する。

MacOSにインストールする場合

MacPortsFinkHomebrewがすでにインストールされていれば、いずれかを使ってMaximaをインストールすることができる。

Maximaの公式サイトのDownloadsから辿れるリンク先には、MacPortsに対応したバイナリ配布のためのディスク・イメージが置かれている。

このインストール方法では、MacOSの検疫システムにひっかかるので、その問題に対処する必要がある。

ディスク・イメージ・ファイルのMacPorts-Maxima-バージョン番号.dmgを例えばホームディレクトリ下のダウンロード・ディレクトリ内にダウンロードしたとする。

次に、アプリケーションというディレクトリ下のユーティリティというディレクトリ内にあるターミナル・エミュレータを起動する。

ターミナル上で次のようにし、ファイルの拡張属性を操作するxatrrコマンドを使って拡張属性を削除する。-dオプションは拡張属性の削除を命ずるもの。

xattr -d com.apple.quarantine ${HOME}/Downloads/MacPorts-Maxima-バージョン番号.dmg

ファイルへのアクセスを許可するかどうかを尋ねられたらOKを押す。

あとは、ディスク・イメージ・ファイルのMacPorts-Maxima-バージョン番号.dmgを開いて、その中にあるHow_to_install_Maxima_with_MacPorts.rtfに従う。

筆者はMacOSの環境を持っていないので、これを試してみたわけではない。これ以上の解説は省く。

Linuxディストロにインストールする場合

Linuxディストリビューション(略してLinuxディストロ)の場合、その公式の保管場所にMaximaがパッケージとして用意されているのであれば、そのディストロの流儀に従ってそれをインストールするのがもっとも簡単。

例えばDebian 10の場合は、maximaまたはそのグラフィカルなインターフェースを持つwxmaximaかxmaximaというdebパッケージのいずれかをパッケージ管理ソフトウェアを使って検索し、それをインストールする。ソフトウェアの依存関係の問題はパッケージ管理ソフトウェアが自動的に解決してくれる。

例えばwxMaximaをAPTを使ってインストールする場合、ターミナル・エミュレータを起動して次のようにする。

$ sudo apt update; apt install wxmaxima

wxMaximaよりもxMaximaのほうがマシンに負荷をかけずに軽快に動く。

FreeBSDにインストールする場合

FreeBSDの場合はFreeBSD Portsにmaximaとwxmaximaという2つのパッケージが見つかる。それらをFreeBSDの流儀に従ってインストールすればよいはず。

Maximaで美しく整形された数式を表示する

Maximaはコマンドライン・インターフェースを持ったコンソール・アプリなので、ASCCIアートのように擬似的な数式表示を行う。

LaTeXのように整形された美しい数式を表示したければ、GNU Emacs上で動作するimaximaか、あるいはまたTeXmacsをインストールして使う手がある。いずれも公式サイトで、Windows用(64bit)、MacOS用、Linux用のバイナリ配布が行われているので、公式サイトを参照あれ。

imaxima
https://sites.google.com/site/imaximaimath/
TeXmacs
https://www.texmacs.org/

Debian 10では公式のリポジトリにTeXmacsはないがimaximaがある。imaximaはmaxima-emacsというdebパッケージ名で見つかるので、これをインストールすればいい。

$ su
# apt update; apt install maxima-emacs

Emacsがインストールされていない場合、依存関係によってEmacsも一緒にインストールされる。

Maximaを起動して使ってみる

コンソール・アプリであるMaxima本体はターミナル・エミュレータ上で動作する。なんらかのターミナル・エミュレータを起動して次のように入力してEnterキーを押す。

$ maxima
Maxima 5.42.1 http://maxima.sourceforge.net
using Lisp GNU Common Lisp (GCL) GCL 2.6.12
(中略)
(%i1) 

無事に起動すると(%i1)というラベル名が現れ、これ以降、対話形式でMaximaとやりとりできるようになる。

このラベル名は変数名のような役割を果たす。%iはMaximaに対する入力を表わし、%oがMaximaからの出力を表わす。

Maximaを終了させるには次のようにquit()函数を入力して末尾に;を添えてからEnterキーを押す。

(%i1) quit();

ただしwxMaximaやxMaximaの場合、quit()函数は本体のMaximaを終了させるだけなので、wxMaximaやxMaximaの本体を終わらせる必要がある。wxMaximaやxMaximaの場合は、そのメイン・ウィンドウのメニューバーにある「ファイル」または「File」から、「終了」または「Exit」を選べば、アプリを終了させることができる。

imaximaの起動と終了

imaximaはEmacsというエディタ上で動作するのでEmacsをまず起動する。

Emacsが起動したら、Altキーを押したままの状態でxキーを押した後、imaximaと入力してEnterキーを押す。そうするとimaximaが起動するはず。

M-x imaxima

emacs -nwとしてEmacsを起動すると、ターミナル・エミュレータ上で機能するEmacsが起動する。しかし、Altキーとxキーを押しても機能しないバグに遭遇した。

imaximaを終了させるには次のようにする。

(%i1) quit();

Process maxima finishedと表示されたらOK。

Emacs本体を終了させるためには、Ctrlキーを押したままxキーを押し、続けてCtrilキーを押したままcキーを押せばよい。

C-x C-c

多項式の展開と因数分解

Maximaの動作を少しだけ試してみる。

(%i1) 4*x*y^2 + 3*x - 5;
                                    2
(%o1)                          4 x y  + 3 x - 5

数学では乗算演算子×を省略する流儀があるが、Maximaの入力では省略ができず、アスタリスク*で掛け算を明示する必要があることに要注意。

出力では数学の流儀にのっとった表記をASCIIアート風に擬似的に実現してくれる。

Maximaでは入力が終わったことをMaximaに知らせるためにそれらの末尾にセミコロン;かドルマーク$が必要になる。;はその評価を出力するが、$はその評価を出力しない。

(%i1) -3*a +a;
(%o1)                                - 2 a
(%i2) -3*a +a$

(%i3) %i2;
(%o3)                                - 2 a
(%i4) 

(%i1)や(%o3)はラベル。これらは変数のように機能する。上の例の場合、%i2;と入力することは-3*a +a;と入力したことに等しい。

分数は/を使って表わす。分母や分子が複数の項を持つ場合は丸括弧()でそれらを囲う必要があるかもしれない。

(%i1) (x -2)/3 - (2*x -5)/2;
                                x - 2   2 x - 5
(%o1)                           ----- - -------
                                  3        2
(%i2) expand(%);
                                   11   2 x
(%o2)                              -- - ---
                                   6     3
(%i3) 

expand()函数はその引数に指定した式を展開してくれる。引数の%は直前のラベル(%o1)を指している。つまり、(x -2)/3 - (2*x -5)/2;を指している。それを展開した結果が(%o2)で表示された式となる。

累乗を入力するにはサーカムフレックス^を用いてその指数を表わす。出力では数学の流儀に従ってその指数が右肩上に表示される。

(%i1) 8*a^2 - 5*a^2;
                                        2
(%o1)                                3 a

Maximaでは多項式(文字式)がアルファベット順ではなく逆向きに並べられて出力される。

(%i1) (a + b + c)^2;
                                            2
(%o1)                            (c + b + a)
(%i2) expand(%);
                      2                    2            2
(%o2)                c  + 2 b c + 2 a c + b  + 2 a b + a

ordergreat()函数によって文字の順序を明示しておくと次のようになる。

(%i1) ordergreat(a,b,c);
(%o1)                                done
(%i2) (a + b + c)^2;
                                            2
(%o2)                            (a + b + c)
(%i3) expand(%);
                      2                    2            2
(%o3)                a  + 2 b a + 2 c a + b  + 2 c b + c
(%i4) unorder();
(%o4)                              [c, b, a]
(%i5) 

しかし、2baや2caや2cbにまで影響が及んでしまっているのが見て取れる。

ちなみに、unorder()函数はordergreat()函数の影響を解除する。

powerdispをtrueに設定すると、期待する並び順にもう少し近い出力が得られる。

(%i1) powerdisp:true;
(%o1)                                true
(%i2) (a + b + c)^2;
                                            2
(%o2)                            (a + b + c)
(%i3) expand(%);
                      2            2                    2
(%o3)                a  + 2 a b + b  + 2 a c + 2 b c + c
(%i4) 

これらの手続きが面倒くさい場合、デフォルトのままにして多項式の項を右から読む癖をつけるしかないかもしれない。他に何か良い方法があればご教示くださると幸い。

因数分解をする場合にはfactor()函数を用いる。

(%i1) x^2 + 6*x*y - 16*y^2;
                                   2             2
(%o1)                       (- 16 y ) + 6 x y + x
(%i2) factor(%);
(%o2)                        - (2 y - x) (8 y + x)
(%i3) powerdisp:true;
(%o3)                                true
(%i4) %i1;
                               2               2
(%o4)                         x  + 6 x y - 16 y
(%i5) factor(%);
(%o5)                      - ((- x) + 2 y) (x + 8 y)
(%i6) -1*((-1*x) + 2*y);
(%o6)                              x - 2 y

(x - 2y)(x + 8y)と出力してほしいのに、-((-x) + 2y)(x + 8y)と出力されてしまう。確かに両者は等しいが。

コメント

このブログの人気の投稿

Visual Studio 2019にはC++のためのフォームデザイナーがない件

10の補数と9の補数と2の補数と1の補数

LATEXで数式:指数と順列などで使う添数・添字