基于给定数据点构建C语言拟合函数的技术求助
温度-系数拟合函数开发记录
我正在用C语言开发函数,需要基于给定数据点构建拟合函数,但始终无法得到贴合曲线的结果,对应图表如下:
程序核心使用区间为0-500°F,此区间的拟合精度至关重要。
提取的近似数据点
温度(°F), 系数
(-300, 1.57) (-200, 1.33) (-100, 1.16) (0, 1.05) (100, 0.98) (200, 0.94) (300, 0.915) (400, 0.865)
二次函数拟合尝试
y = 0.00000244x² -0.001x + 1.05:在-300-100°F区间拟合效果较好,但x>100°F时误差显著增大。y = 1.6904761904745×10^-6 x² - 0.00109048x + 1.0628:整体拟合度优于前者,但仍无法满足精度需求。
我考虑采用三次函数建模,但无法确定具体形式;也计划将T<200°F和T>200°F分为两个独立函数进行拟合,寻求可行建议。
编辑1:分段线性函数尝试
找到一组分段线性函数拟合数据集,但400-500°F区间可能仍存在误差:
1.) y=-0.0024x + 0.85 {-300< x <-200} 2.) y=-0.0017x + 0.99 {-200< x <-100} 3.) y=-0.0011x + 1.05 {-100< x < 0} 4.) y=-0.0007x + 1.05 {0 < x <100} 5.) y=-0.0004x + 1.02 {100 < x < 200} 6.) y=-0.00025x + 0.99 {200 < x < 300} 7.) y=-0.0005x + 1.065 {300< x < 400} 8.) y=-0.00065x + 1.125 {400< x < 500} *预估500°F时系数为0.8*

编辑2:两段分段函数建模
在JJacquelin的帮助下完成了效果较好的建模,最终采用两段分段函数:
1.) y = 0.83583 + 0.218653e^(-0.00404x) {-400 < x < 185} 2.) y = -0.0000014x² + 0.000465x + 0.9027 {185 < x < 500}

编辑3:三次样条插值(最终方案)
JAlex提出的三次样条插值方法可行,成为最终采用的方案。适配了Arduino库:sakov/csa-c(三次样条近似)
三次样条插值与原始数据集拟合度极佳,T=500°F和T=600°F的数据点由编辑2中的公式2预估得出。
内容的提问来源于stack exchange,提问作者Accentrix
相关产品推荐
相关产品推荐

