Zernike多項式 - その5 Mathematica関数 [Zernike多項式のMathematica関数]
横浜の家から仙台の貸しマンションに戻ってきた。
昨日のピアノの発表会での娘はショパンのプレリュードOp.28の一番最後の24番ニ短調。全然練習してない上に、先週は泊まりがけの新入社員研修でピアノにさわってない状態だというわりには一カ所弾き直した以外はミスタッチもほとんど無く、面目は保っていた。その点はたいしたもの。しかし音楽はショパンの「プレリュード」というよりは「鉄工所」あるいは「京浜急行のガード下」「NCドリルマシン」とでも言うべきものだった。まあ、彼女はそういうキャラだし。
さて、気を取り直して光学の計算で使いやすいようなZernike多項式のMathematica関数を書く。
MathematicaによるZernike多項式の表現
Mathematicaには6.0から標準関数としてZernikeRが導入された。これは動径関数Rnm(ρ)そのものである。
Zernike多項式は動径関数と指数関数(あるいは三角関数)があれば表現できるので十分であるが、もう少し光学で使いやすいようにしよう。
まず式-4の関数を作ろう。さらにこれから直交座標の多項式の表現に変換しよう。
そしてfringe orderとstandard orderを切り替えられるようにしてふたつの添字のかわりにひとつの添字で多項式を指定できるようにしよう。
Mathematicaの関数とその使い方
具体的なMathematicaの関数として
zernikePolinomial[p,u,v,opt]というのを作る。これはp番目のZernike多項式を返す。オプションとして
orderOfTerms coordinateExpression firstNumberOfTermのみっつを受ける。
orderOfTermsは
fringeOrder standardOrderのふたつの値のどちらかを指定する。それぞれ1次元に並べたときの並べ方を指定する。
coordinateExpressionは
polarExpression cartesianExpressionのふたつの値のどちらかを指定する。polarExpressionを指定すると引数uがρに、vがθに対応した極座標表示で多項式が返る。cartesianExpressionを指定すると引数uがxに、vがyに対応した直交座標になる。
firstNumberOfTermは一列に並べたときの番号を0から始めるか、1から始めるかを指定する。
オプションでいちいち指定するのは面倒なので、中身は同じだけど違う指定をする関数も作っておく。
zernikePolarPolynomial[p][r,t] zernikeCartesianPolynomial[p][x,y]それぞれ極座標とデカルト座標でのp番目の多項式を返す。これらはオプションを持たず、別途オプションを設定する関数を用意する。
setZernikeOptions[opt_]この関数は
orderOfTerms firstNumberOfTermのふたつのオプションを受ける。意味はzernikePolinomialのオプションと同じである。この関数を使ってオプションを変更すればそれ以降、zernikePolarPolynomialとzernikeCartesianPolynomialの評価には影響を与えるけど、自分でオプションを持つzernikePolinomialには無関係。
ようするにzernikePolinomialは多項式の形を知りたいときに使って、zernikePolarPolynomialとzernikeCartesianPolynomialは具体的な値の計算のために使い分けるというもの。
他にもユーティリティ関数
sphericalQ[p] rmsCoefficient[p]を作っておく。sphericalQ[p]はp番目の多項式がθに依存しない、回転対称なときTrueを返す。rmsCoefficientは規格化の定数αp の値を返す。
なぜ、これをRMS(Root Mean Square)と呼ぶかと言えば式-17がその通りになっているからだけど、例えばある波面収差W(x,y)をZernike多項式で展開してzpという係数列が得られたとするとこの波面収差のRMS値WRMSは
となって簡単に計算できるからである。この関係は式-17と直交性から簡単に得られる。回折限界の光学系では波面収差の特徴値として収差のP-V値(位相が一番遅れているところと進んでいるところの位相差の値)とRMS値を使うことが多い。
例えばMarechalのCriterionという回折限界性能の基準があるが、これは収差のRMS値で言うと
に対応する。かなおおざっぱな基準だけど目安にはなるのでよく使われる。次回はこの中身の特徴的な部分の実装を取り上げてみる。
娘さんのピアノ、相当強烈な演奏のようですね。(^^;
by たこやきおやじ (2009-04-13 13:17)
コメントありがとうございます。だめ押しするなら曲の最後の低いニ音の3連打はH字鋼にリベットを打ち込むようでした。
オネゲル「パシフィック231」にピアノ版があればいい演奏者になれたかも知れません。
うーん、ちょっと言い過ぎ、本人が読んだら怒るかも。
彼女の名誉のために書いておきますが、17年間も地道にレッスンを続けたのは立派で、しかも個性的な音楽ができているので、父親として本当に誇りに思っています。
フォローが言い訳がましいですね。
by decafish (2009-04-13 22:17)
収差の単位はλですか?
いわゆる、λ単位がそのまま収差の単位になりますよね?
by うっち (2009-05-08 21:00)
収差の単位は一般的にはλを使うと思います。僕もいくつかの式を書くときに暗黙にそれを想定して書いている部分があります。特に回折にまつわるような計算をする場合にはλ(あるいはもっと2πλ)以外の単位は不便で、それはFraunhofer回折では波長が単なるスケーリング因子であるためです。
ただ、Zernike多項式自身は単位によりません。多項式の値の解釈の問題で、例えばもとの収差をnm単位で測ってZernike多項式で展開したなら式-18のRMSはやはりnm単位になります。
by decafish (2009-05-09 21:39)
なるほど、ありがとうございます。
勉強になりました。
by うっち (2009-05-15 00:17)