SSブログ

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
0407eq17.png
の値を返す。

なぜ、これをRMS(Root Mean Square)と呼ぶかと言えば式-17がその通りになっているからだけど、例えばある波面収差W(x,y)をZernike多項式で展開してzpという係数列が得られたとするとこの波面収差のRMS値WRMS

0407eq18.png
となって簡単に計算できるからである。この関係は式-17と直交性から簡単に得られる。

回折限界の光学系では波面収差の特徴値として収差のP-V値(位相が一番遅れているところと進んでいるところの位相差の値)とRMS値を使うことが多い。

例えばMarechalのCriterionという回折限界性能の基準があるが、これは収差のRMS値で言うと

0407eq19.png
に対応する。かなおおざっぱな基準だけど目安にはなるのでよく使われる。

次回はこの中身の特徴的な部分の実装を取り上げてみる。


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

nice! 1

コメント 5

たこやきおやじ

娘さんのピアノ、相当強烈な演奏のようですね。(^^;
by たこやきおやじ (2009-04-13 13:17) 

decafish

コメントありがとうございます。だめ押しするなら曲の最後の低いニ音の3連打はH字鋼にリベットを打ち込むようでした。
オネゲル「パシフィック231」にピアノ版があればいい演奏者になれたかも知れません。
うーん、ちょっと言い過ぎ、本人が読んだら怒るかも。
彼女の名誉のために書いておきますが、17年間も地道にレッスンを続けたのは立派で、しかも個性的な音楽ができているので、父親として本当に誇りに思っています。
フォローが言い訳がましいですね。
by decafish (2009-04-13 22:17) 

うっち

収差の単位はλですか?
いわゆる、λ単位がそのまま収差の単位になりますよね?
by うっち (2009-05-08 21:00) 

decafish

収差の単位は一般的にはλを使うと思います。僕もいくつかの式を書くときに暗黙にそれを想定して書いている部分があります。特に回折にまつわるような計算をする場合にはλ(あるいはもっと2πλ)以外の単位は不便で、それはFraunhofer回折では波長が単なるスケーリング因子であるためです。
ただ、Zernike多項式自身は単位によりません。多項式の値の解釈の問題で、例えばもとの収差をnm単位で測ってZernike多項式で展開したなら式-18のRMSはやはりnm単位になります。
by decafish (2009-05-09 21:39) 

うっち

なるほど、ありがとうございます。
勉強になりました。
by うっち (2009-05-15 00:17) 

コメントを書く

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

トラックバック 0

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