SSブログ

光学で使うZernike多項式とMathematica関数 [Zernike多項式のMathematica関数]

Mathematicaとはかなり古くからの付き合いで、一番最初は会社の後輩の「U」がMacIIに乗せていたのを見たのが初対面。当時REDUCEMacsymaのかわりの数式処理ソフトが欲しくて手に入れた。前にもちょっと書いたけど、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多項式ってなに?から。

Zernike多項式

Zernike多項式は光学の、特にFraunhofer回折の分野でよく出てくる直交関数系で、レンズ系の波面収差を表現するときに使われる。1953年のノーベル物理学賞のZernikeさんが考え出した。

まず、直交関数系とは、というのを簡単にまとめておく。

直交関数系

Fourier級数に代表される完備な直交関数系は便利な数学の道具で、いろいろな分野で使われる。

直交関数系の説明はわかりやすいサイトに譲るとして、完備な直交関数系のふたつの性質をここでは上げる。それはたとえば1次元の場合、区間Iで定義された、添字nで区別される関数列fn(x)が

0401eq1.png
であり、かつ同じ区間Iで定義された任意の(もうちょっと厳密に言えば2乗可積分な)関数g(x)について、
0401eq2.png
を、係数αnを適当に選べばNを大きくすることでいくらでも小さくすることができ、
0401eq3.png
とすることができる、つまり関数の数を増やせば(式-2の意味で)近似の精度を好きなだけ上げることができるというものである。

式-1のn = mのときの積分の値がちょうど1になるものを特に正規直交関数系という。この正規性というのは直交関数系として本質的ではないけど、式が簡単になる。

僕以外の誰の役に立つのかわからない蛸壺マイナー記事は次回に続く。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立04/02献立04/03 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。