199小时30分钟】
林允宁睁开眼,长出了一口气。
LV.2,足够支撑他构建一个数值稳定的优化模型了。
下一秒,他现实中的双手,动了。
这一次,他敲击键盘的声音不再像之前那般狂风暴雨,而是变得沉稳、精准,富有节奏感。
他没有从头写起,而是引入了科学计算库SciPy中的优化模块least_squares。
import numpy as np
from scipy.fftpack import fft, ifft
from scipy.optimize import least_squares
“他好像想明白什么了……”
刘伟敏锐地捕捉到了这一点,“看他的气质都不一样了,好像胸有成竹似的。”
大导演并没说错,此时林允宁的思路清晰无比:
第一步,先对包含噪声的实验数据进行傅里叶变换。
第二步,利用K-K关系(希尔伯特变换)构建物理响应的复数模型。
第三步,将理论模型卷积上仪器响应函数。
第四步,在频域中,将理论结果与实验数据进行比对,计算它们的加权“卡方残差”。
第五步,通过加权最小二乘法,不断优化理论模型的初始参数,直到缩减卡方(χ²/自由度)≈1为止。
这是一个完美的闭环。
他定义了一个目标函数,其输入是待求解的模型参数,输出是理论模型与实验数据之间的残差。
在这个目标函数内部,K-K约束被作为模型的固有属性嵌入其中。
然后,他将这个复杂的、非线性的优化问题,直接扔给了身经百战的least_squares求解器。
这是一种极为现代且高效的科研思维——将物理问题精准地抽象为数学模型,然后交给最专业的工具去求解。
他写完代码,设置好初始参数,按下了运行键。
笔记本的风扇再次发出轻微的嗡鸣。
这一次,屏幕的控制台上,一行行日志飞速滚过:
Iteration 1: Chi-squared = 152.78
Iteration 2: Chi-squared = 45.12
...
Iteration 17: Chi-squared = 0.03
Convergence reached.
代表着误差的数值,以肉眼可见的速度,稳定地、不可阻挡地向零逼近。
这过程,不再像之前的“一蹴而就”,而更像一场精密的、步步为营的围剿。
然后,那个绘图窗口,再次弹了出来。
窗口里,依旧是两条曲线。
一条黑色的“真值”,一条红色的“反演结果”。
两条曲线,在噪声水平内高度一致,几乎重合在了一起!
在主图下方,那条代表着误差的蓝色线条,围绕零轴随机起伏,波动幅度与叠加的噪声水平相当。
看着屏幕上的两条曲线,林允宁终于露出了笑容。
一股源于智力巅峰的愉悦感,如同暖流般从脊髓深处升起,瞬间冲散了连日来的疲惫。
这种快感,比世间任何娱乐都更令人上瘾。
成功了!
第一关,通过!
-->>
本章未完,点击下一页继续阅读