盘的声音不再像之前那般狂风暴雨,而是变得沉稳、精准,富有节奏感。
他没有从头写起,而是引入了科学计算库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.
代表着误差的数值,以肉眼可见的速度,稳定地、不可阻挡地向零逼近。
这
本章未完,请点击下一页继续阅读!