我有一组X-Y值(即散点图),我想要一个Pascal程序来生成适合这些点的N阶多项式系数,就像Excel一样。
我有一组X-Y值(即散点图),我想要一个Pascal程序来生成适合这些点的N阶多项式系数,就像Excel一样。
我使用了David J Taylor的Polyfit示例(curvefit.zip),它实现了最小二乘曲线拟合算法(也称为线性回归) David的网站在这里,但请继续阅读,因为我的版本更好。(见下文)。
David使用的算法的来源是一本关于Pascal程序员科学数学的书籍,Allen Miller在该书中的曲线拟合例程来自“科学家和工程师的Pascal程序”,由Juergen Loewner于1982年10月打字并提交给MTPUG,然后由Jeff Weiss进行了修正和适应Turbo Pascal。
您可以直接从bitbucket这里下载curvefit.zip。(您可以使用Mercurial/TortoiseHG克隆源代码,或从bitbucket下载ZIP)
hg clone https://bitbucket.org/wpostma/curvefit curvefit
它在任何 Delphi 5 及以上版本中都能运行,支持 Unicode 或非 Unicode,甚至 Delphi 10 Berlin。演示中有一个小图表,是我添加的。我还添加了一种强制结果经过原点的方法,这是一种常见技巧,你希望所有值都最佳匹配,除常数项外,常数项应强制为零或某个实验衍生的平均值。在某些分析化学使用某些仪器时,以及其他科学案例中,强制"空白扣除"(设置为一系列分析性“零样本”的平均值)非常常见,在这些情况下它比最佳匹配更有用,因为你可能希望在原点周围最小化误差而不是在远离原点的曲线区域内最小化误差。请检查Turbo Power的SysTools库中的函数,现在已经开源,其中包括StStat单元中的数学函数。
尽管您已经选择了一个答案,但为了完整起见,我想补充一下:
我们使用SDL Components的Math包,并且非常满意。
http://www.lohninger.com/delfcomp.html
这是一个经过深思熟虑的方案,完全符合我们的需求。
他的网站上还有许多其他有趣的工具。
XlXtrFun 是我所知道和使用的最好的曲线拟合工具,但它只适用于Excel: