如何用matlab对这组数据曲线拟合?

x = [1970:2004];
y = [46808,49416,53094,57237,56677,56198,59673,61826,64158,65220,63108,60944,59543,58779,59882,60087,61825,63104,64963,66902,66443,67061,67273,67372,68679,69995,71522,73292,73932,75826,76954,78105,78439,79892,82631];
就是这样一组数据,函数的形式为:y=a+b*cos(c*x+d)+e*exp(f*x);
我试图用nfitlin和cftool里面自定义的函数进行拟合,效果都非常不理想。
按书上给出的答案,函数的系数分别为:a=31950;b=1557;c=0.605;d=-3159.659;e=1.183e-16;f=0.02369。
有哪位大神能帮一下忙么?

我用的matlab版本是2013b,可以的话最好用这个版本的程序给我解答,我发现这个版本还是和别的版本的界面差别蛮大的。。。

a =15019.08239,  b =  2345.431602,  c =0.5108014930,  d = -136.6872430, e =0.5309357832e-8, f =0.1503166632e-1

剩余平方和SSE:148234466.9758
相关系数R-square:0.94084
剩余标准差RMSE:2119.4229

 

按书上给出的答案,其

剩余平方和SSE:367174768.0736
相关系数R-square:0.85346
剩余标准差RMSE:3335.6421

这说明书上给出的答案给出的结果,并不是最优。

具体求解代码,见附件。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-04

用这个函数的拟合效果比树上给出的答案效果要好:

f(x) =  a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2)

拟合结果如下:

General model Gauss2:

     f(x) =  a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2)

       where x is normalized by mean 1987 and std 10.25

Coefficients (with 95% confidence bounds):

       a1 =    8.28e+19  (-1.89e+23, 1.892e+23)

       b1 =       433.1  (-2.802e+04, 2.888e+04)

       c1 =        73.4  (-2340, 2487)

       a2 =        9194  (7087, 1.13e+04)

       b2 =     -0.9514  (-1.025, -0.8779)

       c2 =      0.4332  (0.2931, 0.5733)


Goodness of fit:

  SSE: 5.391e+07

  R-square: 0.9785

  Adjusted R-square: 0.9748

  RMSE: 1363


而直接将树上的拟合结果带进去,求得拟合优度为:

sse: 1.9653e+08

       rsquare: 0.9216

           dfe: 29

    adjrsquare: 0.9080

          rmse: 2.6032e+03

效果不如二项高斯分布~

本回答被提问者采纳
第2个回答  2014-02-04

    你验证过答案吗?答案的效果很理想?

    你的初始值怎么选的?尤其是cos项的频率如果初值设置不当就很难找到正解了。

    观察一下数据,发现非常变态:x和y都离谱且不必要的大。所以先把x改成从0开始,y的偏置减小一下,比如均值归0。而且cos项是非常难以拟合的,可以先去掉,这样至少能先到一个结果。

matlab实现曲线拟合
接着,定义一组新的点xx,范围从0到150,以0.1为步长。根据系数向量p计算在xx点处的函数值yy。通过“plot(xx, yy, '-r', x, y, 'markersize', 20)”命令绘制图像。红色曲线表示根据当前数据拟合的函数,浅蓝色曲线代表原始数据。最终得到的拟合系数向量为p = [-0.9471, 252.3559]。图1...

如何利用MATLAB对数据进行曲线拟合
(1)点击“Data”按钮,弹出“Data”窗口;(2)利用X data和Y data的下拉菜单读入数据x,y,可修改数据集名“Data set name”,然 后点击“Create data set”按钮,退出“Data”窗口,返回工具箱界面,这时会自动画出数 据集的曲线图;(3)点击“Fitting”按钮,弹出“Fitting”窗口;(4)点击...

利用Matlab进行曲线拟合
进行一阶多项式拟合:`P=polyfit(x,log(y),1);`,对`x`和`ln(y)`进行拟合。计算拟合曲线值:`yi=exp(polyval(P,x));`绘制结果包括原始数据点、拟合曲线和理论曲线,通过比较`yi`和`y`的值,可以评估拟合误差。误差通过计算`yi-y`得到,并绘制在X轴对齐的图上。

matlab中curve fitting tool(曲线拟合工具)
方式1:在 MATLAB 命令行中输入`cftool`命令即可直接进入工具窗口。 方式2:在主菜单中选择“应用程序”->“CurveFitting”。 准备数据 在 MATLAB 命令行中输入要拟合的数据。选择曲线拟合 在曲线拟合工具左侧,给拟合曲线命名。 从下拉菜单中选择数据。 选择拟合类型 从“Custom Equations”...

matlab曲线拟合
在MATLAB中进行曲线拟合,可以通过多种方法实现,其中常用的是使用MATLAB内置函数进行拟合。具体步骤如下:1. 数据准备:首先,需要准备要进行拟合的数据,包括自变量和因变量。2. 选择拟合函数:根据数据的特点和需要,选择合适的拟合函数,如多项式拟合、指数拟合、正弦拟合等。3. 使用MATLAB内置函数进行拟合...

怎么在matlab中对离散点进行曲线拟合,求参数!
拟合出f(x)分布的系数 然后,根据xy分别是离散点的横纵坐标(数值至少10组以上)首先,进行参数估计 p(Xn;P)*p(X2。然后求一个P。不妨假设有高斯噪声干扰ML估计是这个意思,现在只需要写出上面的概率密度函数就可以了。按你的模型,数据X的分布是与参数有关的.,理想情况下数据y是由完全由参数...

matlab如何拟合数据?
1、在使用cftool拟合好理想的曲线后,点击File下的Generate Code,MATLAB会自动生成一个未命名的function,自行保存到工作文件夹。此处注意,默认的函数名叫createFit(XX,YY,、、、),可根据个人需要修改。2、回到、m文件,在需要拟合函数的那一步,键入"fitresult,gof=createFit(XX,YY,、、、);"...

MATLAB最小二乘法对一组符合高斯分部的数据进行曲线拟合,得到数学期望...
查一下数据 有问题没有 我输入后发现,x是1*100,y是1*99 我将x变成1:99后,用高斯函数拟合 的结果如下:General model Gauss1:f(x) = a1*exp(-((x-b1)\/c1)^2)Coefficients (with 95% confidence bounds):a1 = 2.093e+004 (2.06e+004, 2.125e+004)b1 = 60.95 (60...

matlab 数据拟合
在进行 MATLAB 数据拟合时,可以使用sftool工具箱进行操作。具体步骤如下:1. 首先,准备数据集。例如,我们有三个数组x、y、z。x=[565.454 562.058 561.39 563.782 567.941 571.255 571.938 569.5];y=[528.012 525.544 521.447 518.108 517.407 519.857 523.953 527.356];z=[1....

matlab如何做线性拟合
首先,最常用的线性拟合可以通过内置的多项式拟合功能实现。在命令窗口中,输入自变量x和因变量y,使用polyfit函数进行操作。例如,若要进行二次多项式拟合,只需键入p = polyfit(x,y,2)。若需拟合更高阶的多项式,只需调整括号中的数字即可。另一种方法是利用MATLAB自带的曲线拟合工具。在APPS选项中,...

相似回答