MacでMaximaの環境構築を行った時の備忘録メモ

過去記事([第1回 AI実装検定【A級】に合格したので色々まとめてみた](https://qiita.com/y-vectorfield/items/437ae52feb531ab5e69c))で投稿した様に、AI実装検定を受検しましたが、受験時に線形代数学の内容を忘れてしまっていることを痛感しました。機械学習の専門書も少し高度な内容の書籍となると、行列やベクトルで記載した数式が大量に登場します。今後を見据え、改めて線形代数学を再学習しようと思い立ちました。手計算も良いですが、数式処理ソフトの力を借りるのも悪くないと思い、[Maxima](http://maxima.sourceforge.net/)をセットアップした時の内容を備忘録メモとしてまとめておくことにしました。

# Maximaとは？
MITで元々開発されたMacsymaを基にした数式処理ソフトのOSSです。最近はPythonで行列やベクトルの演算が可能ですが、微分や積分が入ってくると現状お手上げ状態です。その点MaximaはPythonの様に汎用的に何でも出来る訳ではありませんが、数値計算、微分積分、ベクトル解析と言った解析的な用途には威力を発揮します。大学時代愛用していた時期が有りますが、いつの間にか使わなくなっていました。

# インストール方法
最終的にMaximaのGUI環境wxMaximaを動作できる様にすることが目標です。インストールするアプリケーションは以下の通りです。

* Maxima本体
* wxMaxima(GUI環境)
* gnuplot(グラフ描画用)

## Maxima本体 + gnuplotのインストール
まずはMaxima本体とgnuplotをインストールします。この2つはCLIで利用することを前提に設計されています。インストールには[Homebrew](https://brew.sh/index_ja)を用います。

```bash
brew install maxima gnuplot
```

<details><summary>インストール後の確認</summary><div>

```bash
$ maxima
Maxima 5.43.2 http://maxima.sourceforge.net
using Lisp SBCL 2.0.0
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1)
```

```bash

$ gnuplot

	G N U P L O T
	Version 5.2 patchlevel 8    last modified 2019-12-01 

	Copyright (C) 1986-1993, 1998, 2004, 2007-2019
	Thomas Williams, Colin Kelley and many others

	gnuplot home:     http://www.gnuplot.info
	faq, bugs, etc:   type "help FAQ"
	immediate help:   type "help"  (plot window: hit 'h')

Terminal type is now 'qt'

gnuplot>
```

</div></details>

## wxMaximaのインストール
MaximaのGUI版もインストールします。CLI版とまた違った使いやすさが魅力です。

### インストーラーをダウンロード
[ダウンロードページ](https://sourceforge.net/projects/maxima/files/Maxima-MacOS/5.38.0-MacOSX/)よりダウンロードします。パッケージマネージャーとしてHomebrewを利用している場合はMaxima 5.38.0のイメージでインストールすることをお薦めします。5.40.0以降はパッケージマネージャーMacPortsの利用を前提としています。Homebrewとの共存は推奨されていません。

### インストーラーの起動
ダウンロードした`Maxima 5.38.0.dmg`をダブルクリックし、マウントします。マウントが完了すると以下の様なウィンドウが起動します。

<img width="518" alt="maxima" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/83140ee6-0481-f8f0-0e8f-6323f2fb0f53.png">

ウィンドウ内の`wxMaxima.app`と`Maxima.app`を選択し、`Applications`ディレクトリのショートカットにドラッグ＆ドロップします。`Applications`ディレクトリにコピーが格納されます。格納が完了したら、wxMaximaを起動します。セキュリティー警告が表示されますが、起動を許可します。因みに`Applications`に格納した`Maxima`は`wxMaxima`を動作させる為に必要です。

### wxMaximaにMaxima本体を関連付ける
wxMaximaが起動したら、`wxMaxima/設定`を順にクリックし、設定ウィンドウを起動します。`Maxima`をクリックし、下図の様にMaxima本体のパスを設定します。

<img width="613" alt="wxMaxima" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/97dd7cbe-cd95-0d07-1d31-d574fc278417.png">

## CLI上でgnuplotを利用する時の設定の管理
設定ファイルを作り、そこに設定を記載します。ユーザー毎に設定する方式にしたいので、Homeディレクトリに`/usr/local/Cellar/gnuplot/5.2.8/share/gnuplot/5.2/gnuplotrc`をコピーします。この時、`.gnuplot`というファイル名でコピーします。

`show loadpath`コマンドで起動時に読み込む設定を記述する`gnuplotrc`の格納先が分かるので確認する。

```bash

$ gnuplot

	G N U P L O T
	Version 5.2 patchlevel 8    last modified 2019-12-01 

	Copyright (C) 1986-1993, 1998, 2004, 2007-2019
	Thomas Williams, Colin Kelley and many others

	gnuplot home:     http://www.gnuplot.info
	faq, bugs, etc:   type "help FAQ"
	immediate help:   type "help"  (plot window: hit 'h')

Terminal type is now 'qt'
gnuplot> show loadpath

	loadpath is empty
	gnuplotrc is read from /usr/local/Cellar/gnuplot/5.2.8/share/gnuplot/5.2
```

```bash

$ cp /usr/local/Cellar/gnuplot/5.2.8/share/gnuplot/5.2/gnuplotrc ~/.gnuplot
```

<details><summary>`.gnuplot`の中身</summary><div>

```config

###
### Gnuplot version 5.0 intialization file
### This file is loaded by gnuplot at the start of each run.
### It is provided as a template, with all commands commented out.
### Uncomment and customize lines for local use.
### Any commands placed here will affect all users.
### To customize gnuplot's initial state for an individual user,
### place commands in a private file ~/.gnuplot instead.

###
### Language initialization
###
# set locale
# set encoding locale

###
### Default line colors and repeat cycle
###
# set linetype 1 lc rgb "dark-violet" lw 1
# set linetype 2 lc rgb "#009e73" lw 1
# set linetype 3 lc rgb "#56b4e9" lw 1
# set linetype 4 lc rgb "#e69f00" lw 1
# set linetype 5 lc rgb "#f0e442" lw 1
# set linetype 6 lc rgb "#0072b2" lw 1
# set linetype 7 lc rgb "#e51e10" lw 1
# set linetype 8 lc rgb "black"   lw 1
# set linetype cycle 8

###
### Initialize the default loadpath for shared gnuplot scripts and data.
### Please confirm that this path is correct before uncommented the line below.
###
# set loadpath "/usr/local/share/gnuplot/4.7/demo"

###
### Some commonly used functions that are not built in
###
# sinc(x) = sin(x)/x
# rgb(r,g,b) = sprintf("#%06x",256.*256.*255.*r+256.*255.*g+255.*b)
# hsv(h,s,v) = sprintf("#%06x",hsv2rgb(h,s,v))

###
### Other preferences
###
# set clip two
```

</div></details>

# 試しに線形代数の計算をやってみる
逆行列と固有値・固有ベクトルの計算をさせてみました。矢張り専用ソフトということも有り、計算結果が見やすいです。

<img width="1034" alt="線形代数" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/1847e396-c434-4f96-7030-9a486915b3c1.png">

# まとめ
Mac上でOSS数式処理ソフトのMaximaのセットアップを行いました。機械学習工学の更なる深い理解に向けて線形代数学を再勉強する為に利用していこうと思います。