3. 操作数基础:结构、类型、权重与目标值
好,咱们正式开始啃优化函数这块硬骨头。第一口,得从最基础的操作数说起。
操作数是什么?说白了,它就是 Zemax 里用来描述光学系统某个具体性能的“度量尺子”。你想让镜头成像清晰,就得告诉软件“清晰”的标准是什么——是光斑半径小于 5 微米?还是波前差小于 0.25 个波长?这些标准,就是通过一个个操作数来定义的。
3.1 操作数的结构:一个完整的“指令”长什么样?
每个操作数,本质上都是一条指令。我习惯把它拆成四个部分来看:
- 操作数类型:告诉软件你要算什么。比如
SPHA算球差,COMA算彗差。 - 参数(Int1, Int2, Data):告诉软件算哪个面、哪个波长、哪个视场。比如
SPHA后面跟着面序号和波长序号。 - 目标值(Target):你希望这个值最终变成多少。理想情况下,球差希望是 0,畸变希望控制在 1% 以内。
- 权重(Weight):这个指标有多重要。权重越大,优化时软件越优先满足它。
嗯,这里要注意,操作数本身不直接修改镜片曲率或厚度,它只负责“测量”和“打分”。优化器根据这些分数,反过来调整镜片参数。
核心理解: 操作数 = 传感器 + 评分卡。它只告诉你“当前系统离目标差多少”,不告诉你“怎么改”。怎么改,是优化器的事。
3.2 操作数的类型:你手里有哪些“尺子”?
Zemax 里操作数有几百种,但别慌,常用的也就二三十种。我按用途把它们分成了几大类,你记牢这几类,后面学起来就快了。
| 类别 | 代表操作数 | 测量什么? |
|---|---|---|
| 像差类 | SPHA, COMA, ASTI, FCUR, DIST |
球差、彗差、像散、场曲、畸变 |
| 波前类 | OPDX, OPGT, WAVF |
光程差、波前误差 |
| 几何类 | RSCE, GENC, DMVA |
光斑半径、几何包围能量 |
| 边界类 | MNCA, MXCA, CTGT, CTLT |
中心厚度、边缘厚度、空气间隙 |
| 玻璃类 | INDX, ABBO |
折射率、阿贝数 |
| 求解类 | POWR, EFFL |
光焦度、有效焦距 |
我个人习惯,刚开始做优化时,先只放 3-5 个核心操作数。比如一个 EFFL 锁焦距,一个 RSCE 控光斑,再加两个边界操作数防止镜片打架。等系统跑顺了,再慢慢加像差操作数去微调。
小技巧: 别一上来就堆几十个操作数。优化器也是“贪心”的,操作数太多,它反而不知道该优先满足谁。先少后多,逐步收紧。
3.3 权重:给每个指标“定个价”
权重这个东西,我刚开始学的时候总觉得它很玄学。后来做项目多了才明白,权重其实就是你告诉优化器:“这个指标我愿意付出多少代价去满足它。”
举个例子:
- 你设计一个投影镜头,畸变要求很严,必须小于 0.5%。那畸变操作数的权重可以设到 10 甚至 20。
- 同时你希望光斑尽量小,但可以稍微放宽一点,那光斑操作数的权重设 1 就够了。
优化器会算一个总 Merit Function(评价函数),公式大致是:
Merit = Σ [ Weight_i × (Current_i - Target_i)² ]
权重越大,偏差的惩罚就越重。优化器会优先把权重高的指标拉回到目标值附近。
我曾经踩过的坑: 有一次我把所有操作数的权重都设成 1,结果优化了半天,光斑和畸变都没收敛。后来我把畸变权重提到 5,光斑权重降到 0.5,系统很快就收敛了。权重不是越大越好,而是要拉开差距,让优化器知道主次。
3.4 目标值:你到底想要什么?
目标值,就是你对这个指标的期望值。它可以是 0(比如球差),也可以是一个非零值(比如有效焦距 100 mm)。
这里有个容易混淆的点:
- 目标值 = 0:表示你希望这个值越小越好,比如像差、畸变。
- 目标值 ≠ 0:表示你希望这个值精确等于某个数,比如焦距、放大率。
还有一种情况,目标值设成“无穷大”或“极小”,配合权重来控制范围。比如你希望镜片厚度在 2 mm 到 5 mm 之间,可以用 CTGT(大于)和 CTLT(小于)两个操作数来夹逼。
关键点: 目标值不是随便填的。它必须是你系统物理上能达到的值。你让一个 F/1.0 的镜头畸变目标设成 0.01%,那优化器再怎么跑也达不到,只会浪费计算时间。
3.5 知识体系总览:一张图看懂操作数
下面这张图,我把操作数的核心逻辑串起来了。你可以把它当作本章的“思维导图”。
3.6 实战小案例:一个最简单的优化函数
说了这么多,不如直接上手看一个例子。假设我们要优化一个单透镜,要求焦距 100 mm,光斑尽量小。
在 Merit Function Editor 里,我会这样写:
! 操作数类型 Int1 Int2 Data 目标值 权重
EFFL 1 1 0 100 10
RSCE 1 1 0 0 1
MNCA 1 2 0 2 5
MXCA 1 2 0 5 5
解释一下:
EFFL:第 1 面到像面,波长 1,目标焦距 100 mm,权重 10(很重要)。RSCE:第 1 面到像面,波长 1,目标光斑半径 0(越小越好),权重 1(次要)。MNCA和MXCA:第 1 面到第 2 面之间的中心厚度,最小 2 mm,最大 5 mm,权重 5(防止镜片太薄或太厚)。
你看,这个优化函数只有 4 个操作数,但已经能驱动一个单透镜向正确的方向跑了。等它跑稳了,我再加 SPHA 去控球差,加 DIST 去控畸变。
我的习惯: 每次加新操作数之前,先跑一轮优化看看当前系统的瓶颈在哪。不要一次性把所有操作数都塞进去,那样你根本不知道是哪个操作数在起作用。