用Mathematica拟合自定义函数

最近在处理大物实验的数据时经常会遇到各种线性和非线性的拟合问题。对于线性回归的计算,用Excel电子表格,甚至卡西欧计算器,都很容易完成。但是对于复杂函数的拟合,简单的软件却无能为力。大物实验这门课推荐的Origin软件,拟合自定义函数很麻烦(据说需要编译成dll动态链接库),而且我不是很喜欢它的操作方式和界面。所以我选择用Mathematica来拟合自定义函数。

Mathematica的帮助文档是个好东西,不需要联网就可以根据你想要做的事情搜索相应的函数。

我在帮助文档的“曲线拟合”中找到了Fit和FindFit等函数。阅读Fit的说明后发现,Fit函数只能用来拟合一些函数的线性组合而已,并不能用于所有的自定义函数,而FindFit可以拟合任意函数。

在FindFit的帮助文档中看到了一个例子:
findfit1

我要拟合的函数是\(a\ln\left( bx+1 \right)\)的形式,根据上面的例子可以很容易的写出代码:
findfit2

在这段代码中,首先把data赋值成一个原始数据的列表,然后定义model为a与b的函数,再用FindFit进行拟合,就可以看到a和b的值了。如果想把函数的图像和数据点画出来,先把a和b代入model得到modelf,最后用Plot画图就可以了,其中Epilog表示在图像上附带原始数据对应的点。

看起来拟合效果还是不错的。

《用Mathematica拟合自定义函数》有一个想法

  1. 你可以用NonlinearModelFit,这个还可以得到拟合系数等一大堆东西(当然不需要也不会显示)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注