続報・Maxima ってかネットブックカスタマイズ

気軽に書けると思ったのに、意外に時間がかかった!
まぁぶっちゃけ中の人性能の問題なのですが・・・

1. Emacsではやっぱり撃てない

というかMaximaを読み込んだTeXmacsが死ぬほど重い。アイコンの描画にもなんか手間取ってる感じ。この辺がネットブックの限界なのかもしれない。
それはさておき、結局vimをインストール

2. ランチャー導入

ここまで色々入れる気なかったんだけど、入れてしまうとやっぱりランチャがほしくなる。
いつもどおりCraftLaunch入れてみようとしたらPythonで書き直したのがあったので使ってみる→設定項目が減りすぎてて泣いた。SetCommandもpythonを自分で書けということなので、ちょっと倦厭。pythonはやったことないのですよ。
古いVerのCraftLaunchを入れてとりあえず元通り

3. vimの設定がけしからん!

変態バインドじゃないと既に扱えないこいつは末期。死んでしまえ。というわけで自分日記からvimrcを引っ張ろうとしたけど、vimタグがなぜかついてなくて異常に苦労した。

4. フォントが読みにくい。

MSゴシックでは生活がままなりません。というわけでOsakaフォント導入


とここまでやってやっと作業開始。長かった。

1. maximaが読んでくれるPathの確認

Pathは内部変数で管理してるらしい。

%i) file_search_maxima;

ってやったらDocument and Setting/ユーザ名/maxima/*.mac がヒットするらしいので該当フォルダを作成して完了

2. 数式入力

下記URLを参考にしながらちょっとした関数を書いてみる。
関数名:http://cosmo.phys.hirosaki-u.ac.jp/wiki.cgi/maxima?page=3%2E+%BF%F4%A4%CE%B7%D7%BB%BB%A1%A6%B4%F0%CB%DC%C5%AA%A4%CA%B4%D8%BF%F4
ドロー確率:http://blog.elder-alliance.org/?day=20070712

load("functs");
PDC(r,i):=combination(m,i)*combination(n-m,r-i)/combination(n,r);
PDrawCard(r,i):=sum(PDC(r,k),k,i,r);

とまぁ打ち込んでやってみたら、答えが分数で出力された。

3. 小数表示化

どうやらMaximaはデフォルトでは分数表示する模様。
http://www.kabipan.com/computer/maxima/quick.html

というわけで最後のPDrawCardをこんな感じに改める

PDrawCard(r,i):=ev(sum(PDC(r,k),k,i,r),numer);

これで小数表示完了

というわけで使い方

カードゲームをやりつつMaximaを使って計算したいとかいう、レア人物にしか役に立たないけど使い方

1. デッキ枚数n & 目的のカード枚数mを入力する

関数の引数にしてもよかったんだけど、一度設定したあとにドロー枚数と目的枚数だけ設定して何度も計算できたほうが使いやすいと思ったのでこんな仕様。
たとえば60枚デッキで24枚入ったカードを計算したい場合は

%I) n:60;
%I) m:24;

と入れる。;を$にするといちいち表示しない。

2. ドロー枚数と目的枚数を引数としてPDrawCardを呼び出す。

後は簡単。7枚ドロー時に2枚以上引く確率は

%I) PDrawCard(7,2);
%O) 0.85734412008982

MtGで24枚ランドの60枚デッキで初手土地を2枚以上引いている確率は86%くらいという感じ。

3. おまけ

PDrawCardは目的枚数以上引く確率を示している。すなわち7枚全部ランドの確率まで足しこまれてる。
ドロー枚数に対して一定の数枚引く確率は

%I) ev(PDC(7,2),numer);
%O) 0.2694146236426

とかやると出てきます。気が向いたら簡単に関数定義するかも。すぐできるから、興味がある人は練習問題としてやってごらんよ!