Matlab - Comparar pares de elementos matriz

   
Vista:

Comparar pares de elementos matriz

Publicado por Francisco (18 intervenciones) el 29/05/2015 05:12:47
Hola a todos,

Queria molestar de nuevo, ya que no he podido solucionar un problema. Necesito comparar pares de elementos de una matriz (por fila), pero ademas algunas operaciones una vez comparado. Me explico, tengo la siguiente matriz.

1
2
3
4
A=[300 105 110 100;
      100 140 300 105];
      10 140 300 200];
      10 25 300 310];


Necesito comparar valores dentro de una fila y ver que tanto cerca estan unos de otros, si los valores estan dentro de un rango de +/- 20 entre ellos los conservo, si no que se rellene con NaN. Por ejemplo esta primera fila tengo que los tres ultimos estan en el rango y el primero no, entonces mi nueva fila seria

1
B(1)=[NaN 105 110 100];

y la segunda

1
B(2)=[100 NaN Nan 105];


En el caso de que ninguno se aproxime a otro, simplemente la fila rellenarla con NaN. Como es el caso de la tercera.

1
B(3)=[NaN NaN Nan NaN];

El ultimo caso es que si tengo dos nucleos (dos pares cerca y los otros dos pares cerca pero no de los primeros), como la fila 4, simplemente rellene con NaN.

1
B(4)=[NaN NaN Nan NaN];


Espero me puedan ayudar, llevo varios dias peliando con esto, y no lo he podido resolver del todo. Tambien espero haberme explicado bien.

Saludos y gracias de ante mano.

Francisco

PD: sorry por los acentos, no tengo.
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 Daniel

Comparar pares de elementos matriz

Publicado por Daniel (212 intervenciones) el 01/06/2015 17:30:13
Lo único que se me ocurrió es esto, no es muy compacto pero creo que anda bien (por las dudas chequealo con otras matrices)

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
33
34
35
36
37
38
39
40
41
42
43
44
45
clc
clear all
a=[300 105 110 100;
    100 140 300 105;
    10 140 300 200;
    10  25 300 310];
 
[c, d]=sort(a,2);
 
for i=1:size(a,1)
    s=size(find((c(i,2:4)-c(i,1))<20),2);
    switch s
        case 2
            c(i,4)=NaN;
        case 0
            c(i,1)=NaN;
            s3=size(find((c(i,3:4)-c(i,2))<20),2);
            switch s3
                case 0
                    c(i,2)=NaN;
                    s4=size(find((c(i,4)-c(i,3))<20),2);
                    if s4==0
                        c(i,3)=NaN;
                        c(i,4)=NaN;
                    end
                case 1
                    c(i,4)=NaN;
            end
        case 1
            s2=size(find((c(i,4)-c(i,3))<20),2);
            switch s2
                case 0
                    c(i,3)=NaN;
                    c(i,4)=NaN;
                case 1
                    c(i,1)=NaN;
                    c(i,2)=NaN;
                    c(i,3)=NaN;
                    c(i,4)=NaN;
            end
    end
    b(i,d(i,:))=c(i,:);
end
 
disp(b)

Avisame como fue

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Comparar pares de elementos matriz

Publicado por Francisco (18 intervenciones) el 08/06/2015 11:45:16
Disculpa la demora en contestar. Me funciono muy bien. Gracias!
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

Comparar pares de elementos matriz

Publicado por Francisco (18 intervenciones) el 10/06/2015 11:55:52
Hola Daniel;

Necesito tu ayuda, el script me funciona perfecto, de nuevo gracias. Pero me surgio un problema, lo que pasa es que estoy trabajando con angulos. Entonces debo considerar que 360 es igual a 0, por lo que un par de angulos por ejemplo 355 y 10 cumple la condicion. Trate de modificar tu codigo para consider este gran detalle, pero no lo logre. Me podrias ayudar?

Saludos y gracias
Francisco
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 Daniel

Comparar pares de elementos matriz

Publicado por Daniel (212 intervenciones) el 11/06/2015 00:45:00
A ver lo rehíce un poco porque no me era muy facil de la forma que esta hecho para cambiar lo que pedías:

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
clc
clear all
a=[300 105 110 100;
    100 140 300 105;
    10 140 300 200;
    10  25 300 310];
 error=20;
c=a;
 
for i=1:size(a,1)
    s1=cosd(c(i,1)-c(i,2))>cosd(error);s2=cosd(c(i,1)-c(i,3))>cosd(error);
    s3=cosd(c(i,1)-c(i,4))>cosd(error);s4=cosd(c(i,2)-c(i,3))>cosd(error);
    s5=cosd(c(i,2)-c(i,4))>cosd(error);s6=cosd(c(i,3)-c(i,4))>cosd(error);
 
    v=logical([s1 s2 s3 s4 s5 s6]);
 
    v1=logical([0 0 0 0 0 1]);v2=logical([0 0 0 0 1 0]);
    v3=logical([0 0 0 1 0 0]);v4=logical([0 0 0 1 1 1]);
    v5=logical([0 0 1 0 0 0]);v6=logical([0 1 0 0 0 0]);
    v7=logical([0 1 1 0 0 1]);v8=logical([1 0 0 0 0 0]);
    v9=logical([1 0 1 0 1 0]);v10=logical([1 1 0 1 0 0]);
   v11=logical([1 1 1 1 1 1]);
 
   p1=[1,2];p2=[1,3];p3=[1,4];p4=[1];p5=[2,3];
   p6=[2,4];p7=[2];p8=[3,4];p9=[3];p10=[4];p11=[];
 
   s=0;
   for j=1:11
       eval(['vj=v' num2str(j) ';'])
       if v==vj
           s=j;
       end
   end
 
   switch s
       case 0,a(i,:)=NaN;
       case 1,a(i,p1)=NaN;
       case 2,a(i,p2)=NaN;
       case 3,a(i,p3)=NaN;
       case 4,a(i,p4)=NaN;
       case 5,a(i,p5)=NaN;
       case 6,a(i,p6)=NaN;
       case 7,a(i,p7)=NaN;
       case 8,a(i,p8)=NaN;
       case 9,a(i,p9)=NaN;
       case 10,a(i,p10)=NaN;
       case 11,a(i,p11)=NaN;
   end
end
disp(a)


Espero que funcione bien, cualquier cosa avisame

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Comparar pares de elementos matriz

Publicado por Francisco (18 intervenciones) el 11/06/2015 03:56:44
Muchas racias, funciona muy bien. Ocupe los dos por cierto, estoy trabajando con angulos y velocidad, asi que los dos me sirvieron.
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