ひとまず、大まかな筋道をたてて小手調べに設計を開始して感触を見てみることにしました。CODE Vにあるサンプルレンズ“WIDEANG.len” を使用して、面の分割をしながら、最適化を実行して全系の曲率を揃える。結果は、惨憺たるものでした。
そこで、本腰を入れて設計を進めるために、きちんと戦略を立てていくことにしました。
前回:初期推定についての確認設計の小手調べでは、サンプルレンズを使用して、それを初期解として設計をスタートしました。しかし、もっと素性のよいレンズを初期解とすることで、よりスムーズに良解へたどり着けるのではないかと思われます。
そこで、本格的にCODE Vのパテントデータの選別使用を考えることにしました。
STEP1で少し書きましたが、CODE Vには2500件ものパテントデータが存在します。この中から目ぼしいデータを選別して使用することになります。
これらも、やはり硝材、評価波長、焦点距離など、設計仕様と全く違っているので、この辺をまずそろえてから、比較評価をすることになります。
作成した既存レンズの選別マクロ( pickup_result_patlen.seq )では、MF順にファイル名をソートした結果のテキストファイルが出力されるようになっています。
このファイルデータを元に、順次レンズファイルを呼び出して、材質の置き換え、貼り合わせレンズの処理などを実行するマクロを作成ました( init_handle.seq )。
このとき、各面の曲率に関する制約は与えず、あくまで結像性能重視で形状を最適化します。
本設計課題では単波長ですが、パテントレンズの多くは、複数波長について最適化されています。このため、色消しのために貼り合わせレンズが使われているモデルも多数あります。
本設計課題では、全て同一硝材を使用しなくてはなりません。
そこで、貼り合わせレンズの両材質も揃えるという処理を行います。このとき、STEP2でも言及したように、ベンディングを行います。
以下具体的な処理の例です。
--------------------------------------------------------------------
res cv_lens:doublet
gla s1 p nbk7 gla s2 p nbk7 tin s1 (thi s2) del s2 |
!貼り合わせ前側のレンズの硝材を変更(ベンディング) !貼り合わせ後側のレンズの硝材を変更(ベンディング) !前側レンズの芯厚に、後側のレンズの芯厚を加える !貼り合わせ面を削除する |
初期レンズデータ候補として選出したパテントデータについて、各面の曲率を合わせこみながら最適化を実行し、全系の形状を求めていきます。
本設計の大まかな流れ
分割で全系の曲率を揃えていくなら、
「系全体を通して、各面同士が最小公倍数をもつように最適化制御するほうが良い」
「レンズの前後面は同曲率となるように制御したほうが良い」
と考えました。
まず、ユークリッドの互除法を使用して、入力した2数の最大公約数と最小公倍数を計算するマクロを作成しました( gcd_lcm_calc.seq )。
このマクロを元に、最小公倍数を返すマクロ関数(@lcm)を定義するマクロ( gcd_fct.seq )を作成し、最適化のコンストレインツとして、各面の曲率半径の制御を行います。
ここで考慮しなくてはならないのは、“分割数”です。
例えば、150と1500という2数の最小公倍数は、1500です。これらを曲率半径に置き換えて、分割数を考えると、曲率のキツイ面(150)を10分割する必要があるということになります。お分かりですね?今回の設計仕様では、レンズ枚数の上限が設けられていることより、余りにたくさんの面に分割する必要があるという状態は避けたいわけです。当然こちらの制約も加える必要がありそうです・・・
と、能書きをたれてきましたが結果として、これは余り上手く機能しませんでした。
そもそもこんな面倒なことをしなくても、曲率半径が最も短い面を基準として、他の面がその倍数となるように制御する方がスマートなような。。。そうです。結局のところ “基準面” を決めてやって、それに合わせるように最適化をする方が、はるかに制御し易いようです。
う〜ん、我ながら妙案だと思ったのですが、「策士、策におぼれる」とはまさにこのこと。無駄な時間を費やしてしまいました。
最小公倍数を用いた面形状の制御について玉砕しましたので、もう一方のアプローチを検討する必要があります。そのために[基準となる面の曲率半径を、基準曲率として、これに近づける]ように最適化が実行されるようなコンストレインツを考えなくてはなりません。
各面のとりうる形状は設計仕様に基づき、基準曲率と絶対値で同一、もしくは、平面です。
前者は、基準曲率と当該面の曲率との(絶対値での)差がゼロになるように制約することで達成されます。では、同時に平面ともなるように制約するには?
この場合には、曲率の差分と当該面の曲率の積がゼロとなるように制約すれば達成できます。
具体的には、S2を基準面としてS1の形状を制約するコンストレインツは、
-----------------------------------------------------------------
@curv_s1 == (absf((cuy s1))-absf((cuy s2)))*(cuy s1)
@curv_s1 = 0
-----------------------------------------------------------------
というように、記述することができます。
実際には、第1面、もしくは第2面を基準面として、その他の面の形状を制約しながら最適化を実行して解を求めていきました。
※こちらのレンズでは、第1面は、ほぼ曲率ゼロだったので、平面として、第2面を基準面としてこの面に曲率を揃えるように最適化を実行していきます。
さて、一旦コケタ本設計、今後の首尾はどうなるのでしょうか?
ということで、次回:本設計開始。最終設計解へのアプローチ最終回に続きます。