我可以在哪里获取一个Delphi/Pascal实现的类似Excel的多项式回归曲线拟合?

4

我有一组X-Y值(即散点图),我想要一个Pascal程序来生成适合这些点的N阶多项式系数,就像Excel一样。


1
我自己已经做过这个了,它并不是非常困难。也许我可以找到一些代码... - Andreas Rejbrand
5个回答

10

我使用了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。演示中有一个小图表,是我添加的。我还添加了一种强制结果经过原点的方法,这是一种常见技巧,你希望所有值都最佳匹配,除常数项外,常数项应强制为零或某个实验衍生的平均值。在某些分析化学使用某些仪器时,以及其他科学案例中,强制"空白扣除"(设置为一系列分析性“零样本”的平均值)非常常见,在这些情况下它比最佳匹配更有用,因为你可能希望在原点周围最小化误差而不是在远离原点的曲线区域内最小化误差。
我还应该澄清一下,对于线性回归的目的,“曲线”也可以是一条直线,这是我在分析化学方面需要的情况,任何直线(y = mx + b)的方程也被称为“校准曲线”。一阶曲线拟合是一条直线(y = mx + b),二阶曲线拟合(如图片所示)是一个抛物线(y = nX^2 + mX + b)。正如你所猜测的那样,这个算法从一阶到任何你想要的级别都可以缩放。不过我还没有在8项以上进行测试。
这里是一个屏幕截图: polyfit example with chart Bitbucket 项目链接: https://bitbucket.org/wpostma/curvefit/overview

谢谢@Warren。当我使用链接下载时,我得到了67k的内容,看起来像是SkyDrive网页的HTML。请再试一次,因为我认为你的可能很合适。 - rossmcm
我通过将您的zip文件重命名为html并加载到浏览器中,然后进行探索来获取该文件! - rossmcm
Ross;最简单的方法是点击链接,将其加载为网页,并单击Skydrive提供的下载链接。但是,随你喜欢。 - Warren P
@Warren。这很奇怪。我不明白为什么浏览器会将以“.zip”结尾的URL打开为网页。我确实最初右键单击并执行了“另存为”。 - rossmcm
浏览器并不关心URL中的文件或文件扩展名,它们关心头部HTTP内容类型。然而你是看不到这个东西的。因此你只能看到URL,从而将注意力集中在它上面。 :-) - Warren P
"此项可能不存在或已不再可用。有没有可能修复链接?" - Roland Rabien

5

2
还有一个特定版本的TpMath叫做DMath适用于Delphi,网址为:http://www.unilim.fr/pages_perso/jean.debord/tpmath/tpmath.htm。DMath / TPMath附带了优秀的文档 - 强烈推荐。 - iamjoosy
1
我使用了这个方法,它对我非常有效。我也回答了这个问题,因为每当我需要进行最小二乘曲线拟合时,我都会使用一个小的独立的单Pascal单元解决方案。请参见下面的我的答案。 - Warren P
很酷 @iamjoosy,@Frank。DMath看起来非常完整。 - rossmcm

2

在SysTools中除了一些特殊的三角函数之外,没有其他数学工具。 - Warren P
错误。请查看StStat.pas,其中包含大量的统计数学函数。不知道那里的回归函数是否有多项式回归。我认为你在不了解情况的情况下对我的回复进行了负评。 - Clóvis Valadares Junior

1

尽管您已经选择了一个答案,但为了完整起见,我想补充一下:

我们使用SDL Components的Math包,并且非常满意。

http://www.lohninger.com/delfcomp.html

这是一个经过深思熟虑的方案,完全符合我们的需求。

他的网站上还有许多其他有趣的工具。


我看过这个东西,而且它也非常好。如果你需要做很多事情,包括矩阵数学,这就是要做的事情。 - Warren P

1

不是我想要的(我需要Pascal源代码,而不是Excel),但仍然很有用。谢谢。 - rossmcm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接