lsqcurvefit initial point is always a local minimum, relative first-order optimality is always = 0

5 ビュー (過去 30 日間)
I'm trying curve fit 8 datapoints to a cos wave using 2 variable parameters v:
v0 = [omega 3];
the range of datapoints I need to evaluate for this iteration is:
cur_data_wave_x = 0:p_locs(2)-p_locs(1);
in this case, the above is equal to 0:7
my function is:
F = @(v,cur_data_wave_x) amplitude*(offset + cos(v0(1)*(cur_data_wave_x) + v0(2)));
where amplitude, offset, and omega are constants. Im trying to find the frequency v(1) and phase shift v(2) of the datapoints compared to a theoretical curve F.
then I use lsqcurvefit:
[v,resnorm] = lsqcurvefit(F,v0,cur_data_wave_x,cur_data_wave_y);
where cur_data_wave_y is the raw data at cur_data_wave_x (shown in blue on graph below)
No matter how close to the correct values I select the initial values to be, no matter what the resnorm, no lsqcurvefit iterations occur, the initial point is always the local minimum, and the relative first-order optimality is always = 0.
Am I doing something dumb or using this function in a way it wasn't meant to be used?
In the figure below:
the blue curve is connecting the datapoints (cur_data_wave_x,cur_data_wave_y)
the red curve the function F with v(1) = omega and v(2) = 0
the green curve is the function F with the resulting v = v0, in this case v = v0 = [omega 3]
The goal would be for the green curve to almost overlap the blue curve, then I can use the v(1) and v(2) values for the next step of my code. I'm trying to iterate through several thousand of these waves, find the delta omega aka (omega-v(1)) and delta phi (phi - v(2)) of each. Each wave in the iterations will have a different v(1) and v(2) value.

採用された回答

J. Alex Lee
J. Alex Lee 2020 年 3 月 5 日
I think you have a typo here:
F = @(v,cur_data_wave_x) amplitude*(offset + cos(v0(1)*(cur_data_wave_x) + v0(2)));
should rather be
F = @(v,cur_data_wave_x) amplitude*(offset + cos(v(1)*(cur_data_wave_x) + v(2)));

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSolver-Based Nonlinear Optimization についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by