使用scipy.optimize.leastsq拟合穆斯堡尔光谱数据未返回协方差矩阵的问题
使用scipy.optimize.leastsq拟合穆斯堡尔光谱数据的协方差矩阵问题
问题描述
使用scipy.optimize.leastsq拟合穆斯堡尔光谱实验数据,拟合成功且最优参数效果符合预期,但原本文档提及的协方差矩阵cov_x未返回,取而代之的是整数1。
错误原因
默认调用leastsq时,函数仅返回两个值:最优拟合参数x和状态码ier。你误将状态码ier当成了协方差矩阵cov_x。只有传入full_output=1参数时,leastsq才会返回包含协方差矩阵在内的完整输出集合。
解决方法
调用leastsq时添加full_output=1参数,示例如下:
from scipy.optimize import leastsq # 假设residual_func是残差函数,p0是初始参数,x_data、y_data是实验数据 result = leastsq(residual_func, p0, args=(x_data, y_data), full_output=1) x_opt, ier, infodict, mesg, cov_x = result
此时变量cov_x即为所求的协方差矩阵。
关于ier=1的含义
ier=1表示拟合满足收敛条件:实际计算的残差平方和与预测的残差平方和的相对减少量,均未超过设定的ftol阈值,说明拟合已收敛到满足精度要求的最优解。
备注
不使用optimize.curve_fit的原因是希望将参数以列表形式传入模型函数,而非单独变量。
内容的提问来源于stack exchange,提问作者William Han
相关产品推荐
相关产品推荐

