How to avoid complex eigenvalues of the matrix in its non-linear regression? (lsqcurvefit)
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Vipultomar
el 14 de En. de 2017
Comentada: Vipultomar
el 14 de En. de 2017
Hi, I am working on fitting my data (X,Y) to a theoretical model of ten unknown parameters (to be optimized). I am using nonlinear regression by lsqcurvefit, where for given X(j)(each data point of X) the output of the function is one of the eigenvalue of a 4x4 (nonsymmatric but real elements matrix). e.g.
function y=funct_name(parameters,X,Y)
y=[]
for j=length(X);
L=eig([a+b*exp(X(j)*b),c*b*exp(X(j)*c)....;c+a*exp(X(j)*b)....]); %a,b,c etc are parameters
y=[y,L(2)];
end
y(output)=L(2);
Now the problem is that for given initial values of parameters (a,b,c.. etc) I am getting imaginary values of eigenvalues as well as of the parameters. I have tried changing intitial parameters but it doesn't seem to be working much. Is there any way to avoid complex values in the output of function. Also my function seems to be not going through many iterations, for which I tried changing step size (by optimset) but it changes the algorithm to trust region reflective by itself. However I want to use levenberg-marquardt only. Thanks
0 comentarios
Respuesta aceptada
John D'Errico
el 14 de En. de 2017
Eig returns complex eigenvalues because the matrix has complex eigenvalues. This is not an eig problem, or anything you can control using eig.
You need to consider why a matrix has complex eigenvalues. Generally, complex eigenvalues will not result for symmetric matrices, but there are other non-symmetric matrices with real eigenvalues.
Finally, using the second eigenvalue of a matrix as returned by eig is a foolish thing to do. Eig does not guarantee to always generate the eigenvalues in the same order. So always taking the second eigenvalue will potentially create a function that is poorly posed, and even non-differentiable. That would of course cause the solver to fail miserably, perhaps one of the problems you have.
3 comentarios
John D'Errico
el 14 de En. de 2017
Editada: John D'Errico
el 14 de En. de 2017
No. eig is all there is.
You can sort the eigenvalues in descending order. But if you get complex eigenvalues, sort works on the magnitude of the numbers, so be careful.
Or, you can use my eigenshuffle code (on the file exchange), which tries to consistently reshuffle the eigenvalues and eigenvectors from a sequence of eigenvalue problems.
Más respuestas (0)
Ver también
Categorías
Más información sobre Linear Algebra en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!