Partendo dalle due matrici A e B, un possibile approccio potrebbe essere:
[*] cercare le occorrenze del primo elemento della matrice B in A (con la funzione "find" che ritorna gli indici riga e colonna delle occorrenze)
[*] per ognuna delle occorrenze, verificare se l'elemento a "destra" (stessa riga, colonna successiva) dell'elemento trovato sia uguale al corrispondente elemento della matrice B
[*] in caso positivo, c'è a possibilità di aver individuato una occorrenza d B in A
[*] per verificarlo, estraiamo da A una sotto-matrice della dimensione di B, partendo dalla posizione del primo elemento trovato
[*] sottraiamo questa sotto-matrice alla matrice B
[*] se la matrice risultato contiene solo "0" abbiamo trovato un'occorrenza di B in A
% Define the "Big" matrix
A=[ 13 25 19 10 26 15 29 18 1 17
33 28 20 14 19 18 5 19 6 5
10 2 11 32 28 10 27 17 6 30
31 11 32 8 24 14 23 23 6 7
33 20 7 15 10 21 6 21 21 15
18 5 7 10 11 32 20 28 28 14
29 9 31 16 20 7 11 27 8 20
8 4 32 10 21 19 29 31 27 6
25 14 21 32 5 10 5 29 13 32
3 29 23 24 24 15 7 15 9 1];
% Define the "Small" matrix
B=[11 32
20 7];
% Get the size of the Small matrix
sa=size(B,2);
% Get the first element of the Small matrix (just not to use x(1,1)
b11=B(1,1);
% Get the second element of the Small matrix (just not to use x(1,2)
b12=B(1,2);
% Find the locatino of the first element of the Small matrix in the Big matrix
[r,c]=find(A(1:end-sa+1,1:end-sa+1) == b11);
% Get the number of occurrence of the first element of the Small matrix in the Big matrix
n_f=length(r);
% Initialize the counter of the Small matrices found
found_cnt=0;
% Initialize the matrix to hold the output
output_data=[];
% Loop over the found occurrence
for i=1:n_f
% If the element next (on the same row) to the found element is equal to the
% second element of the Small matrix, the Small matrix could be there
if(A(r(i),c(i)+1) == b12)
% Get a sub-matrix of the Big matrix of the size of the Sall matrix
% and subtract the Small matrix from the extracted sub-matrix
tmp=A(r(i):r(i)+sa-1,c(i):c(i)+sa-1)-B
% If the resultis a matrix of "0" the Small matrix has been found in the
% Big matrix then increment the counter and store the row, column indices
% and the flag
if(~any(tmp(:)))
found_cnt=found_cnt+1;
output_data(found_cnt,:)=[r(i) c(i)]
end
end
end
Nel caso le matrici A e B abbiano valori "reali" e non interi, la differenza tra le matrici deve essere confrontata non con "0", ma con un valore di soglia opportunamente piccolo (es. 1.0e-5)