Clear Filters
Clear Filters

How do I find curve of best fit or create one manually to fit?

4 views (last 30 days)
angle = [45,50,55,60,65,70,75,80,85]';
P = [55.51, 69.5, 78.07, 82.06, 81.81, 77.3, 68.12, 53.42, 31.59]';
scatter(angle, P, 'bx');
%Also I apparently don't have the cftool so I can't use that I'm afraid.

Accepted Answer

Ameer Hamza
Ameer Hamza on 28 Apr 2020
Edited: Ameer Hamza on 28 Apr 2020
It looks like a parabols. If you have optimization toolbox, you can use lsqcurvefit to fit this equation (y=a*x^2+b*x+c) to the dataset.
angle = [45,50,55,60,65,70,75,80,85]';
P = [55.51, 69.5, 78.07, 82.06, 81.81, 77.3, 68.12, 53.42, 31.59]';
fun = @(a,b,c,angles) a*angles.^2 + b.*angles + c;
param_sol = lsqcurvefit(@(param, angles) fun(param(1),param(2),param(3),angles), rand(1,3), angle, P);
a_sol = param_sol(1);
b_sol = param_sol(2);
c_sol = param_sol(3);
plot(angle, P, 'bx', angle, fun(a_sol, b_sol, c_sol, angle), 'r-');
You can also do it without any toolbox. Following also fit a parabolic equation of form (y=a*x^2+b*x+c)
angle = [45,50,55,60,65,70,75,80,85]';
P = [55.51, 69.5, 78.07, 82.06, 81.81, 77.3, 68.12, 53.42, 31.59]';
X = [angle(:).^2 angle(:) ones(size(angle(:)))];
params = X\P(:);
P_estimated = X*params;
plot(angle, P, 'bx', angle, P_estimated, 'r-')

More Answers (0)

Community Treasure Hunt

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

Start Hunting!