You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将残差基准值的误差纳入最小化变量的误差计算?

解决方案:加权最小二乘与误差传播

当基准值(sol1、sol2、sol3)存在测量误差时,需通过加权最小二乘修正目标函数,同时基于加权后的海森矩阵逆计算变量x、y的误差,具体步骤如下:

1. 核心思路:加权最小二乘

基准值的误差越大,其对拟合结果的贡献应越小。我们给每个残差项分配权重(权重为对应基准值误差平方的倒数,即1/σ²),将目标函数修改为加权残差平方和,以此弱化误差较大的基准值对拟合的影响。

2. 修改后的完整代码

修正原代码的函数定义问题,并加入加权逻辑:

from scipy.optimize import minimize
import numpy as np

# 基准值及其误差
sol1 = 1
sol1_error = 0.5
sol2 = 2
sol2_error = 1
sol3 = 3
sol3_error = 1.5

def fun(k):
    x, y = k[0], k[1]
    a = x + y
    b = x - y
    c = x + 2*y
    # 加权残差平方和
    residual = ((a - sol1)/sol1_error)**2 + ((b - sol2)/sol2_error)**2 + ((c - sol3)/sol3_error)**2
    return residual

# 执行最小化
min_result = minimize(fun, x0=(0, 0))
solution = min_result.x
# 从海森矩阵逆中提取变量的方差,开平方得到标准差
cov_matrix = min_result.hess_inv
x_error = np.sqrt(cov_matrix[0, 0])
y_error = np.sqrt(cov_matrix[1, 1])

print("求解结果:")
print(f"x = {solution[0]:.4f} ± {x_error:.4f}")
print(f"y = {solution[1]:.4f} ± {y_error:.4f}")
print(f"加权残平方和:{min_result.fun:.4f}")

3. 误差计算原理

加权最小二乘的目标函数对应的海森矩阵近似为 H ≈ J^T W J,其中:

  • J 是残差关于x、y的雅可比矩阵
  • W 是对角权重矩阵,元素为1/σ_i²

Scipy的minimize返回的hess_inv是海森矩阵的逆矩阵,它直接对应拟合变量x、y的协方差矩阵。协方差矩阵的对角线元素即为变量的方差,开平方后得到的就是变量的标准差(即你需要的误差范围)。

4. 结果说明

运行上述代码后,得到的x、y最优解及误差范围会合理反映基准值的不确定性:误差较大的基准值对拟合结果的影响被削弱,最终变量的误差也会更贴近实际数据的置信水平。

内容的提问来源于stack exchange,提问作者samman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:07:38