2. 数学基础回顾:线性代数、微积分与优化理论
做镜头设计这些年,我越来越觉得:数学不是用来考试的,是用来救命的。尤其是当你面对一堆互相打架的约束条件——像什么像差、畸变、后焦、总长——光靠直觉调参数,调三天也调不出来。这时候,数学工具就是你的“系统化武器”。
这一章,我们快速过一遍约束求解里最常用的数学基础。别怕,我不推公式,只讲“怎么用”。
2.1 线性代数:矩阵与向量空间
镜头设计里,一个光学系统可以用一组参数来描述:曲率半径、厚度、玻璃折射率、非球面系数……这些参数排成一列,就是一个向量。
核心思想:约束条件就是向量空间里的“墙”。你的设计参数向量,必须在这些墙围成的可行域里移动。
2.1.1 矩阵——约束的“打包工具”
举个例子。一个三片式镜头,有15个变量。每个约束条件(比如焦距、后焦、畸变)都可以写成这些变量的函数。把这些函数对变量的偏导数排成一张表——这就是雅可比矩阵。
我个人习惯把矩阵看作“约束的打包工具”。你想想看:
- 单行矩阵 = 一个约束条件
- 多行矩阵 = 多个约束条件同时作用
- 矩阵乘法 = 约束条件之间的耦合关系
我在项目中遇到过一个问题:一个变焦镜头,变倍组和补偿组的运动曲线总是打架。后来我把两个组的位移约束写成矩阵形式,发现是矩阵的秩不够——说白了,两个约束其实是线性相关的,一个约束就能描述清楚。去掉冗余约束后,求解速度直接翻倍。
2.1.2 向量空间——可行域长什么样?
每个设计参数都是一个维度。15个参数,就是15维空间。约束条件在这个空间里切出一个个“可行区域”。
| 约束类型 | 数学表示 | 在向量空间里的样子 |
|---|---|---|
| 等式约束 | f(x) = 0 | 一个超曲面(像一张纸) |
| 不等式约束 | g(x) ≤ 0 | 一个半空间(像一堵墙的一侧) |
| 边界约束 | a ≤ x ≤ b | 一个超立方体(像盒子) |
嗯,这里要注意:多个约束的交集才是真正的可行域。如果交集是空集——恭喜你,这个系统无解。我见过不少新手,加了20个约束,最后发现可行域是空的,白忙一场。
避坑指南:我曾经在做一个大视场镜头时,同时约束了畸变和相对照度。结果发现这两个约束在向量空间里是“背对背”的——满足畸变,照度就崩;满足照度,畸变就超。后来我不得不放松其中一个约束的容忍度。所以,先检查约束之间的“方向”是否一致,再开始求解。
2.2 微积分:梯度与雅可比矩阵
微积分在约束求解里就干一件事:告诉你怎么走。
你站在可行域里,想找一个更好的设计点。往哪个方向走?走多远?这就是梯度和雅可比矩阵要回答的问题。
2.2.1 梯度——最陡的方向
梯度是一个向量,指向函数值增加最快的方向。在优化里,我们通常想减小目标函数(比如像差),所以会沿着梯度的反方向走——这就是梯度下降法。
说白了:
- 梯度方向 = 上坡方向
- 负梯度方向 = 下坡方向
- 梯度大小 = 坡有多陡
我记得有一次,一个同事调了三天都没把球差压下去。我帮他看了一眼梯度——梯度在某个参数上几乎为零,说明那个参数对球差“不敏感”。换了个敏感参数,两步就调好了。
2.2.2 雅可比矩阵——多约束的“方向盘”
当你有多个约束条件时,梯度就升级成了雅可比矩阵。它是一个矩阵,每个元素是第 i 个约束对第 j 个变量的偏导数。
J = [ ∂f₁/∂x₁ ∂f₁/∂x₂ ... ∂f₁/∂xₙ ]
[ ∂f₂/∂x₁ ∂f₂/∂x₂ ... ∂f₂/∂xₙ ]
[ ... ... ... ... ]
[ ∂fₘ/∂x₁ ∂fₘ/∂x₂ ... ∂fₘ/∂xₙ ]
雅可比矩阵告诉你:每个参数变化,会如何影响每个约束。这就像开车时的方向盘——你转动方向盘(改变参数),车头方向(约束值)就会跟着变。
注意:雅可比矩阵可能是奇异的(行列式为0)。这意味着某些约束之间是线性相关的,或者某些参数对约束没有影响。我曾经在优化一个折反镜头时,发现雅可比矩阵的秩只有8,但变量有12个——说明有4个参数是“冗余”的。去掉它们,求解速度提升了3倍。
2.3 优化理论:凸优化与非凸优化
优化理论是约束求解的“总指挥”。它告诉你:怎么在可行域里找到最好的点。
2.3.1 凸优化——简单但强大
凸优化要求:目标函数是凸函数,可行域是凸集。说白了,就是“只有一个坑”的问题。
凸优化的好处:
- 全局最优解:找到的就是最好的,没有“假坑”
- 求解快:算法稳定,收敛有保证
- 可预测:每次跑结果都一样
但现实中的镜头设计,几乎都是非凸的。为什么?因为像差函数是高度非线性的,可行域也经常是弯弯曲曲的。
2.3.2 非凸优化——现实世界的常态
非凸优化有多个局部最优解。你找到的解,可能只是“矮子里拔将军”。
| 特性 | 凸优化 | 非凸优化 |
|---|---|---|
| 最优解 | 全局唯一 | 多个局部最优 |
| 初始点敏感度 | 不敏感 | 非常敏感 |
| 常用算法 | 梯度下降、牛顿法 | 模拟退火、遗传算法、多起点法 |
| 镜头设计适用性 | 仅限简单系统 | 几乎所有实际系统 |
我个人习惯的做法是:先用全局优化(非凸)找到几个“好苗子”,再用局部优化(凸)精修。这样既避免了掉进假坑,又能快速收敛到高精度解。
实战技巧:我曾经做一个手机镜头,初始结构选得不好,局部优化怎么跑都跑不出来。后来我用多起点法——随机生成100个初始点,每个点跑一次局部优化——最后找到了一个比初始结构好30%的解。所以,非凸优化里,初始点就是一切。
2.4 知识体系总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作“约束求解的数学地图”。
这张图你看懂了吗?说白了,约束求解就是三件事的串联:定义空间 → 找到方向 → 做出选择。线性代数帮你定义空间,微积分帮你找到方向,优化理论帮你做出选择。
一句话总结:数学不是镜头设计的敌人,而是你最强大的盟友。掌握了这些工具,你就能从“瞎调参数”升级到“系统化求解”。