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

在scipy.optimize中用chi squared作拟合参数不确定度及.format用法咨询

关于scipy.optimize.curve_fit的卡方值与参数不确定度问题

1. 卡方值与参数不确定度的关联逻辑

curve_fit返回的perr(参数不确定度)是基于协方差矩阵计算的标准误差,和卡方值的对应关系如下:

  • 当absolute_sigma=False(默认):协方差矩阵会除以约化卡方(reduced chi²),此时perr是参数标准误差乘以√(reduced chi²)
  • 当absolute_sigma=True:协方差矩阵直接用输入的sigma计算,不除以约化卡方,此时perr是参数的原始标准误差

若要把卡方值作为参数不确定度的补充展示,需手动计算卡方值再结合perr标注:

  • 卡方值计算:chi2 = np.sum(((y - func(x, *popt))/sigma)**2)
  • 约化卡方计算:reduced_chi2 = chi2 / (len(y) - len(popt))

绘图时可通过plt.text()或图例,将卡方值、参数值、不确定度一起展示。

2. 代码示例调整建议

以线性拟合为例,调整后的代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 模拟数据
x = np.linspace(0, 10, 50)
y = 2*x + 3 + np.random.normal(0, 1, size=len(x))
sigma = np.ones_like(y)  # 假设每个数据点标准差为1

# 拟合函数
def linear_func(x, a, b):
    return a * x + b

# 执行拟合
popt, pcov = curve_fit(linear_func, x, y, sigma=sigma, absolute_sigma=True)
perr = np.sqrt(np.diag(pcov))

# 计算卡方和约化卡方
residuals = y - linear_func(x, *popt)
chi2 = np.sum((residuals / sigma)**2)
reduced_chi2 = chi2 / (len(y) - len(popt))

# 绘图展示
plt.scatter(x, y, label='原始数据')
plt.plot(x, linear_func(x, *popt), 'r-', 
         label=f'拟合结果: a={popt[0]:.2f}±{perr[0]:.2f}, b={popt[1]:.2f}±{perr[1]:.2f}\n卡方值={chi2:.2f}, 约化卡方={reduced_chi2:.2f}')
plt.legend()
plt.show()

3. .format(popt[0], perr[0], popt[1], perr[1])解析

这是Python的字符串格式化方法,作用是把括号内的数值依次替换到字符串的占位符中:

  • popt[0]:拟合得到的第一个参数(如线性拟合的斜率)
  • perr[0]:第一个参数的标准误差
  • popt[1]:拟合得到的第二个参数(如线性拟合的截距)
  • perr[1]:第二个参数的标准误差

比如若popt = [2.01, 3.05]、perr = [0.08, 0.12],格式化后会生成字符串拟合结果: a=2.01±0.08, b=3.05±0.12,方便将拟合结果直观展示在图例或文本中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:40:25