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
这说明书上给出的答案给出的结果,并不是最优。
具体求解代码,见附件。
用这个函数的拟合效果比树上给出的答案效果要好:
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
效果不如二项高斯分布~
本回答被提问者采纳你验证过答案吗?答案的效果很理想?
你的初始值怎么选的?尤其是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选项中,...