Error using lsqcurvefit: Function value and YDATA sizes are not equal.
8 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Max De Chastelain
le 4 Avr 2021
Réponse apportée : Matt J
le 4 Avr 2021
I am trying to use the lsqcurvefit function to fit a sine wave to a data set, however i get the following error:
Function value and YDATA sizes are not equal.
when running the following code:
A = 0.3;
omega = 1;
phi = 0.1;
c = 0.1;
constants = [A omega phi c];
fun = @(timearray,constants) A .* (sin((timearray .* omega) + phi)) + c;
fittedconstants = lsqcurvefit(fun,constants,timearray,anglearray);
plot(timearray,fun(timearray,fittedconstants));
The array "timearray" is a 1x10001 double, defined by:
timearray = 0:0.01:100;
and the "anglearray" is also a 1x1001 double, filled with experimental data.
I feel as if it may be due to the mathematical operators used in my function, I have tried removing the "." before the "*" but this doesn't seem to work. placing a "." before and after the "sin" operator yields more errors.
Cheers in advance, I hope the information given is enough for a solution.
Réponse acceptée
Matt J
le 4 Avr 2021
A = 0.3;
omega = 1;
phi = 0.1;
c = 0.1;
initialGuess = [A omega phi c];
fun = @(x,timearray) x(1) .* (sin((timearray .* x(2)) + x(3))) + x(4);
fittedconstants = lsqcurvefit(fun,initialGuess,timearray(:).',anglearray(:).');
plot(timearray,fun(fittedconstants, timearray));
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Linear Least Squares dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!