文思海辉 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,需手动计算验证拟合质量:
- 用求得的拟合公式代入各标品浓度值,算出理论光子数 y_i
- 与原始实测光子数 x_i 比较,按标准皮尔逊公式计算:
r = Σ(x_i−x̄)(y_i−ȳ) / √[Σ(x_i−x̄)² · Σ(y_i−ȳ)²] - 注意变量方向:xi 是实测原始光子数,yi 是拟合公式反算的光子数,均值同为各自均值
这对应 IVD 仪器标定的法规要求(标准曲线相关系数合格判据,化学发光通常要求 |r| ≥ 0.99 或对数形式 r ≥ 0.9900)。
可行动点 / 经验沉淀
- 嵌入式/上位机标定模块的最小可用方案 = 二次/三次多项式 + 对数线性化指数拟合 + 二分反求 + 手动 r 计算,四件套即可满足化学发光定量
- 三次多项式反求浓度时必须限定在单调区间内二分,否则多根歧义
- 剥离老 MFC 工程算法函数时警惕隐性的类成员数组依赖
关联
- 同项目前期需求:化学发光仪软件二期工程需求确认-2019
- 标准曲线载体(条码里塞标准曲线参数):微流控化学发光仪试剂条码规则-全版本演进
- 注册后优化全貌:微流控化学发光仪MDA20-注册后软件优化与二期需求精华