2011-12-18 17:33:08 +01:00
|
|
|
function [dr,info]=AIM_first_order_solver(jacobia,M,dr,qz_criterium,nd)
|
|
|
|
|
|
|
|
info = 0;
|
|
|
|
|
|
|
|
[dr,aimcode]=dynAIMsolver1(jacobia,M,dr);
|
2011-12-17 17:35:42 +01:00
|
|
|
|
2011-12-18 17:33:08 +01:00
|
|
|
if aimcode ~=1
|
|
|
|
info(1) = aimcode;
|
|
|
|
info(2) = 1.0e+8;
|
|
|
|
return
|
|
|
|
end
|
|
|
|
[A,B] =transition_matrix(dr);
|
|
|
|
dr.eigval = eig(A);
|
|
|
|
nd = size(dr.kstate,1);
|
|
|
|
nba = nd-sum( abs(dr.eigval) < qz_criterium );
|
2011-12-17 17:35:42 +01:00
|
|
|
|
2011-12-18 17:33:08 +01:00
|
|
|
nyf = dr.nfwrd+dr.nboth;
|
2011-12-17 17:35:42 +01:00
|
|
|
|
2011-12-18 17:33:08 +01:00
|
|
|
if nba ~= nyf
|
|
|
|
temp = sort(abs(dr.eigval));
|
|
|
|
if nba > nyf
|
|
|
|
temp = temp(nd-nba+1:nd-nyf)-1-qz_criterium;
|
|
|
|
info(1) = 3;
|
|
|
|
elseif nba < nyf;
|
|
|
|
temp = temp(nd-nyf+1:nd-nba)-1-qz_criterium;
|
|
|
|
info(1) = 4;
|
2011-12-17 17:35:42 +01:00
|
|
|
end
|
2011-12-18 17:33:08 +01:00
|
|
|
info(2) = temp'*temp;
|
|
|
|
return
|
2011-12-17 17:35:42 +01:00
|
|
|
end
|
2011-12-18 17:33:08 +01:00
|
|
|
|