我有一些简单的时间与位置数据,我试图使用任何matlab的优化函数。我给出了一个数据示例(以蓝色显示)和使用lsqnonlin时显示的正弦拟合(以红色显示)。 1
我知道我的拟合对初始条件有点敏感,但我也知道我的数据幅度非常接近~1且频率非常接近6 Hz。尽管使用接近实际值的初始猜测,但曲线拟合仅适用于我尝试拟合的每3条曲线中的大约1条。为什么这样的事情会发生?
作为参考,这里是我写的函数正在优化(注意:我的数据已经有均值= 0所以我不需要一个偏移项):
function [err,pred] = sine_fit2(k,x,y)
pred = k(1)*sin(2*pi*x./k(2))+k(3)*cos(2*pi*x./k(2));
err=(y-pred);
end
我在matlab中尝试了一些不同的优化函数,包括:lsqnonlin,lsqcurvefit,fminsearch,fminunc
我也开始玩初始条件(IC),并发现,例如,曲线A可能与IC#1很好地配合,但不适用于IC#2,而曲线B适合于使用IC#1,但在使用IC#2等时非常适合
看到数据非常干净,我真的很惊讶优化程序无法找到正确的参数。也许我做的事真的很傻!任何帮助/解释都非常感谢
编辑(11/6/2017 @ 7:30 AM) 以下是我调用优化的方法:
% initial guesses
k0 = [1,1/6,1];
% y = data I'm trying to fit
% t = independent variable (time)
[k_opt] = lsqnonlin(@(k)sine_fit2(k,t,y),k0,[],[],lsq_options);
[error,prediction] = sine_fit2(k_opt,t,y);
此外,这是我试图拟合的数据示例(请注意,我将y乘以100以获得更重要的数字):
t y*100
0 0.1225
0.0435 -0.0698
0.0870 -0.0550
0.1304 0.0410
0.1739 -0.0908
0.2174 -0.1034
0.2609 0.0671
0.3043 0.0044
0.3478 -0.0630
0.3913 0.1045
0.4348 0.1177
0.4783 -0.0324
0.5217 0.0332
0.5652 0.0886
0.6087 -0.0767
0.6522 -0.0867
0.6957 0.0586
0.7391 -0.0534
0.7826 -0.1024
0.8261 0.0948
0.8696 0.0441
0.9130 -0.1001
0.9565 0.0114
1.0000 0.0457