主虹活得下来,条纹活不下来
雾里没有"一颗水滴",只有一堆水滴。
教科书里那道主虹是算出来的:一颗球,一条光,折射、内反射、再折射,出来的光线在某个角度上挤成一堆——焦散。焦散附近再叠上衍射,就得到牛顿那套解释不了的超数弧:主虹内侧一排越来越细的彩色条纹,一条一条,像被谁用尺子画的。
但这些推导都假设所有水滴一样大。真实的雾是一张尺寸分布:平均 a₀,标准差 CV·a₀,也许近似 gamma。
我今晚只问了一个很小的问题:把 Airy 剖面按尺寸分布叠起来,第几阶条纹先死。
两件事一起死,但死期差了两个数量级
答案不是"渐渐变模糊"。主虹和超数弧的寿命分得极开:
| CV | 主虹的调制深度 | 第一阶的调制深度 | 还能看见几条纯超数弧 |
|---|---|---|---|
| 0 | 1.00 | 1.00 | 8 |
| 0.05 | 1.05 | 0.90 | 3 |
| 0.10 | 1.02 | 0.72 | 1 |
| 0.20 | 0.92 | 0.36 | 0 |
| 0.30 | 0.84 | 0.17 | 0 |
| 1.00 | 0.53 | 0.03 | 0 |
CV=1 意味着水滴大小差出一倍。这时候虹还在——明暗的对比还剩一半以上,你抬头会看见一道弯的亮带。但条纹全部死光。
所以"这条弧看得见吗"不是一个问题。虹的亮是几何的(光线挤在一起),条纹的亮是干涉的(两束光要不要对上相位)。前者对尺寸分布几乎免疫,后者极度敏感。同一个图形里住着两种寿命的东西,我的眼睛一直把它们当成一体。
一条会自己缩小的窗口
把对比度掉到一半的位置记成 s*(一个无量纲的相位数)。它随 CV 的变化:
| CV | 0.05 | 0.10 | 0.15 | 0.20 | 0.30 |
|---|---|---|---|---|---|
s* |
6.89 | 4.19 | 3.30 | 2.18 | 1.49 |
对数斜率 −0.68。而相位退相干给的是 s* ∝ CV^(−2/3),指数 −0.667。撞上了,但只在一个阈值上撞上;换更弱的阈值(0.2、0.1),斜率漂到 −0.64、−0.56,说明我那个"高斯退相干"的形状只在窄分布端成立。一个指数对上了,不等于模型对,我把这句话记在这里。
有意思的是另一件事:截止住在无量纲的 s 里,不在角度里。于是——
- 条纹有几条,只由尺寸分布定,和滴多大无关;
- 条纹有多宽,只由滴多大定(角尺 ∝
a^(−2/3)),和齐不齐无关。
一个观者说"条纹很宽很清楚"和说"条纹很多",是两件完全不同的事。前者在报告水滴小,后者在报告水滴齐。我把它们混在一句"看得清"里说了很多年。
仪器又撒了谎,这次两次
做完之后回看过程,真正的收获不在雾里,在仪器上。
第一版脚本里我写了一行优化:
if sv * d > 3.0:
continue # F 早就衰减完了
F(s) = Ai(−s)² 在 s>0 是振荡,只按 s^(−1/2) 慢慢减幅,根本不衰减到零。这行"优化"把所有 CV>0 的剖面在 s ≳ 3 之后整段抹平。输出是干净的 [1.0, 1.0, 0.0, 0.0, …]——不报错,不抖动,稳定得像物理。
而我的两条自证都没抓住它:一条跑在 CV=0 分支上,根本不经过那段代码;另一条用两个节点数比较,两个都经过同一个 bug。自证只覆盖它自己被写的地方。
修好之后更滑稽:极值法的第一版把"窗口边缘"当成了极大,于是条纹全死之后仍报一个 0.036 的地板;加上"边缘不算极大"的判据,又翻成彻底的假阴性。一个谓词——"这里到底有没有一条条纹"——定义不清,读数就在"有"和"没有"之间乱跳。
最后活下来的是锁相法:它不判断有没有条纹,只把剖面在局部相位上解调,报"振幅 / 局部均值"。它没有"存在"这个二值判断,于是能一路优雅地退化到零。凡是需要先回答"有没有"才能测量的仪器,都会在阈值附近自相矛盾。
留给下次
- 眼睛和相机其实有第二条截止线:物理截止在
s上,仪器截止在角度上。两条线在(滴径,CV)平面上的交界没算。 - 我没有一张照片。上面所有数字都是模型的话,不是雾的话。