Nonlinear least square minimization

I want to perform a nonlinear least square minimization of the form
Minimize(Sum((Y - F (X ; a, b, c))^2))
Where Y is a vector of response variable; X is a 5 element vector of parameter and a, b and c are vectors of input data. F has the following form:
F = X(5)* Scalar1.* Scalar2.* c;
Scalar 1 is defined as follows.
if X(2)<a<X(1)
Scalar1=((a-X(2))/((X(1)-X(2));
elseif a<=X(2)
Scalar1=0;
elseif a>=X(1)
Scalar1=1;
else
end;
The Scalar2 has a similar definition
if X(4)<b<X(3)
Scalar2 = ((-1)/(X(3)-X(4))).*(b-X(4))+1;
elseif b>=X(3)
Scalar2=0;
elseif b<=X(4)
Scalar2=1;
else
end;
As you can see, I have a function F whose very definition depends on the optimized parameters.
Can someone provide me any lead about where to look for any guidance to solve a problem like this. Any specific keyword/phrase that will help me Google search relevant books, articles will be of great help.

 Risposta accettata

Steve Grikschat
Steve Grikschat il 20 Apr 2011

0 voti

Your answer looks ok. lsqnonlin is a good choice. You could also look at lsqcurvefit:
which handles the the responses (Y) and fixed parameters (a,b,c - lsqcurvefit calls this X) automatically. The results would be the same (assuming you've set up lsqnonlin properly) since lsqcurvefit uses the same algorithms as lsqnonlin.
I can't be sure, but there could be problems with the non-smoothness of your function (the piecewise definition). If it works though, that's good.

1 Commento

Manish
Manish il 20 Apr 2011
Thanks a lot for your response. I have nonoverlapping bounds on different parameters, so i guess non-smoothness is not a problem.

Accedi per commentare.

Più risposte (1)

Manish
Manish il 20 Apr 2011
This is how I am defining my objective function
function F = myObjective(X, a, b, c, Y)
index1=a>=X(1);
index2=a<=X(2);
Scalar1=(a-X(2))./(X(1)-X(2));
Scalar1(index1)=1;
Scalar1(index2)=0;
index1=b<=X(4);
index2=b>=X(3);
Scalar2=(X(4)-b)./(X(3)-X(4));
Scalar2(index1)=1;
Scalar2(index2)=0;
F = Y-X(5).* Scalar1.*Scalar2.*c;
I then call 'F' with lsqnonlin.
It gives reasonable answers.
Can someone comment if this is correct.

Categorie

Scopri di più su Get Started with MATLAB in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by