当前位置:   article > 正文

数据拟合那点事儿(X-Y Data)_origin分段函数拟合

origin分段函数拟合

科研过程中,你是否被数据拟合弄得焦头烂额,以为需要编程?扎实的理论知识?跟着木木学拟合,教你分分钟拟合出自己想要的效果,还可以学一谢数学软件:Matlab、Mathematica、Origin,统统拿下,一起玩转拟合吧~
获取数据源文件及代码方法,见文末

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

要求:给出一组数据,按照 y = a + b e − ( x − c ) 2 2 d 2 y=a+be^{-\frac{\left( x-c \right) ^2}{2d^2}} y=a+be2d2(xc)2 进行拟合,并求出未知参数,

导入数据

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

进入工具箱:命令行输入cftool,是这样子的一个页面:
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}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

输出如下:

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
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

接下来在看一个例子

在这里插入图片描述

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}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

输出如下:

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

在这里插入图片描述

BingGo大功告成!!!

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

继续迭代

在这里插入图片描述

BingGo大功告成!!!

今天的分享就到此为止啦,在公众号:易木木响叮当后台回复:数据拟合,即可自动获取:数据文件及源代码!我们下次再见啦。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/90315
推荐阅读
相关标签
  

闽ICP备14008679号