Home > source > robLySearch.m

robLySearch

PURPOSE ^

Calculate the stability of a system whit Homogeneous Lyapunov function.

SYNOPSIS ^

function [] = robLySearch( A, m )

DESCRIPTION ^

Calculate the stability of a system whit Homogeneous Lyapunov function.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 %Calculate the stability of a system whit Homogeneous Lyapunov function.
0002 
0003 function [] = robLySearch( A, m )
0004 
0005 digits(10);
0006 A = vpa(A);
0007 n = length(A);
0008 
0009 %Calculate the possible combination of monomial of degree m.
0010 hState = generateHomogeneousState(m, n);
0011 %Dimension of the homogeneous state vector
0012 d = factorial(n+m-1)/(factorial(n-1)*factorial(m));
0013 
0014 [scomposizioneAffineEstesa] = extendedAffine(A, n, m, hState, d);
0015 
0016 disp('Inserire i vertici del politopo nella formattazione [value1,value2,...,value3]: (Inserendo x/X termina)');
0017 condition = false;
0018 i = 1;
0019 while condition == false
0020     value = input('', 's');
0021     if strcmp(char(value), 'x') || strcmp(char(value), 'X')
0022         condition = true;
0023     else
0024         vertex{i} = eval(value);
0025         i = i + 1;
0026     end
0027 end
0028 
0029 sigma = 1/2*length(scomposizioneAffineEstesa{1})*(length(scomposizioneAffineEstesa{1})+1)-factorial(n+2*m-1)/(factorial(n-1)*factorial(2*m));
0030 
0031 for i=1:sigma*length(vertex)
0032     alfa{i} = sdpvar(1);
0033 end
0034 
0035 warning off;
0036 symL = generateSymsL(n, m, hState, d)
0037 sdpL = generateSdpVarL(symL, length(vertex));
0038 warning on;
0039 
0040 for i=1:length(sdpL)
0041     L{i} = eval(sdpL{i});
0042     %L{i}
0043 end
0044 
0045 for i=1:length(vertex)
0046     sum = scomposizioneAffineEstesa{1};
0047     for j=1:length(vertex{i})
0048         sum = sum + vertex{i}(j)*scomposizioneAffineEstesa{j+1};
0049     end
0050     matrixCalculatedOnVertex{i} = sum;
0051     %matrixCalculatedOnVertex{i}
0052 end
0053 
0054 P = sdpvar(length(scomposizioneAffineEstesa{1}));
0055 
0056 vincoli = 'set(P > 0) ';
0057 for i=1:length(vertex)
0058     vincoli = strcat(vincoli, '+ set(matrixCalculatedOnVertex{', num2str(i), '}''*P + P*matrixCalculatedOnVertex{', num2str(i), '} + L{', num2str(i),'} < 0) ');
0059     matriciPerITest{i} = strcat('double(matrixCalculatedOnVertex{', num2str(i), '}''*P + P*matrixCalculatedOnVertex{', num2str(i), '} + L{', num2str(i),'})');
0060 end
0061 
0062 %vincoli
0063 feas = eval(vincoli);
0064 %solvesdp(feas, [], sdpsettings('verbose', 0));
0065 solvesdp(feas);
0066 
0067 disp(' ');
0068 if sylvester(double(P))
0069     disp('La matrice P è simmetrica, definita positiva. Gli autovalori sono:');
0070 else
0071     disp('La matrice P non è simmetrica, definita positiva. Gli autovalori sono:');
0072 end
0073 vect = eig(double(P));
0074 disp(' ');
0075 for i = 1:length(vect)
0076     disp(['Lambda', num2str(i), ': ', num2str(vect(i))]);
0077 end
0078 
0079 disp(' ');
0080 for i=1:length(vertex)
0081     if definiteNegative(eval(matriciPerITest{i}))
0082        disp('Il vincolo è soddisfatto. Gli autovalori sono:');
0083     else
0084        disp('Il vincolo non è soddisfatto. Gli autovalori sono:');
0085     end
0086     vect = eig(eval(matriciPerITest{i}));
0087     disp(' ');
0088     for i = 1:length(vect)
0089         disp(['Lambda', num2str(i), ': ', num2str(vect(i))]);
0090     end
0091 end
0092 
0093 end

Generated on Thu 24-Sep-2009 17:17:32 by m2html © 2005