MATLAB: Genetic algorithm for curve fitting

curve fittinggenetic algorithmMATLABoptimization

Hello Everyone
I want to Fit a curve (called MFit) on another curve (called M)
MFit is a function and defined by the following relation:
MFit = M0 + c0 * (h * z – log(z – z0 / z0))
and M is a 100-element vector. I want to fit MFit on M by choosing the right value of c0. z is a 100-element vector and M0,h and z0 are constants. What I have in mind is to define a target function as
Fun1 = abs(M – MFit)
so that by minimzing it, MFit will be fit. This is my proposed method:
MFit = @(c0) (M0 + c0 * (z – h * log((z + z0) / z0)));
Fun1 = @(c0) abs(M – MFit);
rng default
C0 = ga(Fun1,1);
but things go wrong when I run the code. Can anybody help me how I may solve this problem with genetic algorithm?

Best Answer

I would do something like this (with ‘M’ and the constants already existing in your workspace):
MFit = @(c0,M0,h,z,z0) (M0 + c0 * (z - h * log((z + z0) / z0)));
Fun1 = @(c0) norm(M - MFit(c0,M0,h,z,z0));
c0_est = ga(Fun1, 1);
The fitness funciton must return a scalar value. (The ga call can be further optimised by using an optons structure.)
.