Matlab - ENCONTRAR LAS VECES QUE SE REPITE UNA MATRIZ DENTRO DE OTRA

 
Vista:
Imágen de perfil de Javier

ENCONTRAR LAS VECES QUE SE REPITE UNA MATRIZ DENTRO DE OTRA

Publicado por Javier (16 intervenciones) el 12/02/2017 13:40:35
Buenos días a todos:
Tengo que encontrar el nº de veces que se encuentra repetida una matriz "pequeña" dentro de otra mas "grande".
El programa que he realizado es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function m = mi_encuentra3(A,B)
nF=4;    %Nº de filas de la matriz de entrada A
nC=4;    %Nº de columnas de la matriz de entrada A
nf=2;    %Nº de filas de la matriz de entrada B
nc=2;    %Nº de columnas de la matriz de entrada B
n_compara_filas=nF-nf+1; %Nº de comparaciones ha realizar por filas
n_compara_columnas=nC-nc+1; %Nº de comparaciones ha realizar por columnas
m=0;    %Variable que contabiliza las matrices B encontradas en A
 
%Metemos en "m" el nº de veces que se repite la matriz "B" en "A"
for i=1:n_compara_filas
    for j=1:n_compara_columnas
        existe=1;%Suponemos de inicio que en la 1ª comparacion la matriz "B" esta en "A" 
        for x=1:nf
            for y=1:nc
                if (B(x)(y)~=A(i+x-1)(j+y-1)) %Comparamos el primer termino de ambas matrices  
                    existe=0; %Si es distinto la matriz "B" no esta en esa posicion 
                end
            end
        end
    if existe==1; %Si se cumple el "if" anterior
        m=m+1;  %Aumentamos el nº de matrices encontradas en una unidad
    end
    end
end

Sin embargo, cuando la llamada a la función me sale el siguiente mensaje de error:

Error: File: mi_encuentra3.m Line: 16 Column: 21
()-indexing must appear last in an index expression.

y no entiendo por que.

Muchas gracias y un saludo a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

ENCONTRAR LAS VECES QUE SE REPITE UNA MATRIZ DENTRO DE OTRA

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/02/2017 16:06:39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function m = mi_encuentra3(A,B)
if nargin==0
    A=20*ones(4);
    A(2,3)=5;
    A(4,1)=8;
    B=20*ones(2);
end
A, B
nF=4; %Nº de filas de la matriz de entrada A
nC=4; %Nº de columnas de la matriz de entrada A
nf=2; %Nº de filas de la matriz de entrada B
nc=2; %Nº de columnas de la matriz de entrada B
n_compara_filas=nF-nf+1; %Nº de comparaciones ha realizar por filas
n_compara_columnas=nC-nc+1; %Nº de comparaciones ha realizar por columnas
m=0; %Variable que contabiliza las matrices B encontradas en A
 
%Metemos en "m" el nº de veces que se repite la matriz "B" en "A"
for i=1:n_compara_filas
    for j=1:n_compara_columnas
        existe=1;%Suponemos de inicio que en la 1ª comparacion la matriz "B" esta en "A" 
        for x=1:nf
            for y=1:nc
                if (B(x,y)~=A(i+x-1,j+y-1)) %Comparamos el primer termino de ambas matrices 
                    existe=0; %Si es distinto la matriz "B" no esta en esa posicion 
                end
            end
        end
        if existe==1; %Si se cumple el "if" anterior
            m=m+1; %Aumentamos el nº de matrices encontradas en una unidad
        end
    end
end


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>> m = mi_encuentra3
 
A =
 
    20    20    20    20
    20    20     5    20
    20    20    20    20
     8    20    20    20
 
 
B =
 
    20    20
    20    20
 
 
m =
 
     4


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier

ENCONTRAR LAS VECES QUE SE REPITE UNA MATRIZ DENTRO DE OTRA

Publicado por Javier (16 intervenciones) el 12/02/2017 16:59:52
Muchisimas gracias.
Tenía un error de notación en la línea 23.
Qué tontería más grande!
Gracias otra vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar