要求:给出一组数据,按照 进行拟合,并求出未知参数,
导入数据
A = xlsread('data'); % 当前目录哦~
x = A(:,1);y = A(:,2);
进入工具箱:命令行输入cftool
,是这样子的一个页面:
读入数据后进行自定义函数拟合,
发现效果很差,这是正常现象哦,毕竟计算机没那么智能,能够一下子知道你在想什么,这时候我们需要人为调节,方法:尝试使用内置函数(方程形式与自定义函数方程形式相似),看一下拟合效果,然后根据内置函数拟合方程的系数,调节自定义方程的系数。
挨个使用内置函数后,发现内置Guass拟合效果最好,如图:
我们接下来就按照内置Guass函数的系数,进行调节我们自定义函数的系数,调节方法如下:
BingGo大功告成!!!
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中App下载Piecewise Fit(如何下载,百度一下哦,不讲那么细),我们按照数据先绘制散点图,然后进入Piecewise Fit工具箱,页面这样子滴:
这里我给出最简单的一次线性函数进行分段拟合,实际操作过程中,可根据自己的实际情况来哦。按照图上设置后还差一步,就是设置参数初值,点击Parameters,
这时候会出现如下的*“鬼样子”*,大家不要惊慌,点击迭代即可,如果迭代一次不行那就迭代两次!
继续迭代
BingGo大功告成!!!