化学发光曲线拟合函数说明(多项式+指数拟合接口)
来源:云盘
/工作相关/全自动化学发光/文思海辉 文件/注册后优化/相关文件 多项式+指数 190812/函数说明.doc(54 KB,antiword 提取) 关联工程:原工程文件 IMITATE2(MFC 工程,同目录res/计算方法实习报告.doc为算法出处)
背景
全自动化学发光免疫分析仪(与文思海辉合作项目,2019 注册后优化阶段)的校准曲线拟合需求文档。化学发光定量需要把”RLU 相对光强 → 浓度”的剂量反应曲线拟合成可反求的函数,这份文档说明了交付的 C++ 拟合函数接口和用法约束。
核心内容
主函数接口 Nihe()
void Nihe(double t[], double y[], int m);t[]横坐标数组、y[]纵坐标数组、m多项式最高次数- m=2 → y = a + bx + cx²;m=3 → y = a + bx + cx² + dx³
- 拟合结果参数存类成员数组
double X[10]:m=3 时 a=X[0], b=X[1], c=X[2], d=X[3] - 配套
void Gauss(double sz[][20], int n)高斯列主元消元求解正规方程组 - 坑:把 Nihe/Gauss 从 IMITATE 工程中单独提取到”自定义函数”里编译不报错但运行时 crash——因为 OnImitate() 等函数耦合了对话框等自定义类。结论:必须从原工程整体提取修改,不能只摘两个函数。
多项式拟合使用建议
- 直接用
Nihe(),m 只取 2 或 3(二次/三次),文档明确”不用再求更高次”——高次多项式在免疫定量定标中会过拟合振荡。
反求(浓度反算)
- 二次多项式 y = a + bx + cx² 有闭式求根公式,可直接反求 x。
- 三次多项式无直接公式,文档提出的方案是二分法逐步逼近(当时未定论,标注为待验证)。
指数函数拟合
- 目标形式 y = a·e^(bx):两边取对数 → ln y = ln a + bx,化成线性问题。
- 调用
Nihe(x, log y, 1)一次多项式拟合,结果 X[0] = log a,X[1] = b。 - 反求 x 用对数形式闭式解。
算法出处:计算方法实习报告(2005)
同目录 res/计算方法实习报告.doc 是原作者(张晓东,2005 年计算方法课程报告)的原始实现报告,揭示了这套拟合代码的血统:
- 原始问题是化学反应”浓度-时间”数据拟合,MFC + VC++ 菜单驱动实现。
- 算法路线:构造 (m+2)×(m+1) 增广矩阵(正规方程),调用 Gauss 列主元消元解系数。
- 变体处理思路与后来化学发光需求一脉相承:
1/y = 1/y0 - (t0/y0)·t→ 浓度取倒数后线性拟合(On1Imitate)y = a·e^(b/t)→ 时间取倒数、浓度取对数后线性拟合(On2Imitate)
- 即:非线性模型统一通过变量变换线性化,复用同一个 Nihe(…, 1) 线性拟合通路。
可行动点 / 工程启示
- 遗留缺陷:三次多项式反求只有二分法提案,闭式/数值稳定性未验证;单独提取函数会 crash 的耦合问题在 2019 年仍未解决,只是”从原工程整体提取”绕过。
- 剂量反应曲线的四种模型(多项式 2/3 次、双倒数、指数)覆盖了化学发光定标常见形态,变换线性化策略可直接复用到类似仪器软件。
关联
- 化学发光多流程默认设置与UI指令协议对照表 — 同项目(文思海辉注册后优化)
- 微流控化学发光免疫分析仪软件测试计划-WLK01-0102 — 同产品线