Matlab优化程序无法适应简单的正弦数据

时间:2017-11-04 21:40:36

标签: matlab optimization nonlinear-optimization sine-wave

我有一些简单的时间与位置数据,我试图使用任何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  

0 个答案:

没有答案
相关问题