我有一组X-Y值(即散点图),并且我希望Pascal例程以与Excel相同的方式生成适合这些点的N阶多项式的系数。

最佳答案

我使用了David J Taylor的Polyfit示例(curvefit.zip),该示例实现了最小二乘曲线拟合算法(也称为线性回归)。David的站点为here,但请继续阅读,因为我的版本更好。 (见下文)。

David使用的算法的起源是一本面向Pascal程序员的科学数学书,是一本名为《科学家和工程师的Pascal程序》的Allen Miller的Curve Fitting例程,由Juergen Loewner于1982年10月输入并提交给MTPUG,
并由Jeff Weiss修改并改编为Turbo Pascal。

您可以直接从bitbucket here中获取curvefit.zip。 (您可以使用Mercurial / TortoiseHG克隆源代码,或从bitbucket下载ZIP)

hg clone https://bitbucket.org/wpostma/curvefit curvefit


它可以在任何delphi版本5和更高版本中运行,无论是否使用Unicode,甚至可以运行Delphi 10 Berlin。它在演示中有一个小图表,由我添加。我还添加了一种将结果强制通过原点的方法,这是一种通用技术,您希望对所有值(常数项除外)进行最佳拟合,应将其强制为零或实验得出的平均值。当与某些类型的仪器一起使用时,在某些类型的分析化学中,通常将强制“空白减法”设置为等于一系列分析“零样品”的平均值,在其他科学情况下,这种情况可能会更大。比最佳拟合更有用,因为您可能希望将原点周围的误差最小化,而不是最小化距离原点最远的曲线区域的误差。

我还需要澄清的是,出于线性回归的目的,“曲线”也可能是一条线,这是我为分析化学目的所需的情况,并且任何直线(y = mx + b)的方程式也称为“校准曲线”。一阶曲线拟合是一条线(y = mx + b),二阶曲线拟合(如图所示)是一个抛物线(y = nX ^ 2 + mX + b)。您可能会猜到,该算法可从一阶扩展到您希望的任何级别。我没有在8个学期以上对它进行过测试。

这是屏幕截图:



Bitbucket项目链接:

https://bitbucket.org/wpostma/curvefit/overview

09-09 23:52
查看更多