Zernike多項式 - その9 Mathematicaのコード [Zernike多項式のMathematica関数]
さて、それではMathematicaのコード本体。とはいうものの、誰がいったい待っているのか、超マイナーサンプルコード。まあ、MathematicaのPackageのサンプルとして見られないことはない。
Zernike多項式 - その5 Mathematica関数 [Zernike多項式のMathematica関数]
横浜の家から仙台の貸しマンションに戻ってきた。
昨日のピアノの発表会での娘はショパンのプレリュードOp.28の一番最後の24番ニ短調。全然練習してない上に、先週は泊まりがけの新入社員研修でピアノにさわってない状態だというわりには一カ所弾き直した以外はミスタッチもほとんど無く、面目は保っていた。その点はたいしたもの。しかし音楽はショパンの「プレリュード」というよりは「鉄工所」あるいは「京浜急行のガード下」「NCドリルマシン」とでも言うべきものだった。まあ、彼女はそういうキャラだし。
さて、気を取り直して光学の計算で使いやすいようなZernike多項式のMathematica関数を書く。
Zernike多項式 - その4 Zernike多項式を並べる [Zernike多項式のMathematica関数]
明日、娘の(おそらく最後の)ピアノの発表会なので横浜の自宅に帰っている。社会人一年生の娘は泊まり込み研修でしごかれているらしい。大学一年生の息子は明日土曜も講義があるらしい。誰も親父の相手をしてくれない。というわけで続きを書く。
前回、Zernike多項式の導出をおおざっぱにやって、ふたつの添字で多項式が区別されるけど、添字の組み合わせには制限があることを示した。何らかの方法で存在する多項式だけを指定できる方が使いやすい。今回はそのやりかた。
Zernike多項式 - その3 Zernike多項式の導出 [Zernike多項式のMathematica関数]
Zernike多項式は単位円の中で直交する関数列である。そのような関数列はGram-Schmidtの直交化法などでいくらでも作ることができる。でも、その中で簡単で便利で役に立つ関数列はそれなりに工夫しないと作れない。
無限にある直交関数列のなかで、Zernike多項式はどういう特徴を持ったものなのか、その特徴を持つ具体的な関数の形を得るにはどうするか、という話。
光学で使うZernike多項式とMathematica関数 [Zernike多項式のMathematica関数]
Mathematicaとはかなり古くからの付き合いで、一番最初は会社の後輩の「U」がMacIIに乗せていたのを見たのが初対面。当時REDUCEやMacsymaのかわりの数式処理ソフトが欲しくて手に入れた。前にもちょっと書いたけど、REDUCEはソースをコンパイルする必要があったがその環境が整っていなかった。またMacsymaはとんでもなく値がはった。そしてどちらもVAXなどの比較的大きめのunix用だった。
ということで手に入れた最初のMathematicaのバージョンはたぶん1.2だった。決して安くはなかったけど、当時はMacintosh専用のソフトで、2MB積んだMacSE/30では(1+x)10程度の式を展開させるとヒープを使い切ってOSごとクラッシュした。実用にはほど遠かったが、プログラミング言語としての問題意識に共感を覚えて使い続けていた。
そのうちハードの問題も減ってきて2.2あたりから仕事にも使えるようになった。それ以降どんどん依存を深めていってる。6.0を去年手に入れてそこにこれまで自分で実装していたZernike多項式が標準関数として入っていることに今頃気がついた。
Mathematica6.0が持っているZernike多項式はすっぴんの動径関数
ZernikeR[n,m,r]だけで、実はこれで十分ではあるが、光学分野の計算に便利に使うほどではない。
ずっとまえ太古の昔、2.2用に書いた光学向けZernike多項式パッケージを、ZernikeRを使うように書き直したついでにこれに関したメモをまとめておこうと思う。
まずZernike多項式ってなに?から。