Script Matlab grille 4x4
Dernière modification
17/03/2015 14:43
—
Ce script permet, lorsqu'il est lancé sous le logiciel matlab, de trouver tous les numéros associés à chaque patron dans la base 10.
Cliquez ici pour obtenir le fichier
Taille 4.6 kB - Type du fichier text/x-objcsrcContenu du fichier
clc clear all n=4; %c'est la dimension %Définir M en fonction de n au cas ou n>4 %On part de M qui permet ensuite de trouver tous les résultats possibles %laissant invariant la grille carrée for k=1:n M(n+1-k,k)=1; end % Trouver les différents patrons cube dans une grille 4x4 % % Partir avec patron de base % % A1=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] % % 'Symétrie horizontale' % % M*A1 % % 'Symétrie verticale' % % A1*M % % 'Rotation 180 ° = symétrie centrale' % % M*A1*M % % 'Symétrie axiale \' % % A1' % % 'Symétrie axiale /' % % M*(M*A1)' % % 'Rotation +90°' % % M*(A1') % % 'Rotation -90°' % % (A1')*M %On rentre notre matrice à transformer % A1=zeros(n); R=zeros(n,16*n); ResultatM=zeros(16,1); PatronM=zeros(8,40); %Patron 1 J=0; %Entrer ici le patron du cube en laissant la translation vers le bas %possible PatronM(1:4,J*4+1:J*4+4)=[1 0 0 0;1 1 1 1;1 0 0 0; 0 0 0 0]; %Entrer le nouveau patron du cube après translation vers le bas PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 2 PatronM(1:4,J*4+1:J*4+4)=[1 1 0 0; 0 1 1 0;0 0 1 1; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 3 PatronM(1:4,J*4+1:J*4+4)=[0 0 0 1;1 1 1 1;1 0 0 0; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 4 PatronM(1:4,J*4+1:J*4+4)=[0 1 0 0;1 1 1 1;0 1 0 0; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 5 PatronM(1:4,J*4+1:J*4+4)=[1 1 0 0;0 1 1 1;0 1 0 0; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 6 PatronM(1:4,J*4+1:J*4+4)=[0 1 0 0;1 1 1 1;1 0 0 0; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 7 PatronM(1:4,J*4+1:J*4+4)=[0 0 1 0;1 1 1 1;0 1 0 0; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 8 PatronM(1:4,J*4+1:J*4+4)=[0 1 0 0;1 1 1 0;0 0 1 1; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 9 PatronM(1:4,J*4+1:J*4+4)=[1 1 0 0;0 1 1 1;0 0 0 1; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); J=J+1; %Patron 10 PatronM(1:4,J*4+1:J*4+4)=[0 0 1 0;1 1 1 1;1 0 0 0; 0 0 0 0]; PatronM(6:8,J*4+1:J*4+4)=PatronM(1:3,J*4+1:J*4+4); PatronM; for L=0:9 % On effectue tous les calculs sur les dix patrons A1=PatronM(1:4,L*4+1:L*4+4); A2=PatronM(5:8,L*4+1:L*4+4); %Calculs intermédiaires pour aider matlab B1=A1'; C1=(M*A1)'; B2=A2'; C2=(M*A2)'; %Mettre tous les résultats dans une matrice 4 , 16x4=64 for k=1:64 if k<=4 R(:,k)=A1(:,k);%Inchangée elseif k<=8 R(:,k)=M*A1(:,k-4);%Symétrie horizontale elseif k<=12 R(:,k)=A1*M(:,k-8);%Symétrie verticale elseif k<=16 R(:,k)=M*A1*M(:,k-12); elseif k<=20 R(:,k)=B1(:,k-16); elseif k<=24 R(:,k)=M*C1(:,k-20); elseif k<=28 R(:,k)=M*B1(:,k-24); elseif k<=32 R(:,k)=B1*M(:,k-28); elseif k<=36 R(:,k)=A2(:,k-32);%Translation vers le bas elseif k<=40 R(:,k)=M*A2(:,k-36); elseif k<=44 R(:,k)=A2*M(:,k-40); elseif k<=48 R(:,k)=M*A2*M(:,k-44); elseif k<=52 R(:,k)=B2(:,k-48); elseif k<=56 R(:,k)=M*C2(:,k-52); elseif k<=60 R(:,k)=M*B2(:,k-56); elseif k<=64 R(:,k)=B2*M(:,k-60); end end % Obtention de tous les résultats en base 10 en colonne S=zeros(16,1); %Ordre aléatoire for k=0:16^2-1 S(floor(k/16)+1,1)=S(floor(k/16)+1)+R(floor((k-16*floor(k/16))/4)+1,mod(k,4)+4*floor(k/16)+1)*2^(k-16*floor(k/16)); end %Enlève les doublons for k=1:16 for i=k+1:16 if S(k,1)==S(i,1) S(k,1)=0; end end end %Ordre décroissant for k=1:16 for i=k:16 if S(k,1)<S(i,1) b=S(k,1); S(k,1)=S(i,1); S(i,1)=b; end end end %Compte le nombre de zeros avec h initialisé à 0 h=0; for k=1:16 if S(k,1)==0 h=h+1; end end Resultat=zeros(16-h,1); for k=1:16-h Resultat(k,1)=S(k,1); end % %Ordre croissant % for k=1:(16-h)/2 % p=Resultat(k,1); % Resultat(k,1)=Resultat(16-h-k,1); % Resultat(16-h-k+1,1)=p; % end L+1 A1 Resultat; % ordre décroissant for k=1:16-h str=sprintf('(a-%d)*',Resultat(k,1)); disp(str) end ResultatM(1:16-h,L+1)=Resultat(:,1); end