r=20;%moindre carré maximal testé
arret=500000;%critère d'arrêt
valeur=0;
e=21;
fprintf('21 équations\n');
v=5;
fprintf('5 variables\n');
n=1003;
fprintf('1003 sondés\n');
V=zeros(v,1)+round(n/v);
V(v)=V(v)-sum(V)+n;
W=V;
S=zeros(e,2);
j=1;
% A=[33,50,70,53,52;
%     45,44,26,39,37;
%     16,4,3,5,8;
%     6,2,1,3,3;
%     34,40,74,47,52;
%     28,34,20,36,28;
%     20,18,5,10,11;
%     18,8,1,7,9;
%     27,42,62,41,44;
%     40,41,31,38,36;
%     25,15,6,18,16;
%     8,2,1,3,4;
%     18,32,61,34,38;
%     42,47,33,47,41;
%     28,21,6,14,16;
%     12,0,0,5,5;
%     26,35,70,42,45;
%     24,31,20,28,25;
%     25,23,7,20,18;
%     25,11,3,10,12;
%     20,19,50,29,33;
%     27,36,38,38,34;
%     33,37,8,26,22;
%     20,8,4,7,11;
%     11,19,35,17,22;
%     24,22,40,39,33;
%     29,37,20,28,26;
%     36,22,5,16,19];

A=[53,50,61,50,50,52;
   36,41,28,39,37,37;
   8,8,8,5,12,8;
   3,1,3,6,1,3;
   52,51,63,44,52,52;
   29,28,21,34,24,28;
   9,15,11,11,13,11;
   10,6,5,11,11,9;
   43,40,48,45,42,44;
   39,37,40,33,35,36;
   14,20,7,18,18,16;
   4,3,5,4,5,4;
   40,38,41,34,40,38;
   38,44,40,41,41,41;
   17,13,17,19,12,16;
   5,5,2,6,7,5;
   44,49,57,44,37,45;
   29,21,24,20,30,25;
   14,19,10,22,22,18;
   13,11,9,14,11,12;
   27,37,41,33,31,33;
   38,34,28,32,37,34;
   21,20,25,23,23,22;
   14,9,6,12,9,11;
   19,23,29,20,20,22;
   38,30,32,31,35,33;
   24,34,22,28,22,26;
   19,13,17,21,23,19];
Rmin=zeros(e,1);
Rmax=zeros(e,1);
D=zeros(e,1);
E=zeros(e,1);
Amin=A-0.5;% les pourcentages donnés sont des arrondis (à +-0.5%)
Amin(:,v+1)=Amin(:,v+1)+1;%valeurs minimum, résultat maximum
Amax=A+0.5;
Amax(:,v+1)=Amax(:,v+1)-1;%valeurs maximum, résultat minimum
tic
while valeur<arret
    valeur=valeur+1;
    Rmin=100*(ceil(Amin(:,1:v)*W/100))/n;%...
    %Rmin et Rmax résultats obtenus
    Rmax=100*(floor(Amax(:,1:v)*W/100))/n;%...
    %ceil&floor car personnes entières
    S=[Rmin-Amin(:,v+1),Amax(:,v+1)-Rmax];%...
    %S permet de savoir si les résultats donnés sont dans la
    %fourchette des résultats possibles.
    S=(S+abs(S))/2;%; %les valeurs négatives passent à zéro
    s=sum((max(S')').^2);%somme des moindres carrés
    if s<r
        r=s%;
        V=W%;
    end
    if s==0;
        fprintf('\nV =\n\n');
        fprintf('%d\n',V);
        fprintf('\nd =\n\n%d\n',s);
%         J(:,j)=V;
%         j=j+1;
        valeur=arret+1;
    end
    W=V+round(ceil(sqrt(r)+2)*randn(v,1));
    W(v)=W(v)-sum(W)+n;
end

fprintf('\n\nCalcul terminé\n\n');
% V
% d=r
% J