Процедуры оптимизации Matlab не вписываются в простые синусоидальные данные

У меня есть несколько простых данных о времени и местоположении, которые я пытаюсь подогнать, используя любую из функций оптимизации Matlab. Я привел пример данных (показано синим цветом) и синусоидальной подгонки, которую я получаю при использовании lsqnonlin (показано красным). 1

Я знаю, что мои припадки несколько чувствительны к начальным условиям, но я также знаю, что амплитуда моих данных очень близка к ~1, а частота очень близка к 6 Гц. Несмотря на использование начальных предположений, близких к фактическим значениям, подгонка кривой работает только примерно на 1 из каждых 3 кривых, которые я пытаюсь подогнать. Почему могло случиться что-то подобное?

Для справки вот функция, которую я написал, которая оптимизируется (Примечание: мои данные уже имеют среднее значение =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 и т. д.

Поскольку данные довольно чистые, я очень удивлен, что процедуры оптимизации не могут найти правильные параметры. Может быть, я делаю что-то действительно глупое! Любая помощь / объяснения высоко ценится

РЕДАКТИРОВАТЬ (6/11/2017 @7:30 утра) Вот как я называю свою оптимизацию:

% 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 ответов

Другие вопросы по тегам