首页/文章/ 详情

数据拟合那点事儿(X-Y Data)

1年前浏览2561
科研过程中,你是否被数据拟合弄得焦头烂额,以为需要编程?扎实的理论知识?跟着木木学拟合,教你分分钟拟合出自己想要的效果,还可以学一谢数学软件:Matlab、Mathematica、Origin,统统拿下,一起玩转拟合吧~

基于Matlab的数据拟合工具箱cftool

要求:给出一组数据,按照     进行拟合,并求出未知参数,

导入数据

A = xlsread('data'); % 当前目录哦~
x = A(:,1);y = A(:,2);

进入工具箱命令行输入cftool,是这样子的一个页面:

读入数据后进行自定义函数拟合,

发现效果很差,这是正常现象哦,毕竟计算机没那么智能,能够一下子知道你在想什么,这时候我们需要人为调节,方法:尝试使用内置函数(方程形式与自定义函数方程形式相似),看一下拟合效果,然后根据内置函数拟合方程的系数,调节自定义方程的系数。

挨个使用内置函数后,发现内置Guass拟合效果最好,如图:

我们接下来就按照内置Guass函数的系数,进行调节我们自定义函数的系数,调节方法如下:


BingGo大功告成!!!

基于Mathematica的内置函数


x = Range[0, 55, 5];
y = {0, 1.27, 2.16, 2.86, 3.44, 3.87, 4.15, 4.37, 4.51, 4.58, 4.62,
  4.64};
xy = Transpose[{x, y}];(*生成数据点*)
TableForm[xy];
f1[t_] = Fit[xy, {t, t^2, t^3}, t]
(*线性三次多项式拟合*)
error = y - f1[x];         (*误差*)
Q = Sqrt[Total[error^2]](*误差平方和的平方根*)
sub = FindFit[xy, t/(a t^2 + b t + c), {a, b, c}, t](*非线性拟合*)
f2[t_] = t/(a t^2 + b t + c) /. sub(*/.表示变量替换*)
error2 = y - f2[x];         (*误差*)
Q2 = Sqrt[Total[error2^2]]
Show[Plot[f1[t], {t, 0, 80}, PlotStyle -> {Blue}],
Plot[f2[t], {t, 0, 80}, PlotStyle -> {Red}],
ListPlot[xy], PlotStyle -> {Orange}]

输出如下:

0.261367 t - 0.00510837 t^2 + 0.0000344928 t^3
0.106261
{a -> 0.00118445, b -> 0.0837364, c -> 3.65202}
t/(3.65202 + 0.0837364 t + 0.00118445 t^2)
0.0704879

接下来在看一个例子


ClearAll;(*很重要哦*)
x = Range[100, 1000, 100];
y = 10^-3*{4.54, 4.99, 5.35, 5.65, 5.90, 6.10, 6.26, 6.39, 6.50, 6.59};
xy = Transpose[{x, y}];(*生成数据点*)
sub = FindFit[xy, a + b E^(-0.02 k*t), {a, b, k}, t];(*非线性拟合*)
f[t_] = a + b E^(-0.02 k*t) /. sub(*/.表示变量替换*)
error = y - f[x];         (*误差*)
Q = Sqrt[Total[error^2]](*误差平方和的平方根*)
Show[Plot[f[t], {t, 0, 1000}, PlotStyle -> {Blue}],
ListPlot[xy], PlotStyle -> {Red}]

输出如下:

0.00698504 - 0.00299408 E^(-0.00202455 t)
7.51868*10^-6

BingGo大功告成!!!

基于Origin的多线段数据拟合工具箱Piecewise Fit

重点讲一下Origin的Piecewise Fit工具箱,它是可以进行分段函数拟合的,接下来看一下讲解吧~首先在Origin中App下载Piecewise Fit(如何下载,百度一下哦,不讲那么细),我们按照数据先绘制散点图,然后进入Piecewise Fit工具箱,页面这样子滴:


这里我给出最简单的一次线性函数进行分段拟合,实际操作过程中,可根据自己的实际情况来哦。按照图上设置后还差一步,就是设置参数初值,点击Parameters,


这时候会出现如下的*“鬼样子”*,大家不要惊慌,点击迭代即可,如果迭代一次不行那就迭代两次!


继续迭代


BingGo大功告成!!!

来源:易木木响叮当
非线性理论MathematicaOrigin
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-01
最近编辑:1年前
易木木响叮当
硕士 有限元爱好者
获赞 217粉丝 246文章 347课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈