0001
0002
0003 function [] = robLySearch( A, m )
0004
0005 digits(10);
0006 A = vpa(A);
0007 n = length(A);
0008
0009
0010 hState = generateHomogeneousState(m, n);
0011
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
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
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
0063 feas = eval(vincoli);
0064
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