文思海辉 IMX 项目(微流控全自动化学发光免疫分析仪)注册后软件优化阶段的标定曲线拟合实现文档,配套 IMITATE2 原工程文件(目录内另有 相关系数.PNG、自定义函数类/、原工程文件 IMITATE2/)。解决的核心问题:化学发光定量需要把”浓度 → 光子数”的标准曲线拟合成公式,再反求未知样本浓度。

核心内容一:Nihe() 多项式拟合函数(函数说明.doc)

IMITATEView 类中的主拟合接口:

void Nihe(double t[], double y[], int m);
  • t[] 横坐标数组、y[] 纵坐标数组、m 多项式最高次数(只用 m=2 / m=3,不再求更高次)
  • 拟合结果存入类成员 double X[10]:m=3 时 y = a + bx + cx² + dx³,a=X[0], b=X[1], c=X[2], d=X[3]
  • 反求限制:二次多项式有闭式求根公式;三次多项式无直接公式,文档提出用二分法逐步逼近(工程上标准做法,化学发光标定单调区间内二分收敛可靠)

指数拟合的取对数技巧

指数模型 y = a·e^(bx) 不单独实现,而是两边取对数线性化:

  • 将 x 与 log y 代入一次拟合 Nihe(x, log y, 1),得 X[0] = log a、X[1] = b
  • 目录名”多项式+指数”即来源于此双模型方案

工程坑(原文 PS 警告)

把 Nihe() 和 Gauss(double sz[][20], int n) 从原工程剥离到”自定义函数”中单独编译不报错但运行时 crash(隐性依赖 IMITATEView 类成员如 X[]),正确做法是直接从原工程文件整体提取修改。OnImitate() / On2Imitate() 对话框函数耦合了 UI 类,不通用。

核心内容二:相关系数手动计算(相关系数.doc)

拟合函数不返回相关系数 r,需手动计算验证拟合质量:

  1. 用求得的拟合公式代入各标品浓度值,算出理论光子数 y_i
  2. 与原始实测光子数 x_i 比较,按标准皮尔逊公式计算: r = Σ(x_i−x̄)(y_i−ȳ) / √[Σ(x_i−x̄)² · Σ(y_i−ȳ)²]
  3. 注意变量方向:xi 是实测原始光子数,yi 是拟合公式反算的光子数,均值同为各自均值

这对应 IVD 仪器标定的法规要求(标准曲线相关系数合格判据,化学发光通常要求 |r| ≥ 0.99 或对数形式 r ≥ 0.9900)。

可行动点 / 经验沉淀

  • 嵌入式/上位机标定模块的最小可用方案 = 二次/三次多项式 + 对数线性化指数拟合 + 二分反求 + 手动 r 计算,四件套即可满足化学发光定量
  • 三次多项式反求浓度时必须限定在单调区间内二分,否则多根歧义
  • 剥离老 MFC 工程算法函数时警惕隐性的类成员数组依赖

关联