我如何回归适合一个SinWave数据集?

502次浏览(过去30天)
Clifford谢尔顿
Clifford谢尔顿 2012年4月30日
评论道: 德文郡科根2016年7月18日
我有一个数据集,我想让一个正弦波最适合绘制的数据集。我认为这个过程被称为回归…但我遇到的所有信息都是关于线性回归的。
任何帮助将是最感激!
1评论
Arjun Jaitli
Arjun Jaitli 2014年11月20日
我的问题是问Wayne King,当你最终绘制拟合曲线(yhat)和实际数据(y)时,这是误差还是实际数据和sin拟合之间的最小二乘差?

登录并发表评论。

接受的答案

韦恩王
韦恩王 2012年4月30日
你需要知道你想适合哪个时间段。你在另一篇文章中谈到了50年的城市人口。你没有说数据采样的频率是多少,我假设是每年。只需将数据替换为y(作为列向量)
t =(1:50)”;
X = 1 (50, 3);
X (:, 2) = cos(50(2 *π)/ * t);
X(: 3) =罪((2 *π)/ 50 * t);
y = 2 * cos((2 *π)/ 50 * t-pi / 4) + randn(大小(t));
y = y (:);
β= X、y;
yhatβ=β(1)+ (2)* cos(50(2 *π)/ * t) +β(3)*罪(50(2 *π)/ * t);
情节(t y“b”);
持有
情节(t, yhat“r”“线宽”2);
如果你有统计工具箱,你可以用regress()做同样的事情
如果你不知道周期,最好用傅里叶分析。
2的评论
德文郡科根
德文郡科根 2016年7月18日
您所得到的错误意味着您的列向量“Score”不包含501点数据。如果您试图将一条曲线拟合到一个只有25.7年的数据集,那么将您想要分析的26个数据点分离出来,并将所有的“501”更改为“26”。

登录并发表评论。

答案(1)

理查德·开松机
理查德·开松机 2012年5月1日
下面是一些简单的代码,演示了如何使用Statistics Toolbox的12a版本执行非线性回归。
注意:NonLinearModel。Fit要求您为各种参数提供启动条件。(提供良好的启动条件有助于确保优化求解器收敛于全局解而不是局部解)
% %生成一些数据
X = 2* pi*rand(0,1);
X = sortrows (X);
Y = 9 + 7*sin(2*X + 4*pi) + randn(100,1);
散射(X, Y)
生成一个合适的
注意,我们需要传递三组输入参数给NonLinearModel
% # X和Y数据
% #描述模型的字符串
优化求解器的起始条件
为求解器生成一些良好的启动条件
散射(X, Y)
持有
B0 =意味着(Y);%的垂直变化
B1 = (max(Y) - min(Y))/2;%振幅
B2 = 2;%相(峰数)
B3 = 0;%相移(观察曲线)
myFit = NonLinearModel.fit (X, Y,'y ~ b0 + b1*sin(b2*x1 + b3)', [b0, b1, b2, b3])
注意,除了b3之外,所有的系数估计都很好
%任何偶数都同样有效
查看完整的方法集
方法(myFit)
% %生成一个阴谋
持有
情节(X, myFit.Fitted)
持有
%%使用替代语法生成匹配
myFit2 = NonLinearModel。fit (X, Y, @ (b, X) (b b(1) +(2) *罪(b (3) * X + b (4))), [B0, B1, B2, B3])

标签

社区寻宝

在MATLAB中央找到宝藏,发现社区如何可以帮助你!

开始狩猎!