MATLAB: Fitting unknowns to a curve with minimized error

curve fittingparameter

I have a series of equations I am trying to fit to a data set (x) separately:
for example:
(a+b*c)*d = x
a*(1+b*c)*d = x
x = 1.9248 3.0137 4.0855 5.0097 5.7226 6.2064 6.4655 6.5108 6.3543 6.0065
c= 0.0200 0.2200 0.4200 0.6200 0.8200 1.0200 1.2200 1.4200 1.6200 1.8200
d = 1.2849 2.2245 3.6431 5.6553 8.3327 11.6542 15.4421 19.2852 22.4525 23.8003
I know c, d and x – they are observations. My unknowns are a and b, and should be constant.
I have tried fsolve and polyfit at the recommendation of others – the polyfit gives a very poor fit. What should I do?
Note: I have asked on SO and this code section was written by Prashant. Another author Emmet suggested a similar strategy using polyfit.
(a+b*c)*d = x
p = polyfit(c, x./d, 1);
a = p(2);
b = p(1);
a*(1+b*c)*d = x
p = polyfit(c, x./d, 1);
a = p(2);
b = p(1) / a;
I'm trying to learn how to fit curves with data instead of curve fitting using the Matlab tool. If someone could show me a general example or use my numbers as an example that I could follow and learn, that would be a brilliant thing 🙂 Thank you for your time.

Best Answer

This doesn't seem like a bad fit to me.
x = [1.9248 3.0137 4.0855 5.0097 5.7226 6.2064 6.4655 6.5108 6.3543 6.0065];
c = [0.0200 0.2200 0.4200 0.6200 0.8200 1.0200 1.2200 1.4200 1.6200 1.8200];
d = [1.2849 2.2245 3.6431 5.6553 8.3327 11.6542 15.4421 19.2852 22.4525 23.8003];
p = polyfit(c,x./d,1);
a = p(2);
b = p(1);
figure
plot(c,x./d,'.',c,a+b*c)
Were you expecting something better than linear?
p_2nd = polyfit(c,x./d,2);
figure
plot(c,x./d,'.',c,p_2nd(1)*c.^2+p_2nd(2)*c+p_2nd(3))