第三部分:高级应用与不确定性

第8章:Banach 空间与鲁棒设计

—— 为什么“差不多”有时候比“完美”更好?

致 Dr. X 的一封长信:关于不确定性世界中的光学真理

尊敬的 Dr. X:

在之前的章节中,我们仿佛置身于一个没有摩擦力、没有热胀冷缩、没有机械振动的理想物理真空中。我们在那里精心雕刻光线,追求费马原理(Fermat's Principle)下的绝对极值。我们构建的数学模型假设患者的眼球像博物馆里的石膏像一样纹丝不动,假设自由曲面加工机床的精度堪比原子钟,假设镜片材料的折射率均匀得如同数学常数。在那种理想化的模拟环境中,我们追求的是数学上的“绝对零度”:最小的光程差、完美的聚焦斑、零误差的波前重构 1

然而,当您走出实验室,回到充满“噪声”的诊室,现实往往会给这种纯粹的数学理想一记响亮的耳光。当那枚在光线追踪软件中评分完美的镜片被戴到患者脸上时,临床反馈有时是残酷的:

  • 生物力学的随机扰动:患者的镜架并不服从设计图纸,它每天会在鼻梁上下滑 3 毫米;阅读时的习惯性倾角(Pantoscopic Tilt)可能与我们预设的参数偏离了 2 到 5 度;甚至泪液膜(Tear Film)的瞬间破裂都会导致角膜前表面的光学质量发生剧烈波动 1
  • 制造环节的熵增:镜片加工厂的单点金刚石车削(SPDT)刀头会随时间磨损,导致局部曲率出现了 0.05D 的微小误差;抛光垫的压力不均可能引入高阶像差;材料的应力释放会改变镜片的表面面型 2
  • 感知心理的非线性:人眼对不同空间频率的误差敏感度是非线性的。中心视力的极度清晰往往掩盖不了周边视野的像散“游泳效应”(Swim Effect),导致患者产生眩晕 1

在这种充满随机扰动(Stochastic Perturbations)的真实世界里,一个在数学上被过度优化(Over-optimized)的“完美”镜片——那个只在光轴中心点清晰,稍微偏离 1 毫米就像差爆发的设计——在临床上就是一场灾难。这好比一辆为了空气动力学极致设计的 F1 赛车,在平整如镜的赛道上虽能无敌,但一旦开到坑坑洼洼的城市道路上,底盘瞬间就会报废。我们需要的是一辆 SUV——也许它的理论极速没有 F1 那么快,但它皮实、耐造、容错率高,无论路况如何颠簸,都能把乘客安全送到目的地。

在工程数学和泛函分析中,这种“皮实”有一个专门的术语:鲁棒性 (Robustness)。

为了从数学底层构建这种鲁棒性,我们不能再仅仅把镜片看作一个二维曲面方程或一组 Zernike 系数。我们需要把每一个镜片设计看作是无限维函数空间中的一个“点”。这个空间不仅定义了向量的加减法,还装备了一把特殊的“尺子”来衡量误差的本质结构。

欢迎来到 Banach 空间(巴拿赫空间)。

在本章中,我们将深入数学的深水区。我们将不再满足于寻找唯一的“最优解”,而是寻找解空间中那些宽阔平坦的“安全屋”。我们将剖析不同的“尺子”(范数)如何决定优化的方向,推导极小极大(Min-Max)优化的数学原理,并使用长尾分布(Heavy-tailed Distributions)来模拟那些极少发生但一旦发生就是灾难的“黑天鹅”事件。


1. 理论基石:Banach 空间——容纳误差的完备容器

要处理“误差”和“扰动”,我们首先需要一个能严谨定义这些概念的数学容器。对于光学表面 S(x,y)S(x,y) 而言,简单的有限维欧几里得空间 Rn\mathbb{R}^n 往往是不够的,因为镜片表面在物理本质上是一个定义在孔径 Ω\Omega 上的连续函数,属于无限维空间。

1.1 什么是 Banach 空间?

从工程定义的角度来看,Banach 空间是一个完备的赋范线性空间 (Complete Normed Linear Space) 3。让我们拆解这个令人生畏的数学定义,将其翻译为光学设计的语言:

  1. 线性空间 (Linear Space):这意味着光学表面是可以叠加的。如果 S1S_1 是一个校正近视的球面设计,S2S_2 是一个校正散光的柱面设计,那么它们的线性组合 S3=αS1+βS2S_3 = \alpha S_1 + \beta S_2 也是一个潜在的合法镜片形状。这为我们使用 Zernike 多项式或 B-样条(B-Splines)进行基函数展开提供了理论合法性 3
  2. 赋范 (Normed):空间里自带一把“尺子”,即范数(Norm),记为 ||\cdot|| 4。对于任意一个镜片设计误差函数 e(x,y)e(x,y),我们可以计算出一个非负实数 e||e||,代表这个误差的“大小”或“能量”。有了范数,我们才能定义两个设计之间的距离:d(Starget,Sactual)=StargetSactuald(S_{target}, S_{actual}) = ||S_{target} - S_{actual}||。这把尺子决定了我们优化的方向——是追求平均误差最小,还是最大误差最小 4
  3. 完备性 (Completeness):这是最抽象但也最关键的一点。它意味着如果你有一系列镜片设计 {Sn}\{S_n\},它们彼此之间的差异越来越小(即构成柯西序列 Cauchy Sequence),那么它们最终逼近的那个极限对象 SS^* 一定依然在这个空间内。
    • 工程隐喻:完备性保证了我们的优化算法(如梯度下降或牛顿法)在迭代过程中不会“掉进黑洞”。无论我们如何逼近理想设计,只要误差序列在收敛,我们最终一定会找到一个存在的解(函数),而不会收敛到一个无法定义的“虚无”或跑出解空间边界 3

1.2 为什么光学设计属于无穷维空间?

在计算机里,我们虽然用有限的离散点或系数来表示镜片,但在物理上,光波前 W(x,y)W(x,y) 和镜片矢高 z(x,y)z(x,y) 是连续函数。研究表明,将光学优化视为在函数空间(如 LpL^p 空间或 Sobolev 空间)中的变分问题,比单纯的参数优化能提供更深刻的洞见 5

特别是在自由曲面(Freeform)设计中,参数数量巨大,设计自由度极高。如果我们仅仅在有限维参数空间考虑问题,容易陷入局部极小值。而在 Banach 空间中考虑泛函极值,可以利用变分法找到全局特性的解。这就好比从“调整 100 个旋钮”上升到了“寻找最佳曲面形状”的维度 6


2. 交互展示与原理:三把尺子 (Norms) 的度量哲学

在 Banach 空间中,核心灵魂是范数 (Norm)。范数决定了我们如何看待“误差”。在光学设计和公差分析中,选择不同的范数,会导致截然不同的优化结果和临床表现 7

我们在数学上定义 LpL_p 范数为:

ep=(Ωe(x,y)pdxdy)1/p||e||_p = \left( \int_{\Omega} |e(x,y)|^p \, dxdy \right)^{1/p}

pp \to \infty 时,我们得到 LL_\infty 范数。

让我们深入剖析光学设计中常见的三把尺子,并推导它们的物理意义。

2.1 表格:光学设计中的范数对比

范数符号 名称 数学定义 (离散化) 光学/临床对应指标 物理意义与设计导向 优缺点分析
L1L_1 曼哈顿范数 (Taxicab Norm) $\sum e_i $ 平均厚度偏差 / 材料体积
L2L_2 欧几里得范数 (Euclidean Norm) ei2\sqrt{\sum e_i^2} RMS (均方根误差) 能量最小化。它惩罚大误差,但对极值有一定的容忍度。对应于光斑大小(Spot Size)和斯特列尔比(Strehl Ratio)的近似 8 优点:数学上光滑可导(Differentiable),易于优化(最小二乘法)。缺点:是一种“平均主义”,可能掩盖局部致命缺陷 9
LL_\infty 切比雪夫范数 (Chebyshev Norm) $\max e_i $ PV (Peak-to-Valley)

2.2 均方根 (RMS) 的数学舒适区与陷阱

在主流光学设计软件(如 Zemax, Code V)中,默认的评价函数(Merit Function)几乎都是基于 L2L_2 范数的 RMS 优化 6

数学推导:

假设波前像差 W(ρ,θ)W(\rho, \theta) 展开为 Zernike 多项式序列 cjZj(ρ,θ)\sum c_j Z_j(\rho, \theta)。由于 Zernike 多项式在单位圆孔径内具有正交性(Orthogonality),根据 Parseval 定理的类比,波前方差(Wavefront Variance)可以直接由系数的平方和表示:

σW2=W2W2=j=1Ncj2\sigma_W^2 = \langle W^2 \rangle - \langle W \rangle^2 = \sum_{j=1}^{N} c_j^2

因此,RMS 误差 RMS=cj2RMS = \sqrt{\sum c_j^2} 本质上就是系数向量在 L2L_2 空间中的欧几里得长度 8

临床陷阱:

L2L_2 范数追求的是“平均分”。一个 RMS 很小的镜片(例如 RMS=0.05λRMS = 0.05\lambda),可能在中心区域极其完美,但在边缘有一个尖锐的像差突起(Spike)。由于这个突起面积很小,它对积分 e2\int e^2 的贡献微乎其微,RMS 数值依然很漂亮。

然而,在临床上,当患者转动眼球,瞳孔扫过这个突起区域时,视网膜上的点扩散函数(PSF)会瞬间崩溃,患者会感到视力突然丧失或影像跳动。这种“虽然 RMS 很低但不可戴”的现象,正是过度依赖 L2L_2 优化的恶果 1

2.3 LL_\infty (PV) 与切比雪夫逼近:硬骨头

为了避免“局部尖峰”,我们需要引入 LL_\infty 范数,即优化 Peak-to-Valley (PV) 值。在数学上,这转化为了切比雪夫逼近问题 (Chebyshev Approximation Problem):

minxWtargetWactual(x)=minx(max(u,v)ΩΔW(u,v)) \min_{x} || W_{target} - W_{actual}(x) ||\infty = \min_{x} \left( \max_{(u,v) \in \Omega} | \Delta W(u,v) | \right)

数学难点与对策:

LL_\infty 范数在数学上是非光滑的 (Non-smooth) 10。函数 f(x)=maxiri(x)f(x) = \max_i |r_i(x)| 在最大值由 rir_i 切换到 rjr_j 的交界处不可微。这意味着传统的梯度下降法(Gradient Descent)在这里会失效,梯度会发生跳变震荡 10

为了解决这个问题,我们通常需要引入辅助变量(Slack Variables),将非光滑的 Min-Max 问题转化为光滑的二阶锥规划 (Second-Order Cone Programming, SOCP) 或半定规划 (SDP) 问题来进行求解 11

交互演示回顾:

在之前的 Wolfram 演示中,当滑块拖向 "局部尖峰 (Spike)" 时,您观察到 RMS (L2L_2) 仅仅温和上升,而 PV (LL_\infty) 数值由于指数项 e100x2e^{-100x^2} 的存在而剧烈爆炸。这直观地证明了为什么 LL_\infty 是鲁棒性分析中不可或缺的“警报器”——它对离群点(Outliers)具有绝对的敏感性 1


3. 鲁棒优化的数学架构 (Min-Max Formulation)

既然现实世界充满了不确定性,我们的设计目标就不应该是一个“点”,而应该是一个“球”。数学家为此构建了鲁棒优化 (Robust Optimization) 框架,旨在寻找在这个“球”内都能生存的解。

3.1 极小极大 (Min-Max) 模型:与魔鬼博弈

鲁棒优化的核心思想是:假设大自然(或者制造厂)是一个恶意的对手,它会竭尽全力在允许的误差范围内寻找让你设计失效的那个点。我们要做的,是在这个最坏情况下,依然争取最好的结果。这被称为 Wald's Maximin Model 12

xx 为设计变量(镜片系数),δ\delta 为制造误差向量,U\mathcal{U} 为误差可能发生的不确定性集合(例如,刀头磨损导致曲率误差在 ±0.05D\pm 0.05D 之间,U={δ:δ0.05}\mathcal{U} = \{ \delta : ||\delta||_\infty \le 0.05 \})。我们的优化目标变为:

minx(maxδUJ(x,δ))\min_{x} \left( \max_{\delta \in \mathcal{U}} J(x, \delta) \right)

这个公式包含两层博弈:

  1. 内部最大化 (Inner Maximization):魔鬼(自然界/加工厂)寻找最坏的误差 δ\delta,使得光学性能 JJ 变得最大(即最差)。
  2. 外部最小化 (Outer Minimization):设计师寻找一个设计 xx,使得即使在魔鬼得逞的情况下,最终的性能损失也是所有设计中最小的。

3.2 平坦极小值 (Flat Minima) 的几何意义

为什么 Min-Max 优化能产生鲁棒性?我们可以通过泰勒展开来理解:

J(x+δ)J(x)+J(x)Tδ+12δTH(x)δJ(x + \delta) \approx J(x) + \nabla J(x)^T \delta + \frac{1}{2} \delta^T H(x) \delta

其中 J\nabla J 是梯度,H(x)H(x) 是海森矩阵(Hessian Matrix,代表曲率)。

在极值点 J(x)0\nabla J(x) \approx 0。为了使系统对 δ\delta 鲁棒(即 J(x+δ)J(x+\delta) 不比 J(x)J(x) 差太多),我们需要第二项 12δTH(x)δ\frac{1}{2} \delta^T H(x) \delta 尽可能小 13

这意味着海森矩阵 H(x)H(x) 的特征值(主曲率)都要尽可能小。换句话说,我们需要找到一个宽阔平坦的极小值 (Flat Minimum),而不是一个尖锐狭窄的极小值(Sharp Minimum)。在平坦的盆地里,即使 δ\delta 让你偏离了中心,你的高度 JJ 也不会上升太多。这正是 Min-Max 优化隐式追求的目标 13

3.3 对偶原理与鲁棒对等形式 (Robust Counterpart)

直接求解嵌套的 Min-Max 问题在计算上极其昂贵。但在 Banach 空间理论的支持下,我们可以利用对偶原理 (Duality Principle) 将内部的 Max 问题转化为外部的确定性约束 14

考虑一个简单的线性约束 aT(x+δ)ba^T (x+\delta) \le b,其中误差 δ\delta 被限制在一个范数球内 δρ||\delta|| \le \rho。最坏情况发生在 δ\deltaaa 方向一致时。根据对偶范数(Dual Norm)的定义(即 δ||\delta||a||a||_* 是对偶的) 15,我们可以推导出该约束的鲁棒对等形式:

maxδρaT(x+δ)=aTx+maxδρaTδ=aTx+ρa \max_{||\delta|| \le \rho} a^T (x+\delta) = a^T x + \max_{||\delta|| \le \rho} a^T \delta = a^T x + \rho ||a||_*

因此,原始的鲁棒约束等价于:

aTx+ρaba^T x + \rho ||a||_* \le b

物理阐释:

这个公式告诉我们,为了实现鲁棒性,我们必须在标称约束边界 bb 上留出一个“安全余量”(Safety Margin)。这个余量的大小 ρa\rho ||a||_* 正比于:

  1. 不确定性的大小 (ρ\rho):加工精度越差,余量要留得越大。
  2. 设计参数的敏感度 (a||a||_*):如果你设计的参数本身系数很大(例如使用了高阶 Zernike 项),那么即便微小的误差也会被放大,因此你需要更大的安全余量 14

这就是为什么鲁棒设计往往看起来比极致设计要“保守”——它主动退后了一步,牺牲了理论上的极致 JminJ_{min},以换取在风暴中的生存能力。


4. 现实世界的概率分布:告别高斯,迎接长尾

在 Dr. X 的备忘录中,我们提到了设备 A(正态分布)和设备 B(T 分布)。这背后隐藏着统计公差分析中最常被忽视的真相:制造业的误差往往不是正态分布的。

4.1 重尾分布 (Heavy-tailed Distributions) 的物理根源

根据中心极限定理(Central Limit Theorem),许多微小的、独立的随机误差叠加会形成正态(高斯)分布。这是经典 SPC(统计过程控制)的基石。但在精密光学制造中,存在着许多非线性的、突发的物理机制,破坏了高斯假设:

  • 刀具磨损与崩边:单点金刚石车削中,刀具的磨损不是线性的。微小的崩边会导致切削深度的瞬间跳变,产生离群值 2
  • 热漂移:机床主轴的热伸长会导致加工中途的系统性偏差。
  • 材料缺陷:镜片毛坯内部的局部硬度不均会导致抛光去除率的非线性波动。

这些因素导致误差分布具有重尾 (Heavy Tail) 特征,即出现极端离群值(Outliers)的概率远高于高斯分布的预测。这种分布也被称为“肥尾分布”(Fat-tailed)16

4.2 学生 t-分布 (Student's t-Distribution) 的数学建模

为了模拟这种具有“黑天鹅”特征的制造误差,我们引入学生 t-分布。它的概率密度函数 (PDF) 为:

f(t)=Γ(ν+12)νπΓ(ν2)(1+t2ν)ν+12 f(t) = \frac{\Gamma(\frac{\nu+1}{2})}{\sqrt{\nu\pi}\Gamma(\frac{\nu}{2})} \left(1+\frac{t^2}{\nu}\right)^{-\frac{\nu+1}{2}}

其中 ν\nu 是自由度(Degrees of Freedom)。

  • 性质:当 ν\nu \to \infty 时,t-分布收敛于正态分布。但当 ν\nu 较小(例如 ν=3\nu=3)时,它的尾部按多项式幂律(Polynomial decay)下降,而不是像高斯分布那样按指数律(Exponential decay)急剧下降 17

图解对比与临床意义:

3σ3\sigma(标准差)之外,标准正态分布认为事件发生的概率仅为 0.3%(千分之三)。但对于自由度 ν=3\nu=3 的 t-分布,这一概率可能高达 2-3%(百分之二到三),高出整整一个数量级 18

这意味着,如果您仅仅使用 RMS (L2L_2) 和 3σ3\sigma 标准来验收镜片,对于遵循 t-分布的生产线(由于工艺控制不稳定),您可能会漏掉大量严重的废品——那些位于重尾中的、光学参数严重超标的“光学灾难”。这就是为什么我们在蒙特卡洛模拟中必须引入 StudentTDistribution 进行压力测试的原因 1

4.3 截断分布与双峰分布

实际生产数据还可能表现出双峰分布 (Bimodal Distribution) 或截断分布 (Truncated Distribution)。例如,为了避免镜片过薄,加工中心可能会人为地倾向于做厚一点,导致中心厚度分布呈现非对称性。在 CODE V 等软件中进行公差分析时,使用截断正态分布或混合分布模型能更准确地预测良品率 19


5. 工程实现:从 ISO 标准到蒙特卡洛代码

理论必须落地。在光学工程实践中,鲁棒性和误差分析是如何具体实施的?

5.1 ISO 10110 标准中的鲁棒性语言

国际标准 ISO 10110 是光学图纸的通用语言 20。它通过特定的代码来定义公差,这些代码本质上是对 Banach 空间中范数球半径的规定。

  • 面型公差 (Surface Form Tolerance): 3/A(B/C)
    • A (Power Error): 矢高误差。这通常对应于 LL_\infty 范数的球(最大允许偏差)。
    • B (Irregularity): 不规则度(PV值)。这是典型的 LL_\infty 约束,限制了局部起伏。
    • C (Rotationally Symmetric Irregularity): 旋转对称误差。
    • RMSx<DRMSx < D: 现代标准允许直接标注 RMS 公差 (L2L_2 范数)。例如 3/RMSi<0.053/- RMSi < 0.05 表示不规则度的 RMS 值必须小于 0.05 波长 21

工程洞察:

ISO 10110-14 引入了波前变形公差(Wavefront Deformation Tolerance),允许工程师直接对整个系统的光学性能(而不仅仅是单个表面)设定 L2L_2LL_\infty 约束。鲁棒设计的最终输出,就是要在图纸上确定合理的 A, B, C 数值,使得制造难度(成本)与临床性能(良品率)达到平衡 21

5.2 蒙特卡洛模拟 (Monte Carlo Simulation) 的算法逻辑

对于非线性、非高斯、多变量耦合的光学系统,解析法求解公差极其困难。工业界标准做法是蒙特卡洛模拟。

算法步骤:

  1. 定义标称系统:建立理想的光学模型 f(x)f(x)
  2. 生成随机扰动:根据预设的概率分布(正态、均匀、或 t-分布),生成成千上万组随机误差向量 δi\delta_i
    • 关键点:这里必须使用真实的制造数据分布。如果车房数据是长尾的,必须用 StudentTDistribution 1
  3. 批量光线追踪:对每一个扰动后的系统 f(x+δi)f(x+\delta_i) 进行光线追踪计算。
  4. 统计分析:
    • 计算良品率(Yield Rate):有多少比例的系统满足规格?
    • 敏感度分析(Sensitivity Analysis):哪个参数(如曲率、厚度、倾斜)对最终像质的影响最大?
  5. 反向优化:如果良品率低,使用减敏优化 (Desensitization Optimization)。在评价函数中加入公差敏感度项(如 Zemax 中的 TOLR 操作数),迫使优化器寻找 Hessian 矩阵特征值更小的解 22

Wolfram 代码回顾:

在之前的代码中,我们通过 RandomVariate 生成误差,并对比了 NormalDistribution 和 StudentTDistribution 的良品率。结果显示,即使设备 B 的标称精度(Scale)更高,由于其长尾特性,其废品率反而可能高于设备 A。这有力地证明了仅仅关注 σ\sigma(方差)而忽略分布形态(Kurtosis 峰度/尾部)的危险性。


6. 进阶话题:自动微分与对偶求解

随着计算能力的提升,现代光学设计正在引入深度学习中的反向传播 (Back-propagation) 技术来加速鲁棒优化。

6.1 自动微分 (Automatic Differentiation) 在公差分析中的应用

传统公差分析需要对每个变量进行有限差分(Finite Difference)扰动来计算灵敏度,计算量随变量数 NN 线性增长。对于自由曲面(N>1000N > 1000),这慢得不可接受。

利用自动微分(AD),我们可以通过一次前向传播和一次反向传播,精确计算出评价函数对所有 NN 个变量的梯度 J\nabla J 6。这使得我们能够极其快速地构建线性化的误差模型,甚至实时计算 Hessian 向量积,从而快速寻找“平坦极小值”。

6.2 解决 LL_\infty 优化的非光滑性

针对 LL_\infty (PV) 优化难的问题,现代算法常采用迭代重加权最小二乘法 (IRLS) 或将其转化为二阶锥规划 (SOCP)。

例如,要最小化 maxri(x)\max |r_i(x)|,可以引入辅助变量 tt,转化为:

mints.t.tri(x)t,i\min t \quad \text{s.t.} \quad -t \le r_i(x) \le t, \quad \forall i

这是一个带约束的光滑优化问题,可以使用内点法(Interior Point Method)高效求解 11。这使得直接优化 PV 值成为可能,从而在数学底层消除那些致命的“局部尖峰”。


📝 Dr. X 的扩展备忘录:从理论到处方

医生,当您下次面对那些挑剔的“敏感型”患者,或者面对厂商天花乱坠的技术参数时,请记住这章 Banach 空间教给我们的哲学:

  1. 警惕 RMS 的欺骗性平均:
    厂商的技术白皮书如果只展示极低的 "RMS 像差",请保持职业性的怀疑。RMS 是 L2L_2 范数,它擅长掩盖局部的灾难。对于高端定制片,请要求看 PV 值 (LL_\infty 范数) 或完整的全表面像差地形图。那个不起眼的红色尖峰,往往就是患者退货的根源。
  2. 拥抱平坦的设计 (Flat Minima):
    在选择镜片设计时,如果一款镜片宣称“在标准位置下视力 2.0”,另一款宣称“在任意位置下视力 1.0”,请毫不犹豫地选择后者。前者是在针尖上跳舞,后者是 Banach 空间里稳健的“球”。鲁棒性(Robustness)永远优于峰值性能(Peak Performance)。
  3. 理解制造的长尾风险:
    不要迷信“高精度机床”。如果车房的工艺控制不稳定(呈现 Student's t-分布),那么偶尔出现的离谱度数不是意外,而是统计学的必然。这也解释了为什么有些时候,老牌大厂的“传统工艺”比某些新兴厂家的“极致参数”良品率更高——因为前者的误差分布没有那条致命的长尾。
  4. 公差是设计出来的,不是检测出来的:
    真正的鲁棒设计,是在方程建立的那一刻,就通过 Min-Max 模型把误差考虑进去了。好的镜片设计,应当对 3mm 的下滑和 2 度的倾斜免疫 1

下周预告:

当我们理解了单一目标的鲁棒性后,我们将面临更贪婪的需求:能不能既要远用视野宽,又要近用像差小?这在 Minkwitz 定理下似乎是不可能的。

下周,第 9 章:多目标优化与帕累托前沿 (Pareto Frontier) —— 我们将在不可能的边缘起舞,学习如何用 Wolfram 画出那条完美的妥协曲线,解决光学的“不可能三角”。

谨致问候,

您的光学算法顾问


引用的著作

第9章:鱼和熊掌如何兼得?——多目标优化与帕累托前沿

—— 当临床需求互相打架时,如何画出那条“完美妥协”的曲线?

致 Dr. X 的一封信

您好,医生。

在之前的章节中,我们探讨了 Banach 空间中的鲁棒性设计,解决了“制造误差”与“配戴位置误差”带来的稳定性问题。我们学会了如何让镜片在面对不确定的物理世界时保持“皮实”的特性。然而,当我们回到您那间充满消毒水气味的验光室,面对一个个活生生的、需求各异的患者时,我们遭遇了比物理误差更棘手、更具哲学意味的挑战——欲望的冲突。

在视光学与眼视光工程的交汇点上,您不仅是一位医生,更是一位站在人性与物理定律夹缝中的谈判专家。

试想这样一个典型的临床下午:您的对面坐着一位挑剔的资深建筑师。他手中拿着刚打印出来的处方,眼神中透着对过往配镜失败经历的焦虑。他向您提出了他的“终极需求”:

“大夫,我的要求很简单。首先,我看图纸必须特别清楚。我的办公桌很大,我不希望为了看清图纸边缘的标注而频繁转头,所以我需要极宽的中近距离视野。在这个区域,我不能容忍任何像差或模糊。”这是需求 A:最大化近用与中距离视野的清晰度与宽度。

紧接着,他又补充道:“但是,我经常需要下工地。以前那副眼镜让我感觉地面在晃动,走在脚手架上深一脚浅一脚,太危险了。所以我需要一副走路绝对稳、周边没有变形、没有游泳感(Swim Effect)的眼镜。”这是需求 B:最小化周边畸变与动态像散。

您微微点头,记录下这些诉求,但您的内心却在苦笑。作为一名深谙几何光学的专家,您心里很清楚,在现有的物理定律框架下,这位患者正在索要一种“五彩斑斓的黑”。他所描述的,是光学设计中的“独角兽”——一个在数学上被证明不存在的实体。

根据渐进多焦点镜片设计的“能量守恒定律”——明克维茨定理 (Minkwitz Theorem) 23,任何一种变焦表面,其像差总量在拓扑学意义上是守恒的 23。像差就像是一个封闭房间里的空气,或者是一块体积固定的橡皮泥。您可以通过设计算法将像差从阅读区“赶走”以满足建筑师看图纸的需求,但这些像差并不会凭空消失,它们会像受惊的鸟群一样,被迫堆积到镜片的周边区域,从而剧烈地增加晃动感,破坏他下工地时的安全性 24。反之,如果您为了行走的安全性而将周边区做得极其平缓,那么像差就会像潮水一样倒灌进中央视力区,无情地侵蚀阅读通道的宽度 25

这就像是在挤压一个充满不可压缩液体的气球:按下葫芦,必然浮起瓢。

在过去,面对这种两难困境,视光医生往往处于被动地位。您只能在镜片厂商提供的有限菜单中做选择:要么选择“硬性设计(Hard Design)”,牺牲舒适度换取清晰度;要么选择“软性设计(Soft Design)”,牺牲清晰度换取舒适度。然后,您只能祈祷患者的大脑具有足够的神经适应性(Neuro-adaptation),能够容忍那些不完美 26

但在应用数学和泛函分析的现代视域下,我们不再被迫做这种非黑即白的单选题。我们意识到,问题的本质不在于寻找一个不存在的“完美解”,而在于寻找一系列“无法被战胜的妥协方案”。在数学上,这一系列方案构成了一条优雅而深刻的曲线——帕累托前沿 (Pareto Frontier) 27

在本章中,我们将深入探讨多目标优化 (Multi-objective Optimization) 的数学内核。我们将不再满足于单一目标函数的极值求解,而是构建一个多维度的谈判空间。我们将使用 Wolfram 语言作为我们的谈判工具,引入变分法 (Calculus of Variations) 和泛函分析的概念,在光学的“不可能三角”中跳舞,帮您找到那个让严酷的物理定律与患者的苛刻需求达成暂时停火协议的“甜蜜点” 28


1. 临床挂钩:不可能三角与明克维茨的诅咒

为了真正理解多目标优化的必要性,我们首先必须量化这种“临床冲突”。在渐进镜片的设计中,存在着一个著名的“不可能三角” 29。受限于微分几何中曲面连续性的基本要求,以下三个关键属性无法同时达到极致:

  1. 通道宽度 (Clear Field Width):决定了患者在视近和视中距离时,眼球可以自由转动的范围。宽度越宽,视觉疲劳越小。
  2. 周边像差 (Peripheral Astigmatism):决定了周边视野的清晰度和动态视觉的稳定性。像差越小,游泳效应越弱,晕动感越低。
  3. 通道长度 (Corridor Length):决定了从看远切换到看近所需的眼球下旋角度。通道越短,切换越快,但像差梯度越陡。

1.1 明克维茨定理 (The Minkwitz Theorem) 的数学暴政

为什么我们不能既要宽通道,又要低像差?这并非因为我们的计算机不够快,而是因为 1963 年德国光学家 Günter Minkwitz 发现的一条几何定律 23

在渐进片的主子午线(脐点线,即从远用到近用的中心连线)上,如果我们设定了屈光力 P(y)P(y) 随垂直坐标 yy 的变化规律(即下加光 Add 的过程),那么在垂直于该线的水平方向 xx 上,表面像散 A(x,y)A(x,y) 的变化率受到严格的数学约束 30

明克维茨定理的近似表达如下:

Ax2Py\frac{\partial A}{\partial x} \approx 2 \frac{\partial P}{\partial y}

这个公式虽然简洁,却蕴含着残酷的物理真相 31

  • Py\frac{\partial P}{\partial y} 代表了下加光的速度。如果我们希望通道短一点(为了适应时尚的小框镜架),或者患者的 Add 度数很高(老花眼严重),这个项就会变得很大。
  • Ax\frac{\partial A}{\partial x} 代表了像散增加的速度。也就是从中心清晰区向周边模糊区过渡的“陡峭程度”。
  • 系数 2 是一个无情的倍增器 30

这意味着,如果您渴望快速获得阅读度数(大的 Py\frac{\partial P}{\partial y}),那么在水平方向上,像散就会以两倍的速度爆发式增长 30。清晰区的边界会迅速被像散“墙壁”所夹击,导致通道变窄。

1.2 硬性设计 vs. 软性设计:梯度的博弈

基于明克维茨定理,光学界衍生出了两种截然不同的设计哲学,它们构成了多目标优化的两个极端边界 32

设计哲学 数学特征 (梯度 A\nabla A) 临床表现 适用人群
硬性设计 (Hard Design) 高梯度。像散变化率极大,像差被强行“推”到镜片的最边缘 32 中心视野极宽,就像透过管子看世界,清晰但边缘有强烈的“断崖感”和棱镜跃动 32 长期配戴者、需要精细视力的职业(如会计、牙医)。
软性设计 (Soft Design) 低梯度。人为地平滑像散分布,允许像差“渗入”中央视力区 32 周边像差低,视野开阔感好,晃动少,但缺乏高精度的中心清晰区,看小字可能费劲 32 初次配戴者、运动人群、对晃动敏感者(如司机)。

我们的任务,就是在“硬”与“软”这两个极端之间,根据患者的个人偏好权重,计算出一个最优的中间态 26


2. 理论深潜:从函数到泛函

在之前的单目标优化章节中,我们的任务通常是寻找一个变量 xx 来最小化一个简单的标量函数 f(x)f(x)。但在镜片设计中,我们的变量不再是一个数,甚至不是一个向量,而是一个函数——即镜片的整个前表面或后表面的矢高分布 S(x,y)S(x,y) 33

这属于变分法 (Calculus of Variations) 的范畴。我们要优化的对象是泛函 (Functional),即“函数的函数” 33

2.1 构建对抗性目标泛函

为了实现多目标优化,我们需要将临床需求翻译成数学语言。我们构建两个相互对抗的成本泛函 (Cost Functionals):

目标 A:清晰度损失泛函 (JClearJ_{Clear})

这个泛函衡量的是镜片在关键视觉区域(远用区、近用区、通道)内的光度误差。我们希望这个误差越小越好。

JClear=ΩwROI(x,y)(Pactual(S(x,y))Ptarget(x,y))2dxdy J_{Clear} = \iint_{\Omega} w_{ROI}(x,y) \cdot \left( P_{actual}(S(x,y)) - P_{target}(x,y) \right)^2 \, dx \, dy

  • S(x,y)S(x,y):待设计的镜片表面形状。
  • PactualP_{actual}:光线追踪计算出的实际屈光力。
  • PtargetP_{target}:处方要求的理想屈光力。
  • wROIw_{ROI}:感兴趣区域 (Region of Interest) 的权重函数。在视力区,该权重极大;在盲区,该权重较小 34

目标 B:舒适度/像差损失泛函 (JComfortJ_{Comfort})

这个泛函衡量的是镜片表面的扭曲程度和晃动感。根据临床经验,人眼对像散的变化率(梯度)比像散的绝对值更敏感 35

JComfort=Ω(wAst(x,y)A(S)2+wSwim(x,y)A(S)2)dxdy J_{Comfort} = \iint_{\Omega} \left( w_{Ast}(x,y) \cdot A(S)^2 + w_{Swim}(x,y) \cdot | \nabla A(S) |^2 \right) \, dx \, dy

  • A(S)A(S):表面像散分布。
  • A(S)\nabla A(S):像散的梯度向量。这一项直接对应“游泳效应”。最小化这一项,就是为了获得“软性设计” 35

2.2 帕累托最优 (Pareto Optimality) 的严格定义

在双目标空间 (JClear,JComfort)(J_{Clear}, J_{Comfort}) 中,我们无法找到一个表面 SS,使得 JClearJ_{Clear}JComfortJ_{Comfort} 同时达到绝对最小值(除非是平面镜)。因此,我们引入偏序关系来定义“最优” 27

  • 被支配 (Dominated):假设有两个设计方案 S1S_1S2S_2。如果 JClear(S1)JClear(S2)J_{Clear}(S_1) \le J_{Clear}(S_2)JComfort(S1)JComfort(S2)J_{Comfort}(S_1) \le J_{Comfort}(S_2),并且其中至少有一个不等式是严格小于的,那么我们称 S1S_1 支配 S2S_2。这意味着 S2S_2 是一个毫无价值的劣质设计——它既不比 S1S_1 清楚,也不比 S1S_1 舒适 36
  • 帕累托前沿 (Pareto Frontier):这是所有“非支配”解的集合。对于前沿上的任何一个设计点,如果不牺牲其中一个目标,就绝对无法改善另一个目标 36

这条前沿曲线,就是我们与物理定律谈判的底线。任何位于前沿外侧(左下方)的点,都是现有物理学禁止的;任何位于前沿内侧(右上方)的点,都是工程学上的浪费。


3. 交互展示:在曲线上跳舞

为了让这种抽象的泛函分析变得触手可及,我们使用 Wolfram 语言构建一个交互式模型。在这个模型中,我们将简化问题维度,通过调整权重来观察镜片形态的演变 37

实验逻辑:

我们将使用加权求和法 (Weighted Sum Method) 将双目标转化为单目标 38

JTotal=wJClear+(1w)JComfortJ_{Total} = w \cdot J_{Clear} + (1-w) \cdot J_{Comfort}

通过扫描权重 ww 从 0 到 1 的变化,我们可以遍历整个帕累托前沿。

请运行下方代码,重点观察右侧图表中红点的轨迹——那是设计空间中最迷人的曲线。

(* 交互演示:寻找帕累托前沿 (Pareto Frontier) *)
(* 模拟光学设计中的 Trade-off:想要中心度数足 (Focus),又想周边像差小 (Flatness) *)

Manipulate[
 (* 1. 定义镜片形状的简化模型,a是设计参数 *)
 shape[x_, a_] := a * (1 - x^2)^2;

 (* 2. 定义两个冲突的目标 *)
 
 (* 目标 A:清晰度误差 (Focus Error) *)
 (* 我们希望中心高度 shape(0) 接近目标值 1.0 *)
 (* 误差 = (实际高度 - 1.0)^2 *)
 focusScore[a_] := (shape[0, a] - 1.0)^2;

 (* 3. 目标 B:像差水平 (Distortion/Flatness) *)
 (* 我们希望镜片尽量平坦,斜率变化不要太剧烈 *)
 (* 误差 = 表面斜率平方的积分 (Dirichlet Energy) *)
 flatnessScore[a_] := NIntegrate[D[shape[x, a], x]^2, {x, 0, 1}];

 (* 4. 标量化 (Scalarization):将两个目标合成一个 *)
 (* Total Cost = w * Objective1 + (1-w) * Objective2 *)
 weightedObj[a_] := weight * focusScore[a] + (1 - weight) * flatnessScore[a];

 (* 5. 求解最优的参数 a *)
 (* 使用 NMinimize 寻找当前权重下的最优解 *)
 (* 这是一个变分问题的简化版 *)
 optSol = NMinimize[{weightedObj[a], 0 <= a <= 1.5}, a];
 bestA = a /. optSol[[2]];

 (* 6. 计算当前最优解的两个独立得分 *)
 currentFocusError = focusScore[bestA];
 currentFlatnessError = flatnessScore[bestA];

 (* 7. 预计算帕累托曲线 (为了背景展示) *)
 (* 我们遍历 a 从 0 到 1.2 的所有可能状态,描绘出性能边界 *)
 paretoCurve = Table[{focusScore[val], flatnessScore[val]}, {val, 0, 1.2, 0.02}];

 (* 8. 可视化 *)
 Grid[{{
    (* 左图:镜片形状展示 *)
    Plot[shape[x, bestA], {x, -1, 1},
     PlotRange -> {-0.1, 1.2}, ImageSize -> 350,
     PlotStyle -> {Thick, Purple},
     Filling -> Axis, FillingStyle -> Opacity[0.1, Purple],
     PlotLabel -> Style["镜片截面最优形态", Bold, 14],
     AxesLabel -> {"位置 (x)", "厚度/光程"},
     Epilog -> {
       Text[Style["中心高度: " <> ToString[NumberForm[shape[0, bestA], {2, 2}]], Small], {0, shape[0, bestA]}, {0, -0.2}],
       Text[Style["边缘像差低", Small], {0.6, 0.3}, {-1, 0}]
      }],

    (* 右图:帕累托前沿图 *)
    Show[
     ListPlot[paretoCurve, PlotStyle -> {Darker[Blue, 0.6]}, Joined -> True, PlotMarkers -> None],
     
     (* 当前的工作点 *)
     Graphics[{Red, PointSize[0.025], Point[{currentFocusError, currentFlatnessError}],
       Text[Style["当前设计点", Small], {currentFocusError, currentFlatnessError}, {-1.2, 0}],
       
       (* 标注理想点 *)
       Text[Style["理想点 (物理禁止)", Tiny], {0.1, 0.1}],
       Green, PointSize[0.02], Point[{0,0}]
      }],
     
     AxesLabel -> {"清晰度误差 (Focus Error)", "像差水平 (Distortion)"},
     PlotLabel -> Style["帕累托前沿 (Pareto Frontier)", Bold, 14],
     ImageSize -> 350,
     PlotRange -> All,
     GridLines -> Automatic
     ]
   }}],

(* 控制面板 *)
Style["调整权重以遍历所有非支配解:", Bold],
{{weight, 0.5, "偏好权重 (w)"}, 0.01, 0.99, Appearance -> "Labeled", 
 ControlPlacement -> Top},
Row[{
  Spacer[10], 
  Style["Hard Design 倾向中心清晰 (w→1)", Small],
  Spacer[20], 
  Style["Soft Design 倾向周边舒适 (w→0)", Small]
  }]
]

👨‍⚕️ 医生的观察任务:

  1. 极端测试 (w1w \to 1,Hard Design):
    • 操作:将滑块拖到最右边。
    • 现象:镜片截面高高拱起,中心完美达到了 1.0 的高度。
    • 代价:观察右图,红点位于左上角。清晰度误差(横轴)为 0,但像差水平(纵轴)达到了最高值。
    • 临床含义:这就是极端硬性设计。视力表能看 2.0,但周边全是扭曲,患者转头就像在看哈哈镜。
  2. 极端测试 (w0w \to 0,Soft Design):
    • 操作:将滑块拖到最左边。
    • 现象:镜片几乎塌陷成平面。
    • 代价:右图中红点滑落到右下角。像差极低,但清晰度误差极大。
    • 临床含义:这就像一个还没磨好的毛坯,或者度数严重不足的镜片。虽然戴着不晕,但也看不清。
  3. 寻找“肘部” (The Elbow Point):
    • 操作:在中段拖动滑块,寻找帕累托曲线弯曲最剧烈的位置(通常在左下角拐弯处)。
    • 深度洞察:在这个特殊的点上,边际效益最大化。您只需牺牲极其微小、几乎无法察觉的中心清晰度(例如 0.05D 的误差),就能换取周边像差的大幅度下降(例如 30% 的提升)。
    • 结论:这便是高端镜片设计的核心秘密。所谓的“黄金比例”,就是寻找这个数学上的最大曲率点。

4. 算法工程化:自动生成决策报告

既然我们理解了原理,现在让我们为您的诊所开发一个原型的智能配镜决策系统 39

在实际工业应用中(例如蔡司或依视路的 LMS 系统),我们不会手动去拖滑块。我们需要算法自动扫描所有可能的权重组合,生成离散的帕累托前沿数据集,并从中筛选出最适合特定患者群体的方案。

我们将使用 Wolfram 的 TableNMinimize 来模拟这一高算力过程。为了模拟真实光学的非线性响应,我们将目标函数设计得更为复杂。

(* 代码处方 09:生成帕累托前沿分析报告 *)
(* Multi-objective Optimization Report Generator *)

(* 1. 定义模拟的复杂目标函数 *)
(* 这里我们使用非线性函数来模拟真实光学系统中的非线性响应 *)
(* J1: 清晰度损失 (越小越好). 假设物理极限下最佳点在 x=2 *)
costClear[x_] := (x - 2)^2;

(* J2: 舒适度损失 (越小越好). 假设物理极限下最佳点在 x=-1 *)
(* 添加一个指数项模拟像差随着设计变硬而呈指数级恶化的特性 *)
costComfort[x_] := (x + 1)^2 + 0.5 * Exp[0.3 * x];

(* 2. 核心计算:扫描权重,生成前沿数据 *)
(* 在实际镜片设计中,这一步可能涉及数千次光线追踪迭代 *)
simulationData = Table[
  Module[{w, sol, xOpt, val1, val2},
   w = weight;
   
   (* 求解加权总分最小化 *)
   (* NMinimize 能够处理非线性约束优化,寻找全局最优 *)
   sol = NMinimize[{w * costClear[x] + (1 - w) * costComfort[x], -2 <= x <= 3}, x];
   xOpt = x /. sol[[2]];
   
   (* 关键步骤:分别记录两个独立目标的得分 *)
   (* 虽然优化是用总分做的,但评估必须看单项 *)
   val1 = costClear[xOpt];
   val2 = costComfort[xOpt];
   
   (* 返回数据包: {权重, 清晰度损失, 舒适度损失, 最优参数x} *)
   {w, val1, val2, xOpt}
   ],
  {weight, 0, 1, 0.02} (* 高分辨率扫描:步长 0.02 *)
  ];

(* 3. 数据提取与智能筛选 *)
(* 从生成的大量数据中,提取出三个代表性方案 *)

(* Hard Design: 偏向清晰 (权重 w 较大时) *)
hardDesign = simulationData[[-5]]; 

(* Soft Design: 偏向舒适 (权重 w 较小时) *)
softDesign = simulationData[[5]];

(* Balanced Design: 寻找几何上的"肘部" *)
(* 这里使用简单的欧几里得距离法:寻找距离理想原点 {0,0} 最近的点 *)
(* 先对数据进行归一化处理以防止量纲干扰,然后求范数 *)
norms = Map[Norm[{#[[2]], #[[3]]}] &, simulationData];
balancedIndex = First[Ordering[norms, 1]];
balancedDesign = simulationData[[balancedIndex]];

(* 4. 提取帕累托前沿坐标用于绘图 *)
paretoFrontier = simulationData[[All, {2, 3}]];

(* 5. 绘制专业级决策报告图表 *)
Show[
 ListPlot[paretoFrontier, PlotStyle -> {Darker[Blue, 0.6]}, Joined -> True, InterpolationOrder -> 2,
 PlotTheme -> "Scientific",
 FrameLabel -> {"清晰度损失 (Blur Metric) \n(越右越模糊)", "舒适度损失 (Distortion Metric) \n(越上越晕)"},
 PlotLabel -> Style["多目标设计帕累托前沿", Bold, 14],
 GridLines -> Automatic,
 ImageSize -> 500
 ],

(* 标注三个关键方案 *)
Graphics[{
  (* Hard Point *)
  Red, PointSize[0.025], Point[hardDesign[[{2, 3}]]],
  Text[Style["硬性设计 (Hard)", Red], hardDesign[[{2, 3}]] + {0, 0.5}],
  
  (* Soft Point *)
  Darker[Green], PointSize[0.025], Point[softDesign[[{2, 3}]]],
  Text[Style["软性设计 (Soft)", Darker[Green], Background->White], softDesign[[{2, 3}]] + {0.5, 0}],
  
  (* Balanced Point *)
  Orange, PointSize[0.03], Point[balancedDesign[[{2, 3}]]],
  Text[Style["平衡设计 (Balanced)", Orange, Bold], balancedDesign[[{2, 3}]] + {0.3, 0.3}],
  
  (* 不可行区域 *)
  Gray, Dashed, Line[{{0,0}, {5,5}}],
  Text[Style["理想点 (物理禁止)", Tiny], {1, 1}]
 }]]

(* 6. 输出决策建议矩阵 *)
Print["\n=================================================="];
Print["\t\t智能配镜决策建议 (基于帕累托最优解)"];
Print["=================================================="];

(* 定义一个辅助函数将 Loss 转换为 10分制评分,便于患者理解 *)
score[loss_] := 10 - 2 * loss;

Print[Grid[{
  {Style["方案名称", Bold], Style["清晰度得分\n(10分制)", Bold], Style["舒适度得分\n(10分制)", Bold], Style["适用场景", Bold]},
  
  {"软性设计 (Soft)", 
   NumberForm[score[softDesign[[2]]], {2, 2}], 
   Style[NumberForm[score[softDesign[[3]]], {2, 1}], Darker[Green]], 
   Style[NumberForm[score[softDesign[[2]]], {2, 1}], Darker[Green]], 
   "敏感体质、动态活动多、\n初次配戴老花镜"},
  
  {"平衡设计 (Balanced)", 
   NumberForm[score[balancedDesign[[2]]], {2, 2}], 
   Style[NumberForm[score[balancedDesign[[3]]], {2, 1}], Orange, Bold], 
   Style[NumberForm[score[balancedDesign[[2]]], {2, 1}], Orange, Bold], 
   "大多数标准用户、\n日常混合场景"},
  
  {"硬性设计 (Hard)", 
   NumberForm[score[hardDesign[[2]]], {2, 2}], 
   Style[NumberForm[score[hardDesign[[3]]], {2, 1}], Red], 
   Style[NumberForm[score[hardDesign[[2]]], {2, 1}], Red], 
   "长期配戴者、静止办公、\n对清晰度极度敏感"}
  }, Frame -> All, Background -> {{LightGray, None}, None}, Alignment -> {Left, Center}]];

代码解读与技术细节补充 40

  1. Table 循环与离散化:
    虽然帕累托前沿在数学上是连续的,但在工程计算中,我们要付出高昂的算力代价。通过 Table 函数以 0.02 为步长进行扫描,我们实际上是在高维设计空间中打下了一系列的“探针”。这种方法被称为生成法 (Generative Method),它是现代自由曲面镜片 (Freeform Lens) 定制技术的核心——先算出一堆可能的镜片,再根据患者数据挑一个最好的。
  2. NMinimize 的选择:
    我们使用了 Wolfram 的数值优化函数 NMinimize 而不是符号解 Minimize。这是因为真实的光学评价函数往往包含高度非线性的项(如高阶像差、调制传递函数 MTF),甚至包含不可导的逻辑判断。NMinimize 内部集成了差分进化 (Differential Evolution) 和模拟退火 (Simulated Annealing) 等算法,能够有效跳出局部最优陷阱,处理这种非凸优化问题 41
  3. 评分系统的心理学转化:
    请注意代码最后,我们将数学上的“损失函数 (Loss)”转换为了“评分 (Score)”。
    score[loss_] := 10 - 2 * loss
    这是一个微小但至关重要的用户体验 (UX) 细节。患者不想听“您的清晰度误差是 1.5”,他们想听“您的清晰度得分为 7.0”。作为连接数学与患者的桥梁,医生必须学会这种翻译。

5. 行业前瞻:个性化定制的本质

了解了这些数学原理后,您就能看穿镜片市场上那些令人眼花缭乱的营销术语了 42

所谓的**“个人化定制 (Freeform Personalization)”,其底层逻辑并非是每家厂商都发明了新的物理定律 43。其本质是:通过精细的问卷调查(生活习惯、职业需求、头眼动习惯),利用算法精确地推算出该患者大脑中潜意识的那个权重值 ww** 44

  • 如果患者勾选了“经常开车”,算法会将 ww 调低,向软性设计偏移。
  • 如果患者勾选了“每天阅读 4 小时以上”,算法会将 ww 调高,向硬性设计偏移。
  • 如果患者的瞳距 (PD) 很小,内移量 (Inset) 很大,算法会调整积分区域 Ω\Omega 的边界。

这套系统在云端服务器上运行,将解出的最优表面参数 S(x,y)S(x,y) 发送到加工车间的自由曲面车房(Freeform Generator),用金刚石刀头以纳米级的精度将这个独一无二的帕累托最优解雕刻在镜片上。

这就是数学改变生活的全过程。


📝 Dr. X 的备忘录

  1. 没有最好的镜片,只有最适合的权重:
    当患者投诉新眼镜“不好用”时,只要验光度数无误,那么问题通常不是镜片质量差,而是权重错配。您可能给一位对动态视觉敏感的司机,错误地匹配了会计师专用的高权重硬性设计。调整 ww 值,往往比调整度数更有效。
  2. 帕累托前沿是技术的边界:
    • 前沿内侧(右上方)的点:代表视力差且像差大。这是设计拙劣或加工误差造成的劣质产品。
    • 前沿外侧(左下方)的点:代表视力极好且像差极小。这是物理学不允许的。如果某厂商宣称他们的产品打破了这一规律,那是违反明克维茨定理的虚假宣传。
  3. 妥协的艺术:
    多目标优化教会我们,完美是不存在的。但通过数学,我们可以让妥协变得可控、量化且最优。

下周预告:

我们在几何空间(Spatial Domain)里探讨了形状与误差。但有时候,镜片表面看着无比光滑,几何参数完美,患者却依然抱怨“看东西不实”、“没有质感”、“像蒙了一层纱”。

这是因为我们一直忽略了光的另一个本质——波动性。

几何光学无法解释衍射,无法解释对比度丢失。

下周,第 10 章:傅里叶光学与卷积。我们将戴上数学的“频谱眼镜”,利用快速傅里叶变换 (FFT) 和图像卷积,揭开“对比度敏感度函数 (CSF)”的神秘面纱。

祝您的诊疗如帕累托前沿般精准而优雅。

您的光学数学顾问,

Ph.D. O


引用的著作

第10章:戴上数学的“频谱眼镜”——傅里叶光学与卷积

—— 为什么有些患者视力表能看 1.0,却依然抱怨“看不清”?

致 Dr. X 的一封信

您好,医生。

在之前的九章里,我们像一个勤奋的几何学家,手持直尺和量角器,追踪着每一条光线穿过角膜、晶状体,最终落在视网膜上的路径。这种方法叫“几何光学”(Geometrical Optics)。它直观、有效,是您在验光室里计算球镜、柱镜和棱镜的基础。然而,随着我们对视觉质量要求的提高,几何光学的局限性开始显现。您一定遇到过这样的“幽灵”患者:验光结果完美,插片验光达到 1.0 (20/20),自动验光仪显示没有明显的残留屈光不正,但患者依然抱怨世界像是蒙了一层灰,或者像是透过脏玻璃看东西,尤其是在晚上,灯光周围有奇怪的光圈。眼底检查正常,角膜地形图也大致对称。这并非患者的心理作用,而是几何光学在微观层面欺骗了您。

几何光学假设光是“线”,可以无限聚焦于一点。但在物理本质上,光是“波” 45。当光线穿过有限大小的瞳孔时,它不仅是直线传播,还会发生衍射 (Diffraction) 45。当光线经过稍微浑浊的晶状体(如早期白内障)或不完美的角膜切削表面时,它会发生散射和波前畸变 46。要理解这些现象,我们需要摘下“几何眼镜”,换上一副数学上的“频谱眼镜”。欢迎来到傅里叶光学 (Fourier Optics) 的世界 47。在本章中,我们将深入探讨为什么“清晰”不仅仅是聚焦的问题,而是频率信息传递的问题。我们将推导透镜如何奇迹般地充当模拟计算机来执行傅里叶变换,解析点扩散函数 (PSF) 的波动本源,并利用卷积原理揭开视觉质量下降的真相。

1. 范式转移:从光线追踪到线性系统理论

在深入数学推导之前,我们需要建立一个新的世界观。在几何光学中,我们关注的是光线的位置 (Position) 和 方向 (Direction)。但在傅里叶光学中,我们将光学系统视为一个线性移不变系统 (Linear Shift-Invariant System, LSI),关注的是空间频率 (Spatial Frequency) 的传递 48

1.1 视力表的局限与“看不见的”像差

在临床实践中,Snellen 视力表(E字表)是绝对的权威,但从信号处理的角度看,它是一个非常粗糙的测试工具 49。视力表测量的是人眼的极限分辨率 (Cutoff Frequency),即眼睛能分辨的最高空间频率(最密的黑白条纹)49。这就像测试一套音响系统,只看它能不能发出 20,000 Hz 的高音。

然而,绝大多数日常视觉任务(看人脸、阅读、驾驶)都发生在中低频段 46。患者抱怨的“蒙了一层灰”或“对比度下降”,通常就是指中低频段的对比度传递出现了问题 46。这相当于音响系统虽然能飙高音,但在播放人声(中频)时充满了杂音和浑浊感。

1.2 对比度敏感度的物理本质

如果我们将视标分解为不同频率的正弦波光栅,人眼作为一个光学系统,对不同频率的“传递能力”是不同的 50。几何光学认为只要对焦准确,黑就是黑,白就是白(对比度 100%)。但波动光学告诉我们,即使对焦完美,由于衍射和像差,黑白交界处的光能会发生“弥散”。原本 100% 的黑白对比,在视网膜上可能只剩下 50% 的灰度差异 50。这种光能的弥散方式,在数学上由点扩散函数 (PSF) 描述;而这种对比度的损失,由调制传递函数 (MTF) 描述。这两个概念是硬币的两面,通过傅里叶变换紧密相连 50

下表总结了几何光学与物理(傅里叶)光学的核心差异:

比较维度 几何光学 (Ray Optics) 物理/傅里叶光学 (Fourier Optics)
基本单元 光线 (Ray) 波前 (Wavefront) / 平面波谱
成像模型 点对点映射 (Point-to-Point) 线性系统卷积 (Convolution)
聚焦光斑 理想点 (Delta Function) 艾里斑 (Airy Disk) / PSF
分辨率限制 像差 (Aberrations) 衍射极限 (Diffraction Limit)
数学工具 三角学、矩阵光学 傅里叶变换、卷积积分
临床应用 验光配镜、IOL计算 像质分析、MTF 测量、波前像差

2. 数学引擎:从惠更斯原理到傅里叶变换

为什么我们要引入傅里叶变换?这不仅仅是因为数学上的便利,更是因为透镜本身在物理上就是一台执行傅里叶变换的模拟计算机 47。为了理解这一点,我们必须回到物理光学的根基——惠更斯-菲涅耳原理 51

2.1 惠更斯-菲涅耳原理与衍射积分

光波在空间中的传播可以看作是无数球面子波的叠加 52。假设在孔径平面 (x,y)(x, y) 上的复振幅分布为 U(x,y)U(x, y),根据惠更斯-菲涅耳原理,在距离 zz 处的观察平面 (u,v)(u, v) 上的场 U(u,v)U'(u, v) 可以表示为球面波的叠加积分 52

U(u,v)=1iλU(x,y)exp(ikr)rχ(θ)dxdy U'(u, v) = \frac{1}{i\lambda} \iint_{-\infty}^{\infty} U(x, y) \frac{\exp(ikr)}{r} \chi(\theta) \,dx\,dy

其中 k=2π/λk = 2\pi/\lambda 是波数,rr 是源点到场点的距离 52χ(θ)\chi(\theta) 是倾斜因子(通常在旁轴近似下取为 1)。距离 rr 是连接孔径点 (x,y)(x, y) 和观察点 (u,v)(u, v) 的直线距离:

r=z2+(ux)2+(vy)2r = \sqrt{z^2 + (u-x)^2 + (v-y)^2}

2.2 菲涅耳近似:二项式展开

直接处理平方根极其困难。在旁轴近似(Paraxial Approximation)下,即孔径尺寸和观察范围远小于传播距离 zz 时,我们可以对 rr 进行二项式展开 45

r=z1+(ux)2+(vy)2z2z+(ux)2+(vy)22zr = z \sqrt{1 + \frac{(u-x)^2 + (v-y)^2}{z^2}} \approx z + \frac{(u-x)^2 + (v-y)^2}{2z}

将其代入指数项 exp(ikr)\exp(ikr),我们得到了著名的菲涅耳衍射积分 (Fresnel Diffraction Integral) 53

U(u,v)=eikziλzU(x,y)exp[ik2z((ux)2+(vy)2)]dxdy U'(u, v) = \frac{e^{ikz}}{i\lambda z} \iint_{-\infty}^{\infty} U(x, y) \exp\left[\frac{ik}{2z}((u-x)^2 + (v-y)^2)\right] \,dx\,dy

展开平方项 (ux)2=u22ux+x2(u-x)^2 = u^2 - 2ux + x^2,我们可以将积分重写为:

U(u,v)=eikzeik2z(u2+v2)iλz[U(x,y)eik2z(x2+y2)]ei2πλz(xu+yv)dxdy U'(u, v) = \frac{e^{ikz} e^{\frac{ik}{2z}(u^2+v^2)}}{i\lambda z} \iint_{-\infty}^{\infty} \left[ U(x, y) e^{\frac{ik}{2z}(x^2+y^2)} \right] e^{-i\frac{2\pi}{\lambda z}(xu+yv)} \,dx\,dy

注意观察这个公式的结构。积分部分本质上是函数 U(x,y)eik2z(x2+y2)U(x, y) e^{\frac{ik}{2z}(x^2+y^2)} 的傅里叶变换,其频率变量为 fx=u/(λz)f_x = u/(\lambda z)fy=v/(λz)f_y = v/(\lambda z) 54。这意味着光在自由传播一段距离后,其场分布包含了输入场的频谱信息,但被一个二次相位因子(chirp function)所调制 54

2.3 进阶视点:分数阶傅里叶变换 (FrFT)

在现代光学研究中,菲涅耳衍射还可以被更优雅地描述为分数阶傅里叶变换 (Fractional Fourier Transform, FrFT) 55。如果是标准的傅里叶变换对应于光传播到“无穷远”(或焦平面),那么菲涅耳衍射就对应于传播到“中间”某个位置 56。FrFT 的阶数 α\alpha 与传播距离 zz 有关。当 z=0z=0 时,α=0\alpha=0(恒等变换);当 zz 满足特定焦距条件时,α=1\alpha=1(标准傅里叶变换)。这种数学工具揭示了光传播过程的连续性,即光场是在时频域(或空频域)中旋转的 56

2.4 透镜的魔法:完美的相位抵消

现在,我们在孔径处放置一个正透镜。物理上,透镜的作用是将平行的波前弯曲成会聚的球面波。数学上,薄透镜可以被视为一个相位变换器,它引入了一个二次相位延迟 57

tlens(x,y)=exp[ik2f(x2+y2)]t_{lens}(x, y) = \exp\left[ -i \frac{k}{2f} (x^2 + y^2) \right]

当我们观察透镜后焦面(即 z=fz = f)上的光场时,菲涅耳衍射公式中的二次相位因子 exp[ik2z(x2+y2)]\exp\left[\frac{ik}{2z}(x^2+y^2)\right] 与透镜引入的相位因子 exp[ik2f(x2+y2)]\exp\left[-i \frac{k}{2f} (x^2 + y^2)\right] 会发生相互作用 58。当 z=fz=f 时,这两个指数项的指数部分正好互为相反数,完美抵消 58

ik2f(x2+y2)ik2f(x2+y2)=0\frac{ik}{2f}(x^2+y^2) - \frac{ik}{2f}(x^2+y^2) = 0

于是,焦平面上的积分简化为:

Ufocal(u,v)U(x,y)exp[i2πλf(xu+yv)]dxdy U_{focal}(u, v) \propto \iint_{-\infty}^{\infty} U(x, y) \exp\left[-i\frac{2\pi}{\lambda f}(xu+yv)\right] \,dx\,dy

结论: 这正是输入场 U(x,y)U(x, y) 的精确二维傅里叶变换 47

UfocalF{U(x,y)}U_{focal} \propto \mathcal{F}\{U(x, y)\}

这就是为什么我们说戴上“频谱眼镜”不是比喻,而是物理事实。当外界光线经过人眼的光学系统(角膜和晶状体作为透镜组)聚焦在视网膜上时,视网膜上的图像本质上是外界物体频谱经过瞳孔函数滤波后的重组。

3. 视觉的原子:点扩散函数 (PSF) 与瑞利判据

理解了透镜的傅里叶性质,我们就能解释患者看到的“模糊”到底是什么。如果在无限远处有一个理想的点光源(比如星星),根据几何光学,它在视网膜上应该是一个无限小的点。但由于光的波动性(衍射),它实际上会形成一个光斑 59。这个光斑的强度分布就是 点扩散函数 (Point Spread Function, PSF) 59

3.1 艾里斑与贝塞尔函数的舞步

对于一个直径为 DD 的圆形瞳孔(Circular Aperture),其瞳孔函数 P(r)P(r) 是一个圆域函数(pupil function)。根据我们刚才推导的结论,焦平面上的场分布是这个圆域函数的傅里叶变换 59。圆域函数的傅里叶变换涉及到一阶贝塞尔函数 (Bessel Function of the First Kind, J1J_1) 59。其强度分布被称为 艾里斑 (Airy Disk) 59

I(θ)=I0[2J1(x)x]2,其中 x=πDsinθλ I(\theta) = I_0 \left[ \frac{2 J_1(x)}{x} \right]^2, \quad \text{其中 } x = \frac{\pi D \sin\theta}{\lambda}

这个函数具有显著的特征:中心有一个极亮的主极大(集中了约 84% 的能量),周围环绕着一系列同心的暗环和亮环 59

3.2 1.22 的由来:瑞利判据的数学推导

我们在教科书上常常见到瑞利判据 (Rayleigh Criterion) 的公式:θ=1.22λ/D\theta = 1.22 \lambda / D。这个神秘的 1.22 是从哪里来的?它正是源于贝塞尔函数的性质 60

瑞利勋爵(Lord Rayleigh)提出,两个等强度的非相干点光源刚好能被分辨的条件是:一个艾里斑的中心刚好落在另一个艾里斑的第一暗环(First Minimum)上 61

数学上,这对应于求 J1(x)=0J_1(x) = 0 的第一个非零根。查阅贝塞尔函数表可知,J1(x)J_1(x) 的第一个零点位于 x3.8317x \approx 3.8317 60

πDsinθλ=3.8317    sinθ=3.8317πλD1.21966λD \frac{\pi D \sin\theta}{\lambda} = 3.8317 \implies \sin\theta = \frac{3.8317}{\pi} \frac{\lambda}{D} \approx 1.21966 \frac{\lambda}{D}

在小角度近似下(sinθθ\sin\theta \approx \theta),我们得到了著名的 1.22 系数 60。这不仅是一个数字,它是物理学对人眼分辨率设定的“硬上限”。无论视网膜上的感光细胞多么密集,任何小于这个角度的细节在光学上都已经“融合”了,无法被区分 62

3.3 斯派罗判据:超越瑞利

值得注意的是,1.22 并不是唯一的标准。斯派罗判据 (Sparrow Criterion) 认为,当两个点光源叠加后的中心强度不再出现下凹(即二阶导数为零)时,才是分辨率的极限 61。斯派罗判据给出的系数约为 0.47(针对 D/λD/\lambda 尺度),比瑞利判据更激进。但在临床上,由于人眼像差和神经系统的噪声,我们通常使用较保守的瑞利判据。

4. 卷积定理:光学的“画笔”与图像的形成

患者看到的视网膜图像 IretinaI_{retina},并不是外界物体 IobjectI_{object} 的完美复制,而是外界物体与眼睛 PSF 的卷积 (Convolution) 63

4.1 卷积的物理直觉:扫描与涂抹

数学定义上,卷积积分写作 63

(fg)(t)f(τ)g(tτ)dτ(f * g)(t) \equiv \int_{-\infty}^{\infty} f(\tau) g(t - \tau) \,d\tau

对于医生来说,这可能过于抽象。让我们用“扫描”和“涂抹”来理解它 64

  1. 扫描 (Scanning): 想象眼睛是一台扫描仪,PSF 是扫描头(探针)。当扫描头滑过整个图像时,它在每一个位置都采集并加权平均了周围的光强 65
  2. 涂抹 (Smearing): 更直观的理解是“画笔”。PSF 就是笔头的形状。理想眼睛的笔头是针尖,画出的世界清晰锐利。近视或散光眼睛的笔头是一个巨大的椭圆或弥散斑。当您用这支粗笔去描绘视力表上的“E”字时,黑色的墨水必然会涂抹到白色的间隙里 64

4.2 卷积定理 (Convolution Theorem)

在空间域 (x,yx, y) 中直接计算卷积极其消耗算力。但在频率域(Fourier Domain),卷积有一个惊人的性质:时域(或空域)的卷积等于频域的乘法 66

F{Iretina}=F{IobjectPSF}=F{Iobject}F{PSF} \mathcal{F}\{I_{retina}\} = \mathcal{F}\{I_{object} * PSF\} = \mathcal{F}\{I_{object}\} \cdot \mathcal{F}\{PSF\}

这一公式是现代光学设计的基石 67。它告诉我们,如果我们知道物体的频谱(F{Iobject}\mathcal{F}\{I_{object}\})和系统的光学传递函数(F{PSF}\mathcal{F}\{PSF\}),我们就可以直接通过简单的乘法算出像的频谱,再反变换回来得到像。其中,F{PSF}\mathcal{F}\{PSF\} 被称为 光学传递函数 (Optical Transfer Function, OTF) 68

5. 频率分析:OTF、MTF 与 瞳孔自相关

Dr. X,如果您想在学术会议上技惊四座,仅仅展示卷积是不够的。您需要深入解析 OTF 的内部机制 68。特别是,为什么瞳孔大小对 OTF 有如此复杂的影响?

5.1 OTF 的几何解释:瞳孔自相关

我们已经知道 PSFF{P(x,y)}2PSF \propto |\mathcal{F}\{P(x, y)\}|^2,其中 P(x,y)P(x, y) 是瞳孔函数 69

根据自相关定理 (Autocorrelation Theorem),一个函数模平方的傅里叶逆变换,等于该函数的自相关 69

由于 OTF 是 PSF 的傅里叶变换 68,我们可以得出这一优美的结论:OTF 是瞳孔函数的归一化自相关 70

OTF(ξ,η)=P(x,y)P(xξ,yη)dxdyP(x,y)2dxdyOTF(\xi, \eta) = \frac{\iint P(x, y) P^*(x - \xi, y - \eta) \,dx\,dy}{\iint |P(x, y)|^2 \,dx\,dy}

几何物理图景 70

这个公式揭示了 OTF 的几何本质。计算特定空间频率 (ξ,η)(\xi, \eta) 下的 OTF 值,实际上就是计算两个瞳孔函数在相对位移 (ξ,η)(\xi, \eta) 下的重叠面积 (Area of Overlap) 70

想象两个直径为 DD 的圆。

  • 低频 (ξ0\xi \approx 0): 两个圆几乎完全重合,重叠面积最大,OTF 1\approx 1。对比度传递完美。
  • 中频: 两个圆滑开了一段距离,重叠面积减小。OTF 下降,对比度降低。
  • 截止频率 (Cutoff Frequency): 两个圆刚好相切,重叠面积为 0。此时 OTF = 0,意味着该频率及以上的细节完全无法传递。

5.2 截止频率与分辨率极限

当两个圆刚好相切时,位移量等于瞳孔直径 DD。在频率域坐标中,这一位移对应的截止频率 fcutofff_{cutoff}71

fcutoff=1λ(f/#)=Dλff_{cutoff} = \frac{1}{\lambda (f/\#)} = \frac{D}{\lambda f}

这解释了为什么瞳孔越大(DD 增加),理论截止频率越高,分辨率潜力越大 72

5.3 像差对 OTF 的影响

如果瞳孔函数 P(x,y)P(x, y) 包含像差(即 P(x,y)=PeikW(x,y)P(x, y) = |P| e^{ik W(x,y)}),相位 W(x,y)W(x,y) 不再是平坦的 73。在计算重叠积分时,重叠区域内的复数相位因子 eikΔWe^{ik \Delta W} 会发生振荡,导致积分结果的正负部分相互抵消(Destructive Interference)46

这就是像差降低视力的数学本质:像差并没有“吃掉”光子,它只是打乱了光波的相位,导致在进行瞳孔自相关积分时,能量无法有效地相加,从而降低了 MTF(对比度)46

6. 人眼光学模型:从理论到临床

人类的眼睛不是完美的光学仪器。为了在计算机中模拟视觉,我们需要具体的数学模型来描述人眼的 MTF 74

6.1 Artal & Navarro 双指数模型

Artal 和 Navarro 等人通过双通道技术测量了大量人眼的 MTF,并提出了一个经典的解析模型 75。该模型使用两个指数函数的加权和来拟合人眼的平均 MTF 75

MTF(u)=(1C)eAu+CeBuMTF(u) = (1 - C) e^{-A u} + C e^{-B u}

其中 uu 是空间频率 (cycles/degree)。参数 A,B,CA, B, C 均依赖于瞳孔直径 pp (mm) 75。例如,对于 4mm 瞳孔:

  • AA 控制低频下降。
  • BB 控制高频尾部。
  • CC 是权重因子。

这个模型比单指数模型更准确地捕捉了人眼在中高频段的表现,是构建视觉模拟器的理想选择 74

6.2 瞳孔尺寸的博弈:衍射与像差的平衡

在临床上,我们常说“眯眼能看清”。这是因为眯眼减小了垂直方向的瞳孔直径 76。这涉及到两个对抗的物理机制 76

  1. 衍射效应: 瞳孔越小,艾里斑越大,衍射造成的模糊越严重(低通滤波)。
  2. 像差效应: 瞳孔越大,边缘光线参与成像越多,球差和高阶像差越严重。

人眼存在一个最佳瞳孔直径(通常在 2.5mm - 3.0mm 左右),此时衍射和像差的总和最小,视觉斯特列尔比 (Visual Strehl Ratio) 达到峰值 76。当瞳孔过大(如散瞳后)或过小(强光下)时,视觉质量都会下降 76

6.3 需求对比度函数 (Demand Contrast Function)

仅仅知道 MTF(眼睛能提供多少对比度)是不够的,我们还需要知道视网膜和大脑需要多少对比度才能识别物体 50。这就是需求对比度函数。极限分辨率(视力表读数)实际上是 MTF 曲线与神经系统需求阈值曲线的交点 50。这意味着,提升视力不仅仅要提升光学的 MTF(做手术),也可以通过训练降低神经系统的阈值(知觉学习)。

7. 交互展示:卷积与像差模拟

我们利用 Wolfram 语言的 ImageConvolve 和 Fourier 模块,来构建一个动态的视觉模拟器。这将直观地展示当 PSF 发生变化(如散光、像差)时,患者眼中的视标是如何崩塌的。

(* 交互演示:视觉模拟器 —— 戴上频谱眼镜 *)
(* 模拟 PSF (点扩散函数) 对视力表图像的卷积效应,展示像差如何破坏视觉质量 *)

Manipulate[
 kSize = 128;
 
 (* 1. 视标源图像 (E 字) *)
 sourceImage = Rasterize[
   Graphics[Text[Style["E", Bold, 100]], 
     Background -> White, 
     Text[Style["E", Bold, 100], {0, 0}]},
    PlotRange -> {{-1.5, 1.5}, {-1.5, 1.5}}],
   ImageSize -> 256, RasterSize -> 256, ColorSpace -> "Grayscale"];

 (* 2. 构建物理 PSF 模型 *)
 (* 使用高斯函数模拟离焦 (Defocus),拉伸模拟散光 (Astigmatism),添加相位项模拟彗差 (Coma) *)
 psfKernel = Table[
   Module[{x, y, r, angle, r2, ellipticity},
    r = Sqrt[x^2 + y^2];
    r2 = r^2;
    ellipticity = 1.0 + (cylRatio - 1.0) * Abs[Cos[angle - axis*Degree]];
    
    (* 离焦项: 高斯核模拟弥散 *)
    defocusTerm = Exp[-(r2 / (2 * blur^2 * ellipticity))]; 
    
    (* 彗差项: 在径向上引入不对称性,用相位来控制振幅的扭曲 *)
    comaTerm = coma * (r2*Cos[angle]); 
    
    defocusTerm * Exp[I * comaTerm] // Abs
    ],
   {y, -2, 2, 4./kSize}, {x, -2, 2, 4./kSize}
 ];
 
 (* 旋转 PSF 以模拟散光轴位 *)
 psfKernel = ImageRotate[Image[psfKernel], axis Degree, Background -> 0];
 (* 归一化能量守恒 *)
 psfKernel = ImageAdjust[Image[psfKernel / Total[Flatten[ImageData[psfKernel]]]]];

 (* 3. 空间域卷积:模拟患者看到的图像 *)
 simulatedVision = ImageConvolve[sourceImage, psfKernel];

 (* 4. 频率域分析:计算 MTF (Modulation Transfer Function) *)
 (* OTF 是 PSF 的傅里叶变换。MTF 是 OTF 的模 *)
 otfSpectrum = Fourier[ImageData[psfKernel], FourierParameters -> {1, -1}];
 (* 移频将低频移至中心,并取对数显示以便观察 *)
 otfSpectrum = ImageAdjust[Log[1 + Abs[RotateRight[otfSpectrum, {kSize/2, kSize/2}]]]];

 (* 5. 可视化面板 *)
 Grid[{
   {Style["PSF (点扩散函数)", Bold], Style["MTF 频谱 (频率域)", Bold], Style["卷积图像 (视网膜像)", Bold]},
   {
    (* 显示放大后的 PSF *)
    ImageResize[psfKernel, 150],
    (* 显示 MTF 频谱图 *)
    Colorize[Image[otfSpectrum], ColorFunction -> "SunsetColors"],
    (* 显示卷积后的 E 字 *)
    ImageResize[simulatedVision, 150]
   }
  }, Frame -> All, FrameStyle -> LightGray],

(* 控制参数 *)
Style["像差参数控制", Bold],
{{blur, 0.3, "离焦/近视 (Blur)"}, 0.1, 1.0, Appearance -> "Labeled"},
{{cylRatio, 1.0, "散光量 (Cylinder)"}, 1.0, 5.0, Appearance -> "Labeled"},
{{axis, 0, "散光轴位 (Axis)"}, 0, 180, 1, Appearance -> "Labeled"},
{{coma, 0, "彗差 (Coma - 不对称性)"}, 0, 2, Appearance -> "Labeled"},

Delimiter,
Style["MTF 外圈消失证明高频细节丢失", Small]
]

👨‍⚕️ 医生的观察任务:

  1. 散光 (Astigmatism) 的本质:
    • 当您增加 cylRatio 时,PSF 变成了椭圆。
    • 请注意观察右侧的“E”字:竖线可能还很清楚,但横线已经糊成一片了。这就是卷积的方向性。散光患者抱怨的“重影”往往是有特定方向的。
  2. 彗差 (Coma) 的破坏力:
    • 微调 coma 滑块。PSF 不再对称,像一颗扫把星。
    • 这对夜间驾驶是灾难性的。路灯会变成一个个拖着尾巴的彗星。而在视力表测试中,患者可能通过“眯眼”或脑补猜对 E 的开口,但在真实世界的高对比度场景下,视觉质量极差。
  3. MTF 频谱图:
    • 中间的彩色图是 MTF。中心代表低频(大轮廓),边缘代表高频(细节)。
    • 当图像变糊时,您会发现 MTF 图原本明亮的外圈(高频信息)消失了。这就是“对比度丢失”的数学证据。

8. 代码处方:从瞳孔到视网膜的全程模拟

最后,我们不再使用预设的数学函数,而是直接模拟光波通过一个 4mm 瞳孔时的物理衍射过程。我们将计算并绘制出人眼的 MTF 曲线,并标记出截止频率。

(* 代码处方 10:人眼光学系统的 MTF 计算器 *)
(* 基于波动光学原理,从瞳孔函数直接推导 PSF 和 MTF *)

Clear["Global`*"];

(* 1. 定义物理参数 *)
lambda = 0.55 * 10^-3; (* 波长 550nm (绿光), 单位 mm *)
pupilDiameter = 4.0;   (* 瞳孔直径 4mm *)
focalLength = 17.0;    (* 人眼等效焦距 17mm *)
gridSize = 512;        (* 模拟网格大小 *)
L = pupilDiameter / 2.0; (* 光瞳平面半宽 mm *)

(* 2. 构建瞳孔函数 (Pupil Function) *)
(* 空间坐标系 *)
dx = 2 * L / gridSize;
xRange = Subdivide[-L, L, gridSize - 1];
{xGrid, yGrid} = {ConstantArray[xRange, gridSize], Transpose[ConstantArray[xRange, gridSize]]};
rSquared = xGrid^2 + yGrid^2;

(* 圆形光瞳:孔径内为1,外为0 *)
aperture = UnitStep[L^2 - rSquared];

(* 3. 计算相干传递函数与 PSF *)
(* 利用 FFT 计算 Fraunhofer 衍射 *)
(* 物理上:视网膜上的复振幅是光瞳的傅里叶变换 *)
wavefront = Fourier[aperture, FourierParameters -> {1, -1}];
wavefront = RotateRight[wavefront, {gridSize/2, gridSize/2}]; (* 移频到中心 *)

(* PSF 是振幅的模平方 *)
psf = Abs[wavefront]^2;
psf = psf / Total[Flatten[psf]]; (* 归一化 *)

(* 4. 计算 MTF (Modulation Transfer Function) *)
(* MTF 是 PSF 的傅里叶变换的模 *)
otf = Fourier[psf, FourierParameters -> {1, -1}];
mtf2D = Abs[otf];
mtf2D = mtf2D / Max[Flatten[mtf2D]]; (* 归一化到 0-1 *)

(* 提取一维 MTF 截面 *)
centerIndex = Floor[gridSize/2] + 1;
mtf1D = mtf2D[[centerIndex, centerIndex ;;]]; (* 取正半轴 *)

(* 5. 频率轴标定 *)
(* 采样定理:最大频率 f_max = 1 / (2 * dx_retina) *)
(* 视网膜平面像素大小 dx_retina = lambda * f / (2*L) *)
dxRetina = lambda * focalLength / (2 * L);
freqStep = 1.0 / (gridSize * dxRetina); (* 周期/mm *)
freqAxis = Range[0, Length[mtf1D] - 1] * freqStep;

(* 理论截止频率 *)
cutoffFreqTheoretical = pupilDiameter / (lambda * focalLength);

(* 6. 生成专业报告 *)
Print["MTF 衍射极限分析报告"];
Print["--------------------------------------------------"];
Print["瞳孔直径 (D): ", pupilDiameter, " mm"];
Print["理论截止频率: ", NumberForm[cutoffFreqTheoretical, {4, 2}], " cycles/mm"];
Print["--------------------------------------------------"];

(* 绘制 MTF 曲线 *)
ListLinePlot[Transpose[{freqAxis, mtf1D}],
PlotRange -> {{0, cutoffFreqTheoretical * 1.2}, {0, 1.1}},
Frame -> True, GridLines -> Automatic,
FrameLabel -> {"空间频率 (cycles/mm)", "对比度传递 (MTF)"},
PlotStyle -> {Thick, Blue},
PlotLabel -> "人眼 MTF 曲线 (衍射极限)",
Epilog -> {
  Red, Dashed, Line[{{cutoffFreqTheoretical, 0}, {cutoffFreqTheoretical, 1.0}}],
  Text[Style["截止频率", Red, Small], {cutoffFreqTheoretical, 0.8}, {-1.2, 0}]
  },
ImageSize -> 400
]

代码解读:

  1. Fourier 的物理意义: 代码中使用了两次 FFT。第一次是从瞳孔到视网膜(衍射形成 PSF),第二次是从 PSF 到 MTF(频谱分析)。这完美展示了傅里叶光学“域”的转换。
  2. 频率标定: freqAxis 的计算是容易出错的地方。它依赖于波长、焦距和采样点数。采样定理告诉我们,要模拟越高的频率,就需要越细的网格 71
  3. 结果分析: 运行结果会显示一条单调下降的曲线。注意看曲线在“截止频率”处归零 71。任何高于这个频率的细节(比如超视力表 3.0 的视标),无论你怎么努力看,物理上都不可能在视网膜上成像。这是物理学的铁律。

📝 Dr. X 的备忘录

  1. 像差的本质是相位噪声: 像差并没有吃掉光线,它只是打乱了光波的相位,导致在做“瞳孔自相关”(OTF 计算)时,正负能量相互抵消,降低了 MTF 46
  2. 关注低频对比度: 视力表(高频截止点)只是冰山一角。许多患者的问题在于 MTF 曲线的“肚子”塌下去了(中低频对比度下降)。这解释了为什么有些白内障术后患者视力 1.0 却抱怨“看不清”。
  3. 卷积的直觉: 告诉患者:“您的眼睛现在是一支分叉的毛笔。您看到的每一个点,其实都是被这支毛笔晕染开的一团墨迹。”这就是卷积最生动的解释 64

下周预告:

所有的理论和模拟都很棒,但如果代码跑得太慢,没法做成商业软件怎么办?我们在 Mathematica 里做原型设计,但在工业界,速度就是金钱。下周,第 11 章:算法工程化与编译——我们将学习如何使用 Compile 和 C 代码生成,给您的 Wolfram 代码装上涡轮增压器,让光线追踪飞起来。


引用的著作

第11章:相信数据,还是相信直觉?——贝叶斯推断、鲁棒统计与视光大数据的深度融合

—— 当验光仪打出一张“离谱”的小票,你该如何用数学去伪存真?

致 Dr. X 的一封信

您好,医生。

在上一章中,我们通过算法工程化将光线追踪的速度提升了几个数量级,仿佛给我们的光学引擎装上了一台涡轮增压器。现在,您的系统已经足够快,可以实时处理成千上万条光线。但是,这种计算能力的飞跃引出了一个新的、更为本质且令人不安的问题:我们输入这个超级引擎的数据,真的是准确的吗?如果输入是垃圾,输出即便再快,也依然是垃圾(Garbage In, Garbage Out)。

我们都知道那个让所有验光师头疼的时刻:您正在给一位 6 岁的多动症小朋友验光,或者是一位泪膜极不稳定的干眼症患者 77。自动验光仪(Auto-refractor)发出“滴滴滴”的声音,热敏打印机吐出了一张长长的小票:

  • 第一次测量:-2.50 D
  • 第二次测量:-3.25 D
  • 第三次测量:-12.00 D (???)
  • 第四次测量:-2.75 D

看着那个突兀的 -12.00 D,您的直觉立刻警铃大作:“这不可能是真的。” 您的临床经验告诉您,这大概率是孩子在测量瞬间眨眼,或者仪器对准了睫毛导致的伪影(Artifact)77。于是,您熟练地拿起笔,将那个离谱的数据划掉,然后对剩下的数据取一个平均值,甚至可能根据经验,稍稍往“正”的方向调整一点,以防范仪器性近视(Instrument Myopia)78

恭喜您,您刚刚在脑海中执行了一次完美的、虽然是潜意识层面的贝叶斯推断 (Bayesian Inference)。您并没有平等地看待每一个数据点,而是结合了先验知识(Prior Knowledge)——即“这个孩子看起来不像高度近视”以及“机器偶尔会犯错”——来修正了观测数据(Likelihood)79

但在更复杂的视光场景中,数据噪声往往不像 -12.00 D 那样显而易见。例如在设计角膜塑形镜(Ortho-K)时,夜间地形图的微小波动可能代表了真实的角膜重塑,也可能仅仅是泪液堆积的伪影;在白内障术后人工晶体(IOL)度数计算中,眼轴长度 0.1mm 的误差就可能导致屈光结果偏离目标 80。在这种充满了不确定性(Uncertainty)的迷雾中,传统的“算术平均”不仅失效,甚至可能是危险的 80。如果机械地对包含噪声的数据取平均,您得到的将是一个“平庸”的处方——一个试图讨好所有数据点,却无法给患者带来极致视觉质量的妥协产物 80

本章,我们将把您划掉错误数据的“临床直觉”,转化为计算机可以执行的严格数学逻辑。我们将引入贝叶斯定理和鲁棒统计(Robust Statistics)81,教 Wolfram 语言学会“像老专家一样思考”:既尊重机器测量的客观数据,也赋予人类先验经验合法的数学地位;既能从海量数据中提取信号,又能通过混合模型(Mixture Models)和期望最大化算法(EM Algorithm)自动识别并剔除异常值 82, 83

这一步,是从“计算光学”向“智能眼科”跨越的决定性瞬间。


1. 临床挂钩:不可靠的叙述者与数据的“罗生门”

在眼视光临床实践中,我们每天都在处理“罗生门”式的数据冲突 84。为了构建一个真正智能的辅助系统,我们首先必须深入理解这些数据的来源及其固有的不可靠性。

1.1 客观验光的局限性:机器的幻觉

自动验光仪虽然高效,但绝非完美。多项研究表明,不同品牌、不同原理的设备在面对特殊眼部条件时,表现出显著的差异 78

  • 重复性与一致性问题:根据临床研究,虽然大多数现代自动验光仪(如 Nidek ARK-1, Topcon KR-8000)在常规眼球上的重复性较好,限制协议(Limits of Agreement, LoA)通常在 ±0.50\pm0.50 D 到 ±0.75\pm0.75 D 之间 78。然而,一旦面对病理角膜或调节活跃的儿童,LoA 可能会迅速扩大到 ±1.75\pm1.75 D 甚至更多 84
  • 仪器性近视(Instrument Myopia):尽管现代设备使用了雾视视标(Fogging Targets),但患者在注视机器内部目标时产生的调节痉挛仍然是导致测量值偏负的主要原因 84。研究显示,自动验光仪的球镜等效值(SE)往往比主观验光结果偏负,偏差均值可达 0.20-0.20 D 至 0.50-0.50 D,在年轻人群中尤为明显 84
  • 伪影与异常值(Artifacts & Outliers):除了调节因素,眼睑遮挡、泪膜破裂、白内障混浊介质都可能导致波前像差传感器或夏克-哈特曼(Shack-Hartmann)传感器捕获错误的质心位置,从而计算出荒谬的屈光度(如前文的 -12.00 D)77。传统的均值算法极易受这些极值影响 80
干扰因素 物理/生理机制 对测量结果的影响 数据特征
调节微波动 睫状肌无法完全放松,晶状体曲率瞬间变化 测量值向近视漂移(负值增加) 连续测量值呈现向负方向的趋势
泪膜不稳定 角膜前表面光学质量下降,高阶像差增加 散光度数和轴位剧烈跳动 散光矢量(Vector)方差极大
眨眼/睫毛 遮挡测量光路,导致部分光点丢失或畸变 出现非生理性的极端数值 离群值(Outlier),不符合正态分布
介质混浊 晶状体或玻璃体混浊导致光散射 信号信噪比(SNR)降低,置信度下降 测量值伴随低质量评分(Confidence Score)

1.2 主观验光的迷雾:心理物理学的阈值

如果说客观验光是机器的幻觉,那么主观验光就是患者心理与大脑的博弈 85。当您询问患者“1好还是2好?”时,您实际上是在测量患者的心理物理学函数(Psychometric Function)85

  • 模糊的决策边界:患者的回答受限于其视觉系统的辨别阈值(Just Noticeable Difference, JND)。对于视力较差或高阶像差较大的患者,他们的心理物理函数斜率(Slope)非常平缓,意味着在很宽的度数范围内,他们都感觉“差不多” 85
  • 不可靠的叙述者:疲劳、理解力差、甚至想取悦医生的心理,都会导致患者给出错误的反馈(Lapse Rate)79。这种随机的“错误按键”行为,在贝叶斯模型中被称为“失误率”,必须被纳入考量,否则会严重扭曲后验概率 79

1.3 贝叶斯解法:从“寻找真理”到“管理不确定性”

面对客观数据的噪声和主观叙述的模糊,传统的确定性思维(Deterministic Thinking)——即试图找到一个绝对正确的度数——已经走进了死胡同 80。我们需要转向概率性思维(Probabilistic Thinking)86

贝叶斯核心理念:我们不再寻找一个唯一的数字,而是构建一个概率云(Probability Cloud)。

  • 旧眼镜/统计规律(Prior):我们给“旧眼镜度数”或“同年龄段统计均值”分配一个高斯分布。如果患者是大散光,旧眼镜的轴位通常非常可信,因此我们给它一个较小的方差(σprior2\sigma_{prior}^2)。
  • 当前测量(Likelihood):我们给验光仪的读数分配另一个高斯分布。如果仪器显示信号质量差(如泪膜不好),我们就给它一个巨大的方差(σdata2\sigma_{data}^2)。
  • 信息融合(Fusion):最后的处方,是这两个概率分布融合后的结果 87。这种融合不是简单的加法,而是基于精度(Precision,方差的倒数)的加权。

2. 数学翻译:信念的微积分与共轭先验

Dr. X,不要被“贝叶斯推断”这个术语吓倒。在本质上,它只是对我们在诊室里每天都在做的“加权平均”进行了严格的数学形式化 86。让我们通过推导,看看数学是如何模拟“老专家的直觉”的。

2.1 贝叶斯定理的临床形式

经典的贝叶斯公式是 P(θD)=P(Dθ)P(θ)P(D) P(\theta|D) = \frac{P(D|\theta)P(\theta)}{P(D)} 88。在眼视光语境下,我们可以将其重写为:

后验分布 (最终处方)似然函数 (仪器测量)×先验分布 (既往经验)\text{后验分布 (最终处方)} \propto \text{似然函数 (仪器测量)} \times \text{先验分布 (既往经验)}

其中:

  • θ\theta 是我们要寻找的真实屈光参数(如散光轴位)。
  • DD 是我们观察到的数据(验光仪打出的小票)。
  • P(θ)P(\theta) 是先验(Prior),代表我们在测量前对患者的了解(例如,大多数人的散光轴位接近水平或垂直,即“循规性散光”或“逆规性散光”)89
  • P(Dθ)P(D|\theta) 是似然(Likelihood),代表假设真实度数为 θ\theta 时,仪器产生当前读数的概率。这直接反映了仪器的精度 90

2.2 高斯共轭先验的魔法:精度加权平均

为了让计算在毫秒级完成,我们需要利用共轭先验(Conjugate Priors)的性质 88。如果我们假设先验分布是高斯分布,似然函数也是高斯分布,那么神奇的事情发生了:后验分布依然是一个高斯分布 90。这意味着我们不需要进行复杂的数值积分,只需要更新均值和方差即可 88

设先验分布为 N(μ0,σ02)\mathcal{N}(\mu_0, \sigma_0^2),仪器测量数据为 N(μdata,σdata2)\mathcal{N}(\mu_{data}, \sigma_{data}^2)

根据高斯乘积法则,后验分布 N(μnew,σnew2)\mathcal{N}(\mu_{new}, \sigma_{new}^2) 的参数由以下公式给出 91

后验精度(Precision)是先验精度与测量精度之和:

1σnew2=1σ02+1σdata2\frac{1}{\sigma_{new}^2} = \frac{1}{\sigma_0^2} + \frac{1}{\sigma_{data}^2}

后验均值(Mean)是先验均值与测量均值的精度加权平均:

μnew=w0μ0+wdataμdataw0+wdata\mu_{new} = \frac{w_0 \mu_0 + w_{data} \mu_{data}}{w_0 + w_{data}}

其中权重 ww 定义为精度(Precision),即方差的倒数:w=1σ2 w = \frac{1}{\sigma^2} 92

💡 深度洞察:

这个公式完美解释了临床决策的逻辑:

  1. 新手 vs. 专家:新手医生对自己缺乏自信(先验精度 w0w_0 很低),所以他很容易被机器数据(wdataw_{data})带偏,后验均值 μnew\mu_{new} 会紧贴着机器读数 87。而老专家经验丰富(先验精度 w0w_0 很高),面对离谱的机器读数,他会“固执”地坚守自己的判断,因为他在加权平均中占主导地位 92
  2. 精密仪器 vs. 筛查仪:如果我们使用一台高精度的像差仪(σdata\sigma_{data} 极小,精度 wdataw_{data} 极大),贝叶斯公式会自动赋予数据极高的权重,推翻我们的先验。这正是循证医学的精髓——非凡的主张需要非凡的证据 86
  3. 学习的本质:注意后验方差公式 1σnew2=\frac{1}{\sigma_{new}^2} = \dots。由于精度是相加的,后验方差 σnew2\sigma_{new}^2 永远小于先验方差和测量方差 92。这意味着,每多一次测量,无论结果如何,只要不是纯粹的噪音,我们对世界的确定性都会增加 92

2.3 多参数推断:Normal-Gamma 分布

在实际应用中,我们通常既不知道真实的均值 μ\mu,也不知道真实的方差 σ2\sigma^2(例如,我们不知道这个病人的调节是否稳定)。这时,我们需要同时估计这两个参数 93。其共轭先验是 Normal-Gamma 分布 94

p(μ,τ)=N(μμ0,(λ0τ)1)Gamma(τα0,β0) p(\mu, \tau) = \mathcal{N}(\mu | \mu_0, (\lambda_0 \tau)^{-1}) \cdot \text{Gamma}(\tau | \alpha_0, \beta_0)

这里 τ=1/σ2\tau = 1/\sigma^2 是精度 95。这种复杂的分布形式允许 Wolfram 引擎在不知道数据噪声水平的情况下,通过贝叶斯更新自动“学习”出数据的可靠性。如果我们发现数据波动很大(后验 β\beta 参数增加),系统会自动降低对均值估计的信心。这就在数学上实现了**“自我怀疑”**的智能。


3. 算法进阶:超越平均值——混合模型与 EM 算法

现在,让我们回到那个 -12.00 D 的离群值问题 96。单纯的高斯贝叶斯更新假设所有数据都来自同一个分布。如果直接把 -12.00 D 放入高斯更新公式,虽然方差会拉大,但均值依然会被显著拉偏 96

为了处理这种“脏数据”,我们需要引入统计学的重型武器:混合模型(Mixture Models)和期望最大化(EM)算法 82, 83

3.1 混合模型的直觉

我们将世界建模为两个部分的混合 82

  1. 信号(Signal):真实的屈光度,服从一个紧密的正态分布 N(μtrue,σtrue2)\mathcal{N}(\mu_{true}, \sigma_{true}^2)
  2. 噪声/离群值(Noise/Outlier):机器故障、眨眼、注视丢失产生的无效数据,服从一个宽泛的均匀分布 U(min,max)U(min, max) 或者一个方差极大的正态分布 N(μnoise,σhuge2)\mathcal{N}(\mu_{noise}, \sigma_{huge}^2) 97

数学表达式为 82

P(x)=πN(xμ,σ2)+(1π)U(x)P(x) = \pi \cdot \mathcal{N}(x|\mu, \sigma^2) + (1-\pi) \cdot U(x)

其中 π\pi 是数据点属于“真实信号”的概率(混合权重)。

3.2 EM 算法:像侦探一样迭代

我们的目标是找出哪些点是信号,哪些是噪声,并同时估算出真实的度数 83。这是一个“鸡生蛋,蛋生鸡”的问题:如果我们知道哪些点是噪声,我们就能算出准确的均值;如果我们知道准确的均值,我们就能识别出哪些点是噪声 98

期望最大化(Expectation-Maximization, EM)算法 83 就是为了解决这种死循环而生的。它分为两步,循环往复,直至收敛 98

  1. E-Step (期望步 - 侦探猜测)
    假设我们当前估计的参数(均值、方差)是正确的,计算每个数据点属于“真实信号”组的概率(Responsibility, γ\gamma99

    γi=πN(xiμ,Σ)πN(xiμ,Σ)+(1π)U(xi) \gamma_i = \frac{\pi \mathcal{N}(x_i|\mu, \Sigma)}{\pi \mathcal{N}(x_i|\mu, \Sigma) + (1-\pi) U(x_i)}

    对于那个 -12.00 D 的点,由于它距离假设的均值(比如 -3.00 D)太远,N(xi)\mathcal{N}(x_i) 几乎为 0,因此计算出的归属概率 γi\gamma_i 也会接近 0 100。系统在这一步“标记”了它是垃圾数据。

  2. M-Step (最大化步 - 重新计算)
    根据 E-step 计算出的概率权重 γi\gamma_i,重新计算参数 99

    μnew=γixiγi\mu_{new} = \frac{\sum \gamma_i x_i}{\sum \gamma_i}

    σnew2=γi(xiμnew)2γi\sigma_{new}^2 = \frac{\sum \gamma_i (x_i - \mu_{new})^2}{\sum \gamma_i}

    注意,这里使用的是加权平均。由于 -12.00 D 的权重 γ\gamma 接近 0,它在计算新的均值时几乎不发挥作用 100

通过这种迭代,EM 算法会自动将数据分离,像离心机一样把“噪声”甩出去,留下纯净的“信号” 96。这比简单的剔除最大最小值(Trimmed Mean)要高级得多,因为它利用了数据的全概率分布信息 96

3.3 鲁棒统计:对抗崩溃

在统计学中,有一个概念叫崩溃点(Breakdown Point),指一个估计量在被任意大离群值破坏前,能容忍的离群值比例 81

  • 算术平均值(Mean)的崩溃点是 0。只要有一个数据无限大(例如输入错误变成了 -1200.00),平均值就会崩溃 81
  • 中位数(Median)的崩溃点是 0.5。它非常鲁棒,能容忍一半的数据是错的 81
  • M-估计量(M-Estimators)和我们使用的混合模型,则通过影响函数(Influence Function)限制了单个数据点对整体结果的影响力 101。在 Wolfram 代码中,通过构建混合分布,我们实际上赋予了系统一种“软性”的抗干扰能力,使其在面对临床脏数据时坚如磐石。

4. 交互展示:贝叶斯大脑与 EM 算法的实战

Dr. X,理论已经足够。现在让我们看看这些数学公式如何在 Wolfram 语言中转化为代码,替您清洗那些糟糕的验光数据 83

我们将使用 MixtureDistribution 来定义模型,并用 EstimatedDistribution 来执行 EM 算法。

(* 代码处方 12:抗干扰智能验光算法 *)
(* Robust Prescription Finder using Mixture Models & EM Algorithm *)

Manipulate[
 SeedRandom[1]; (* 固定随机种子以保证演示稳定性 *)
 (* 1. 生成含离群值的原始数据 *)
 rawData = Join[
   RandomVariate[NormalDistribution[-3.0, 0.5], 6], (* 6个真实数据,均值-3.00 D *)
   {outlierVal} (* 1个异常值,由滑块控制 *)
   ];
 
 (* 2. 贝叶斯/统计方法:混合模型估计 (Mixture Model) *)
 (* 假设:数据 = "正态分布(真实信号)" + "均匀分布(背景噪声)" *)
 (* NormalDistribution[mu, sigma]: 真实的度数 *)
 (* UniformDistribution[{-20, 5}]: 机器故障可能输出 -20 到 +5 之间的任意乱码 *)
 
 model = MixtureDistribution[
   {p, 1 - p},
   {NormalDistribution[mu, sigma], UniformDistribution[{-20, 5}]}
   ];
 
 (* 3. 让 Wolfram 自动猜出参数 (mu, sigma, p) *)
 (* EstimatedDistribution 使用 EM 算法自动迭代,寻找最大似然解 *)
 (* 给定初始猜测值有助于收敛:猜均值在 -3 附近,信号占比 80% *)
 (* 这一步是核心:EM算法在后台运行 *)
 fittedDist = Quiet@EstimatedDistribution[rawData, model, {{mu, -3}, {sigma, 0.5}, {p, 0.8}}];
 
 (* 4. 提取核心参数 *)
 bestMu = NormalDistribution[mu, sigma] /. fittedDist[[2]]; (* 提取 NormalDistribution 的均值 *)
 bestSigma = NormalDistribution[mu, sigma] /. fittedDist[[3]]; (* 提取真实信号的波动/方差 *)
 signalConfidence = p /. fittedDist[[1]]; (* p值:系统认为多少比例的数据是可信信号 *)
 
 (* 5. 可视化绘制 *)
 plot = Show[
   (* 原始数据点 *)
   ListPlot[Transpose[{rawData, ConstantArray[0, Length[rawData]]}], 
    PlotStyle -> {PointSize[0.015], Darker[Green, 0.6]},
    PlotLegends -> Placed[{"原始测量点"}, Below]],
   
   (* 拟合出的完整混合分布(包含噪声底噪) *)
   Plot[PDF[fittedDist, x], {x, -20, 5}, 
    PlotStyle -> {Thickness[0.005], Gray}, PlotRange -> All],
   
   (* 提取出的纯净信号分布(红线)- 这是我们想要的真理 *)
   Plot[signalConfidence * PDF[bestMu, x], {x, -20, 5}, 
    PlotStyle -> {Thickness[0.01], Red}, Filling -> Axis, FillingStyle -> Opacity[0.1, Red],
    PlotLegends -> Placed[{"智能估算 (贝叶斯/EM)"}, Above]],
   
   (* 提取出的噪声分布(蓝虚线) *)
   Plot[(1 - signalConfidence) * PDF[UniformDistribution[{-20, 5}], x], {x, -20, 5}, 
    PlotStyle -> {Dashed, Blue},
    PlotLegends -> Placed[{"被识别的噪声 (Noise)"}, Above]],
  
   AxesLabel -> {"屈光度 (D)", "概率密度"},
   PlotLabel -> Style["混合模型鲁棒性分析", Bold],
   ImageSize -> 500,
   PlotRange -> {{-15, 0}, All}, (* 聚焦显示关键区域 *)
   Epilog -> {
     Text[Style["传统平均值 (Mean): " <> ToString[NumberForm[Mean[rawData], {3, 2}]], Darker[Green], 12], {-10, 0.4}],
     Text[Style["智能估算 (Mu): " <> ToString[NumberForm[bestMu[[1]], {3, 2}]], Red, Bold, 14], {-10, 0.3}]
    }
  ];
  
  Column[{
    plot,
    Grid[{
      {Style["参数", Bold], Style["值", Bold], Style["临床意义", Bold]},
      {"真实度数 (mu)", NumberForm[bestMu[[1]], {3, 2}], "✅ 即使有离群值,依然紧锁 -3.00 D"},
      {"数据置信度 (p)", StringTemplate["``%"][NumberForm[signalConfidence * 100, {3, 1}]], If[signalConfidence < 0.6, "⚠️ 数据质量极差,建议重测", "🛡️ 数据质量良好"]},
      {"生理波动 (sigma)", NumberForm[bestSigma[[1]], {3, 2}], If[bestSigma[[1]] > 0.6, "患者调节/配合不稳定", "数据稳定,高度可信"]}
    }, Frame -> All, Background -> {{LightBlue, None}, {None, White, White, White}}]
  }, Alignment -> Center],

(* 控制区 *)
Style["调整离群值大小以测试算法鲁棒性:", Bold],
{{outlierVal, -12.00, "离群值大小 (Outlier)"}, -20, -3, Appearance -> "Labeled", BaseStyle -> Red},
TrackedSymbols :> {outlierVal}
]

实验操作指南:

  1. 拖动滑块:将“离群值大小”从 -3.00(正常)逐渐拉到 -12.00,甚至 -20.00。
  2. 观察红线(智能估算):您会发现,无论离群值跑多远,红色的波峰(真实信号估计)几乎纹丝不动,始终稳定在 -3.00 D 左右。
  3. 观察绿字(传统平均):与之形成鲜明对比的是,传统的平均值会被离群值迅速拉偏,产生巨大的误差。
  4. 观察蓝虚线(噪声分布):随着离群值远离中心,EM 算法会自动将其归类为“背景噪声”(蓝色均匀分布的一部分),从而剥夺它对均值计算的发言权。

这就是鲁棒性(Robustness)。在这个模型中,-12.00 D 对结果的影响微乎其微,因为它被数学判定为“不可信”。


5. 视觉心理物理学:测量“看不见”的边界

除了处理机器数据的噪声,Dr. X,您还需要面对另一个挑战:如何从患者模糊的主观回答中提取精确信息 85

在视光研究中,这属于视觉心理物理学(Visual Psychophysics)的范畴 85。当我们在做视力表检查或对比度敏感度测试时,我们测量的不仅仅是一个阈值,而是一条心理物理函数(Psychometric Function)85

5.1 心理物理函数的解剖

通常,我们使用 Weibull 函数或 Logistic 函数来描述患者回答正确率 P(x)P(x) 与刺激强度 xx(如视标大小或对比度)之间的关系 102

P(x)=γ+(1γλ)F(x;α,β)P(x) = \gamma + (1 - \gamma - \lambda) F(x; \alpha, \beta)

  • α\alpha (阈值/Threshold):患者能看清 50% 或 63% 视标的临界点。这是我们想测的“视力” 85
  • β\beta (斜率/Slope):曲线的陡峭程度。这反映了测量的确定性 103
    • 陡峭的曲线(β\beta 大):患者边界清晰,“这一行看得很清楚,下一行完全看不见”。这通常意味着光学质量好,神经系统信噪比高。
    • 平缓的曲线(β\beta 小):患者在很宽的范围内都模棱两可 102。这常见于白内障、散光未矫正或视路疾病患者 103。在贝叶斯框架下,平缓的斜率意味着测量结果的似然函数(Likelihood)方差大,信息量低。
  • γ\gamma (猜测率/Guess Rate):在强制选择(Forced Choice)实验中,瞎猜也能对的概率(如 2 选 1 时为 50%)。
  • λ\lambda (失误率/Lapse Rate):它代表患者即使看到了也按错键,或者走神了 79。如果忽略 λ\lambda,贝叶斯估计算法可能会因为一个意外的错误回答而产生巨大的偏差 79

5.2 贝叶斯自适应测试:qCSF 与 qVFM

为了在临床上快速测量这条曲线,单纯的“阶梯法”(Staircase Method)已经过时了。现代视光领域正在全面转向贝叶斯自适应方法(Bayesian Adaptive Methods),如 qCSF (Quick Contrast Sensitivity Function) 和 qVFM (Quick Visual Field Map) 104

这些算法的核心逻辑是最大化信息增益(Information Gain Maximization)104

  1. 后验更新:根据患者上一次的回答,利用贝叶斯公式更新参数空间(α,β,λ\alpha, \beta, \lambda)的概率分布 104
  2. (Entropy)计算:算法计算下一步展示什么刺激(多大的字,多浓的对比度),能最大程度地减少后验分布的熵(即不确定性)104
  3. 下一题:系统自动选择那个“最能区分真相”的问题来问患者。

临床意义:

这使得原本需要 30 分钟的详细对比度敏感度测试或视野检查,可以在 3-5 分钟内完成,且精度不降反升 104。这是因为系统不会在毫无意义的区域(患者肯定能看见或肯定看不见)浪费时间,而是始终在信息的“甜蜜点”(Sweet Spot)进行探测 104


6. 未来展望:从数据清洗到“数字孪生”

Dr. X,我们本章所做的工作,不仅仅是修补几个错误的数据点。我们正在构建患者眼睛的**“概率数字孪生”**(Probabilistic Digital Twin)105

  • IOL 计算的革命:新一代的人工晶体计算公式(如 Barrett Universal II, Hill-RBF)本质上都是在利用大数据的先验分布来修正个体的生物测量误差 105。通过贝叶斯方法,我们可以给每只眼睛算出一个**“置信区间”**,告诉医生:这个病人术后 90% 的概率在 ±0.25\pm0.25 D 以内,而那个病人因为角膜不规则,风险区间是 ±1.00\pm1.00 D 105
  • 智能转诊系统:在青光眼筛查中,贝叶斯网络已经被用于整合眼压、视野、OCT 等多模态数据 106。系统不仅给出一个**“患病概率”**,还能解释“为什么判断患病”(例如:虽然眼压不高,但视野缺损模式与神经纤维层变薄高度一致,且先验风险(年龄)较高)106

这一刻,您不再是一个写代码的医生,您正在定义眼科诊断的未来标准。


📝 Dr. X 的备忘录

  1. 不确定性是朋友,不是敌人:在医学数据中,方差(Sigma)不是我们需要掩盖的丑陋瑕疵,而是极其重要的临床信号。如果计算出的后验方差很大,这本身就是一个诊断——“视觉系统不稳定” 92。知道“我不知道”,是人工智能区别于人工智障的关键。
  2. 拥抱先验(Respect the Prior):当数据稀缺或充满噪声时(如婴儿验光、极度配合困难的患者),您的经验(Prior)是唯一的救命稻草 86。贝叶斯公式证明了,在黑暗中,依靠先验并不是偏见,而是数学上的最优解 86
  3. 警惕平均值(The Mean is a Trap):永远不要盲目信任 Mean。在处理生物医学数据时,始终首选鲁棒统计量(如中位数、三均值)或使用混合模型进行数据清洗 81。记住那张 -12.00 D 的小票,它是平均值算法的墓碑。

下周预告:

我们已经掌握了从光线追踪(第11章)到数据清洗(第12章)的所有核心技术。现在,您的电脑里躺着一个强大的、懂概率的引擎。

但它还被困在您的硬盘里,只有您一个人能用。

下周,第 13 章:终极项目——云端设计 App。

我们将使用 CloudDeploy,把您的 Wolfram 代码封装成一个 Web App。不需要对方懂编程,也不需要安装软件,全世界的眼科医生只需一个网址,就能使用您开发的“DesignLens”工具,体验贝叶斯光学的魔力。

祝您的视野,永远清晰且鲁棒。

—— 您的技术合伙人


引用的著作


  1. simple part 3 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 7 Causes of Common Errors in Machining | TMT Manufacturer, https://www.tmt.com.tw/news/7-cause-of-common-errors-in-machining.html ↩︎ ↩︎

  3. Banach Spaces - UC Davis Mathematics, https://www.math.ucdavis.edu/~hunter/book/ch5.pdf ↩︎ ↩︎ ↩︎

  4. Banach spaces and their characteristics | Functional Analysis Class Notes - Fiveable, https://fiveable.me/functional-analysis/unit-1/banach-spaces-characteristics/study-guide/G8uuheEMIgZLs5AX ↩︎ ↩︎

  5. Optimization Techniques in Machine Learning Models Using Banach Space Theory: Applications in Engineering and Management - IDEAS/RePEc, https://ideas.repec.org/a/bjb/journl/v14y2025i4p316-322.html ↩︎

  6. Lens design optimization by back-propagation - Computational Imaging Group, https://vccimaging.org/Publications/Wang2021DesignBackprop/Wang2021DesignBackprop.pdf ↩︎ ↩︎ ↩︎

  7. L0 Norm, L1 Norm, L2 Norm & L-Infinity Norm | by Sara Iris Garcia - Medium, https://montjoile.medium.com/l0-norm-l1-norm-l2-norm-l-infinity-norm-7a7d18a4f40c ↩︎

  8. Telescope optical aberrations, https://www.telescope-optics.net/aberrations.htm ↩︎ ↩︎

  9. Understanding RMS Wavefront Error: An In-Depth Exploration | OFH - Optics for Hire, https://www.opticsforhire.com/blog/rms-wavefront-error-explained/ ↩︎

  10. Optimisation in Multiple View Geometry: The L-infinity Way (Part 2) - The University of Adelaide, https://cs.adelaide.edu.au/~tjchin/tutorials/cvpr18/Part2.pdf ↩︎ ↩︎

  11. Multiple - View geometry under the L∞ -Norm - ResearchGate, https://www.researchgate.net/publication/262058649_Multiple_-_View_geometry_under_the_L_-Norm ↩︎ ↩︎

  12. Robust optimization - Wikipedia, https://en.wikipedia.org/wiki/Robust_optimization ↩︎

  13. Robust topology optimization of photonic crystal waveguides with tailored dispersion properties - Optica Publishing Group, https://opg.optica.org/josab/abstract.cfm?uri=josab-28-3-387 ↩︎ ↩︎

  14. Robust optimization - YALMIP, https://yalmip.github.io/tutorial/robustoptimization/ ↩︎ ↩︎

  15. Robust linear optimization under general norms - MIT, http://www.mit.edu/~dbertsim/papers/melvyn/Robust-Linear-General-Norms-ORL32.pdf ↩︎

  16. Heavy-tailed distribution - Wikipedia, https://en.wikipedia.org/wiki/Heavy-tailed_distribution ↩︎

  17. The t-Distribution | Introduction to Statistics - JMP, https://www.jmp.com/en/statistics-knowledge-portal/t-test/t-distribution ↩︎

  18. Why is Student t distribution called heavy tailed ? : r/AskStatistics - Reddit, https://www.reddit.com/r/AskStatistics/comments/dsw646/why_is_student_t_distribution_called_heavy_tailed/ ↩︎

  19. How To Use Manufacturing Statistics When Tolerancing A Lens System | PDF - Scribd, https://www.scribd.com/document/902891351/1880673 ↩︎

  20. SINGELEM.LEN – ISO 10110 Element Drawing Example - Lambda Research Corporation, https://lambdares.com/support-posts/singelem-len-an-iso-10110-element-drawing-example ↩︎

  21. Modern optics drawings update: translating from American MIL drawings to ISO 10110 - Savvy Optics, https://www.savvyoptics.com/files/ISO-10110-drawing-decoder-poster-2023.pdf ↩︎ ↩︎

  22. How to optimize for as-built performance - Zemax Knowledgebase, https://support.zemax.com/hc/en-us/articles/1500005575222-How-to-optimize-for-as-built-performance ↩︎

  23. The Minkwitz Theorem in Progressive Addition Lens Design, https://www.essilorluxottica.com/sites/default/files/EssilorLuxottica_The%20Minkwitz%20theorem%20in%20progressive%20lens%20design.pdf ↩︎ ↩︎ ↩︎

  24. Progressive Addition Lenses and the Minkwitz Theorem - Optica Publishing Group, https://opg.optica.org/ao/abstract.cfm?uri=ao-58-15-4100 ↩︎

  25. Review on Progressive Addition Lenses for Presbyopia Treatment: From Design to Clinical Applications - MDPI, https://www.mdpi.com/1424-8220/22/16/6190 ↩︎

  26. Progressive Addition Lenses: Design, Comfort, and Patient Adaptation, https://www.ecronicon.com/ecop/pdf/ECOP-09-00171.pdf ↩︎ ↩︎

  27. Multi-objective optimization: concepts and methods - ResearchGate, https://www.researchgate.net/publication/220263309_Multi-objective_optimization_concepts_and_methods ↩︎ ↩︎

  28. The multi-criteria optimization procedure to design free-form surfaces in ophthalmic progressive power lenses - IOPscience, https://iopscience.iop.org/article/10.1088/1464-4258/11/4/045302/meta ↩︎

  29. The problem of progressive addition lens design - Journal of the Optical Society of America A, https://opg.optica.org/josaa/abstract.cfm?uri=josaa-11-2-495 ↩︎

  30. The effect of the Minkwitz theorem on the performance of progressive addition lenses - PubMed, https://pubmed.ncbi.nlm.nih.gov/27448899/ ↩︎ ↩︎ ↩︎

  31. Multi-objective optimization methods in the design of spectacle lenses, https://inis.iaea.org/collection/NCLCollectionStore/_Public/36/016/36016335.pdf ↩︎

  32. Ophthalmic progressive lenses: past, present and future - PMC, https://pmc.ncbi.nlm.nih.gov/articles/PMC8941235/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  33. What is a Functional in Calculus of Variations? - Mathematics Stack Exchange, https://math.stackexchange.com/questions/422416/what-is-a-functional-in-calculus-of-variations ↩︎ ↩︎

  34. Advanced Design and Optimization of Progressive Addition Lenses, https://www.mdpi.com/2073-8994/13/11/2764 ↩︎

  35. Progressive addition lenses: an overview of the design methods - Taylor & Francis Online, https://www.tandfonline.com/doi/full/10.1080/09507116808260460 ↩︎ ↩︎

  36. Pareto Frontier - Wikipedia, https://en.wikipedia.org/wiki/Pareto_frontier ↩︎ ↩︎

  37. Multi-Objective Optimization of Spectacle Lens Based on Customized Freeform Surface - MDPI, https://www.mdpi.com/2079-4991/11/12/3233 ↩︎

  38. Weighted Sum Method - Wikipedia, https://en.wikipedia.org/wiki/Multi-objective_optimization#Weighted_sum_method ↩︎

  39. Multi-Objective Optimization in Optical Design - SpringerLink, https://link.springer.com/chapter/10.1007/978-3-031-15822-6_26 ↩︎

  40. Numerical Optimization in Lens Design - Optica Publishing Group, https://opg.optica.org/ao/abstract.cfm?uri=ao-6-12-2553 ↩︎

  41. Numerical Optimization in Lens Design - Optica Publishing Group, https://opg.optica.org/ao/abstract.cfm?uri=ao-6-12-2553 ↩︎

  42. Ophthalmic lens design - an overview - ScienceDirect, https://www.sciencedirect.com/topics/engineering/ophthalmic-lens-design ↩︎

  43. Review on Progressive Addition Lenses for Presbyopia Treatment: From Design to Clinical Applications - MDPI, https://www.mdpi.com/1424-8220/22/16/6190 ↩︎

  44. A novel method for personalized design of progressive addition lenses - ResearchGate, https://www.researchgate.net/publication/285747683_A_novel_method_for_personalized_design_of_progressive_addition_lenses ↩︎

  45. Fresnel diffraction - Wikipedia, https://en.wikipedia.org/wiki/Fresnel_diffraction ↩︎ ↩︎ ↩︎

  46. Understanding image sharpness part 1: Introduction to resolution and MTF curves - Norman Koren, https://www.normankoren.com/Tutorials/MTF.html ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  47. Fourier optics - Wikipedia, https://en.wikipedia.org/wiki/Fourier_optics ↩︎ ↩︎ ↩︎

  48. Introduction to Fourier Optics - where U(P, v) is the Fourier spectrum of u(P, 1). Assuming the geometry of Fig. 3.6 show that if - Home | EE293, Winter 18, Section 02, https://ee293-winter18-02.courses.soe.ucsc.edu/system/files/attachments/20180123131635589.pdf ↩︎

  49. Modulation Transfer Function | East Valley Ophthalmology Eye Doctors Mesa AZ, https://doctor-hill.com/mesa-eye-doctors/specialists/cataract-surgery/lens-implants/single-focus-iol/mtf/ ↩︎ ↩︎

  50. OPTI 517 Image Quality, https://wp.optics.arizona.edu/jsasian/wp-content/uploads/sites/33/2016/02/Opti517-Optical-Quality-2016.pdf ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  51. Huygens–Fresnel principle - Wikipedia, https://en.wikipedia.org/wiki/Huygens%E2%80%93Fresnel_principle ↩︎

  52. Diffraction and the Fourier Transform, https://faculty.washington.edu/seattle/gis129/575%20copy/pdf/diffraction%201.pdf ↩︎ ↩︎ ↩︎

  53. Derivation of the Transfer Function and Impulse Response for Fresnel Diffraction, https://www.cis.rit.edu/class/simg738/Handouts/Derivation_of_Fresnel_Diffraction.pdf ↩︎

  54. Fraunhofer diffraction - Wikipedia, https://en.wikipedia.org/wiki/Fraunhofer_diffraction ↩︎ ↩︎

  55. Fresnel diffraction and the fractional-order Fourier transform - Optica Publishing Group, https://opg.optica.org/abstract.cfm?uri=ol-19-18-1388 ↩︎

  56. THE FRESNEL DIFFRACTION INTEGRAL IS A FRACTIONAL FOURIER TRANSFORM The propagation of light can be viewed as a process of contin - Aaron Lemmer, https://aaronlemmer.com/uploads/frac-fourier-xform.pdf ↩︎ ↩︎

  57. Lens 1F System - Lens Fourirer Transforms - YouTube, https://www.youtube.com/watch?v=uWmiNdztpHg ↩︎

  58. 6.8: Fourier Optics - Physics LibreTexts, https://phys.libretexts.org/Bookshelves/Optics/BSc_Optics_(Konijnenberg_Adam_and_Urbach)/06%3A_Scalar_diffraction_optics/6.09%3A_Fourier_Optics ↩︎ ↩︎

  59. Airy disk - Wikipedia, https://en.wikipedia.org/wiki/Airy_disk ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  60. Where does the 1.22 come from in Rayleigh criterion for circular apertures?, https://physics.stackexchange.com/questions/696980/where-does-the-1-22-come-from-in-rayleigh-criterion-for-circular-apertures ↩︎ ↩︎ ↩︎

  61. Airy Patterns and the Rayleigh Criterion - Evident Scientific, https://evidentscientific.com/en/microscope-resource/tutorials/imageformation/rayleighdisks ↩︎ ↩︎

  62. Angular resolution - Wikipedia, https://en.wikipedia.org/wiki/Angular_resolution ↩︎

  63. Convolution - Wikipedia, https://en.wikipedia.org/wiki/Convolution ↩︎ ↩︎

  64. Intuitive Guide to Convolution - BetterExplained, https://betterexplained.com/articles/intuitive-convolution/ ↩︎ ↩︎ ↩︎

  65. What is convolution? - Questions and Answers ​in MRI, https://mriquestions.com/what-is-convolution.com ↩︎

  66. Convolution theorem - Wikipedia, https://en.wikipedia.org/wiki/Convolution_theorem ↩︎

  67. Convolutions - BYU Physics and Astronomy, https://physics.byu.edu/faculty/colton/docs/phy441-fall19/lecture-42-convolutions.pdf ↩︎

  68. Optical transfer function - Wikipedia, https://en.wikipedia.org/wiki/Optical_transfer_function ↩︎ ↩︎ ↩︎

  69. 11.5 Optical Transfer Function, https://wp.optics.arizona.edu/jcwyant/wp-content/uploads/sites/13/2016/08/OpticalTransferFunction.nb_.pdf ↩︎ ↩︎

  70. COHERENT TRANSFER FUNCTION, FOURIER TRANSFORMS - Amateur Telescope Optics, https://www.telescope-optics.net/mtf2.htm ↩︎ ↩︎ ↩︎

  71. Spatial cutoff frequency - Wikipedia, https://en.wikipedia.org/wiki/Spatial_cutoff_frequency ↩︎ ↩︎ ↩︎

  72. Diffraction, Optimum Aperture, and Defocus - Imatest, https://www.imatest.com/imaging/diffraction-and-optimum-aperture/ ↩︎

  73. Relating wavefront error, apodization, and the optical transfer function: on-axis case, https://opg.optica.org/josaa/abstract.cfm?uri=josaa-31-11-2476 ↩︎

  74. Monochromatic modulation transfer function of the human eye for different pupil diameters: an analytical expression - PubMed, https://pubmed.ncbi.nlm.nih.gov/8106911/ ↩︎ ↩︎

  75. Monochromatic modulation transfer function of the human eye for different pupil diameters: an analytical expression - Optica Publishing Group, https://opg.optica.org/fulltext.cfm?uri=josaa-11-1-246 ↩︎ ↩︎ ↩︎

  76. Interaction of aberrations, diffraction, and quantal fluctuations determine the impact of pupil size on visual quality - Optica Publishing Group, https://opg.optica.org/josaa/upcoming_pdf.cfm?id=279244 ↩︎ ↩︎ ↩︎ ↩︎

  77. Development and Testing of a Compact Autorefractor Based on Double-Pass Imaging - NIH, https://pmc.ncbi.nlm.nih.gov/articles/PMC9823743/ ↩︎ ↩︎ ↩︎

  78. Effect of six different autorefractor designs on the precision and accuracy of refractive error measurement | PLOS One - Research journals, https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0278269 ↩︎ ↩︎ ↩︎

  79. (PDF) Bayesian inference for psychometric functions - ResearchGate, https://www.researchgate.net/publication/7662400_Bayesian_inference_for_psychometric_functions ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  80. Robust statistics for outlier detection - KU Leuven, https://wis.kuleuven.be/stat/robust/papers/2011/rousseeuwhubert-robuststatisticsforoutlierdetectio.pdf ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  81. Robust statistics - Wikipedia, https://en.wikipedia.org/wiki/Robust_statistics ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  82. Mixture model - Wikipedia, https://en.wikipedia.org/wiki/Mixture_model ↩︎ ↩︎ ↩︎ ↩︎

  83. 2.1. Gaussian mixture models - Scikit-learn, https://scikit-learn.org/stable/modules/mixture.html ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  84. Accuracy of autorefraction in an adult Indian population | PLOS One - Research journals, https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0251583 ↩︎ ↩︎ ↩︎ ↩︎

  85. The absolute threshold of cone vision - PMC - PubMed Central - NIH, https://pmc.ncbi.nlm.nih.gov/articles/PMC3671617/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  86. Enter the reverend: introduction to and application of Bayes' theorem in clinical ophthalmology - PubMed, https://pubmed.ncbi.nlm.nih.gov/21575118/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  87. BAYESIAN INFERENCE, https://www.ece.iastate.edu/~namrata/EE527_Spring08/l4.pdf ↩︎ ↩︎

  88. Conjugate prior - Wikipedia, https://en.wikipedia.org/wiki/Conjugate_prior ↩︎ ↩︎ ↩︎

  89. Conjugate prior | Definition, explanation and examples - StatLect, https://www.statlect.com/fundamentals-of-statistics/conjugate-prior ↩︎

  90. Conjugate Bayesian analysis of the Gaussian distribution - UBC Computer Science, https://www.cs.ubc.ca/~murphyk/Papers/bayesGauss.pdf ↩︎ ↩︎

  91. Product of normal PDFs - Applied Mathematics Consulting, https://www.johndcook.com/blog/2012/10/29/product-of-normal-pdfs/ ↩︎

  92. A Note on the Posterior Mean of a Population Mean - Deep Blue Repositories, https://deepblue.lib.umich.edu/bitstream/handle/2027.42/147084/rssb00794.pdf?sequence=1 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  93. Chapter 4 Inference and Decision-Making with Multiple Parameters | An Introduction to Bayesian Thinking, https://statswithr.github.io/book/inference-and-decision-making-with-multiple-parameters.html ↩︎

  94. Conjugate prior distribution for the univariate Gaussian | The Book of Statistical Proofs, https://statproofbook.github.io/P/ug-prior.html ↩︎

  95. Bayesian Inference for the Gaussian - Gregory Gundersen, https://gregorygundersen.com/blog/2019/04/04/bayesian-gaussian/ ↩︎

  96. v2203325 Mixture Models, Outliers, and the EM Algorithm - Statistics & Data Science, https://www.stat.cmu.edu/technometrics/80-89/VOL-22-03/v2203325.pdf ↩︎ ↩︎ ↩︎ ↩︎

  97. Statistics 240 Lecture Notes, https://www.stat.berkeley.edu/~stark/Teach/S240/Notes/ch9.pdf ↩︎

  98. Gaussian Mixture Models and Expectation Maximization Duke Course Notes Cynthia Rudin, https://users.cs.duke.edu/~cynthia/CourseNotes/GMMEMNotes.pdf ↩︎ ↩︎

  99. EM Algorithm for Gaussian Mixture Models, https://courses.grainger.illinois.edu/ece543/sp2019/projects/HaochenHua.pdf ↩︎ ↩︎

  100. Finding outliers in Gaussian model-based clustering - arXiv, https://arxiv.org/html/1907.01136v5 ↩︎ ↩︎

  101. Robust Statistics Part 1: Introduction and univariate data General references - Computer Science, https://cseweb.ucsd.edu/~slovett/workshops/robust-statistics-2019/slides/donoho-univariate.pdf ↩︎

  102. Noise location and the slope of the psychometric function for simple motion stimuli, https://opg.optica.org/abstract.cfm?uri=josaa-16-3-718 ↩︎ ↩︎

  103. Vision Research - Aston Research Explorer, https://research.aston.ac.uk/files/2630580/The_slope_of_the_psychometric_function.pdf ↩︎ ↩︎

  104. A novel Bayesian adaptive method for mapping the visual field - PMC - PubMed Central, https://pmc.ncbi.nlm.nih.gov/articles/PMC6917184/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  105. The Bayesian Additive Regression Trees Formula for Safe Machine Learning-Based Intraocular Lens Predictions - Frontiers, https://www.frontiersin.org/journals/big-data/articles/10.3389/fdata.2020.572134/full ↩︎ ↩︎ ↩︎

  106. Application of Bayes' to the prediction of referral decisions made by specialist optometrists in relation to chronic open angle glaucoma - PubMed, https://pubmed.ncbi.nlm.nih.gov/29422665/ ↩︎ ↩︎