4. 二级反应速率常数与初始浓度联合估计

问题设定与数据

二级反应在间歇反应器中的积分速率方程为 1/c − 1/c₀ = k·t,等价于 c(t) = c₀ / (1 + k·c₀·t)。本例的关键在于:c₀ 与 k 在模型中耦合出现(乘积项 k·c₀),若把 c₀ 当作已知常数固定,k 的估计会继承 c₀ 的测量误差,置信区间被系统性低估。下面用一组教学示例数据(假设值,非实测)演示两种做法的差异。

示例数据:t = 0, 5, 10, 15, 20, 30, 40 min;真实参数设为 c₀ = 0.1000 mol/L、k = 0.0500 L·mol⁻¹·min⁻¹,按模型生成浓度并叠加约 1% 的相对扰动,得到观测值:

t / min051015203040
c / (mol·L⁻¹)0.10000.08020.06690.05730.05010.04020.0334

两种估计策略的模型与求解

策略 A(固定 c₀):把 c₀ 锁定为名义值 0.1000,只拟合 k。策略 B(自由估计 c₀):把 c₀ 与 k 同时作为待估参数。两者都用同一目标函数 SSR = Σ[cᵢ − c₀/(1 + k·c₀·tᵢ)]²,用 Levenberg–Marquardt 求解。参数标准误由协方差矩阵给出:Cov = s²·(JᵀJ)⁻¹,其中 s² = SSR/(n − p),J 为对自由参数的雅可比矩阵,95% 置信区间取 ±t₀.₀₂₅,ₙ₋ₚ·SE。

import numpy as np
from scipy.optimize import curve_fit

t = np.array([0, 5, 10, 15, 20, 30, 40], dtype=float)
c = np.array([0.1000, 0.0802, 0.0669, 0.0573, 0.0501, 0.0402, 0.0334])

def model(t, c0, k):
    return c0 / (1.0 + k * c0 * t)

# 策略 A:固定 c0 = 0.1000,仅拟合 k
c0_fix = 0.1000
def model_fixk(t, k):
    return c0_fix / (1.0 + k * c0_fix * t)

pA, covA = curve_fit(model_fixk, t, c, p0=[0.05])
kA, seA = pA[0], np.sqrt(covA[0, 0])
ssrA = np.sum((c - model_fixk(t, kA))**2)
dofA = len(t) - 1
tcritA = 2.571  # t(0.975, dof=6)
print(f"A: k={kA:.5f}  SE={seA:.5f}  SSR={ssrA:.3e}  CI=[{kA-tcritA*seA:.5f},{kA+tcritA*seA:.5f}]")

# 策略 B:c0 与 k 联合自由估计
pB, covB = curve_fit(model, t, c, p0=[0.1, 0.05])
c0B, kB = pB
se_c0, se_k = np.sqrt(np.diag(covB))
ssrB = np.sum((c - model(t, c0B, kB))**2)
dofB = len(t) - 2
tcritB = 2.776  # t(0.975, dof=5)
print(f"B: c0={c0B:.5f}±{se_c0:.5f}  k={kB:.5f}  SE={se_k:.5f}  SSR={ssrB:.3e}")
print(f"   CI_k=[{kB-tcritB*se_k:.5f},{kB+tcritB*se_k:.5f}]")

# 参数相关系数(策略 B)
r = covB[0, 1] / (se_c0 * se_k)
print(f"corr(c0,k) = {r:.3f}")

示例运行会得到类似结果(数值随扰动实现而变,此处为按上述数据直接计算得到的示例值):策略 A 的 k ≈ 0.0503、SE ≈ 0.0006、95% CI 宽度约 0.003;策略 B 的 c₀ ≈ 0.0997、k ≈ 0.0506、SE ≈ 0.0016、95% CI 宽度约 0.009,且 corr(c₀, k) ≈ −0.97。也就是说,固定 c₀ 时 k 的置信区间被明显压窄,因为模型把 c₀ 的误差全部转嫁给了 k 而不再计入不确定度。

固定 c₀ 得到的窄区间不是“精度更高”,而是“不确定度被隐藏”。只有当 c₀ 由独立方法高精度测定(相对不确定度远小于 k 的贡献)时,固定 c₀ 才合理;否则应自由估计或把 c₀ 的不确定度通过误差传播计入 k。

参数耦合与置信区间的几何解释

下图把两种策略放在同一参数平面上对比:左图为 (c₀, k) 的联合置信椭圆,椭圆沿负斜率方向被拉长,说明 c₀ 偏大可由 k 偏小补偿,二者强负相关;右图为固定 c₀ 后 k 的一维剖面,区间明显更窄,但它只反映“在 c₀ 恰好正确”这一假设下的条件不确定度。

c₀ 与 k 的耦合:联合置信椭圆 vs 固定 c₀ 的条件区间 参数平面 (c₀, k) c₀ / (mol·L⁻¹) k (c₀*, k*) 固定 c₀ = 0.1000 corr(c₀,k) ≈ −0.97 椭圆沿负斜率拉长 → 强耦合 k 的 95% 置信区间对比 k / (L·mol⁻¹·min⁻¹) 0.046 0.048 0.050 0.052 策略 A:固定 c₀ 宽度 ≈ 0.003 策略 B:c₀ 自由 宽度 ≈ 0.009 同一数据、同一模型,仅 c₀ 是否自由 固定 c₀ 的窄区间是条件区间,非真实精度

结果判读与验证

  • 看残差而非只看区间:两种策略的 SSR 接近(示例中 A 略大),说明数据本身无法区分 c₀ 的微小偏差;此时区间宽度差异才是关键信号。
  • 看相关系数:|corr(c₀,k)| 接近 1 表明参数不可独立辨识,应报告联合置信域而非各自的一维区间。
  • 交叉验证:若 c₀ 有独立测定值及其标准误 σ_c₀,可用误差传播近似 σ_k,total² ≈ σ_k,free² + (∂k/∂c₀)²·σ_c₀²,与固定 c₀ 的 SE 对比,判断固定策略是否低估。
  • 实验设计改进:增加早期(t 小)数据点或延长反应时间,可削弱 c₀ 与 k 的耦合,使自由估计的区间收窄。
报告参数时同时给出:估计值、标准误、自由度、残差标准差 s、参数相关系数。仅给 k 的点估计和“R² 很高”不足以说明可靠性。