Matlab - Maximos de una matriz

 
Vista:

Maximos de una matriz

Publicado por JA (3 intervenciones) el 24/11/2012 18:29:09
Necesito sacar los valores maximos de una matriz, por ejemplo si quiero sacar 7 valores aunque esten en la misma columna.
Con max solo puedo obtener los de cada columna o por filas :S

Me dan una matriz y no se su numero de filas maximas ni los maximos que piden.
Podria hacerlo comparando columnas?
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

Maximos de una matriz

Publicado por JA (3 intervenciones) el 24/11/2012 20:32:53
He conseguido realizarlo, el problema es que lo he echo para el caso de que me pidan 5 maximos, si me piden mas el programa fallaria.

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
51
52
53
54
55
56
57
58
M1=M;
        [max1,posi(1)]=max(max(M1))
 
        [n1,m1]=size(M1);
        for h1=1:n1
            for h2=1:m1
 
               if M1(h1,h2)==max1
                   M1(h1,h2)=0;
               end
            end
          end
        clear M1(max1);
 
       [ max2,posi(2)]=max(max(M1))
 
 
          for h1=1:n1
            for h2=1:m1
 
               if M1(h1,h2)==max2
                   M1(h1,h2)=0;
               end
            end
          end
 
 
          [max3,posi(3)]=max(max(M1))
 
            for h1=1:n1
            for h2=1:m1
 
               if M1(h1,h2)==max3
                   M1(h1,h2)=0;
               end
            end
            end
 
            [max4,posi(4)]=max(max(M1))
 
              for h1=1:n1
            for h2=1:m1
 
               if M1(h1,h2)==max4
                   M1(h1,h2)=0;
               end
            end
              end
          [max5,posi(5)]=max(max(M1))
 
                for h1=1:n1
            for h2=1:m1
 
               if M1(h1,h2)==max5
                   M1(h1,h2)=0;
               end
            end
                end


me devuelve los maximos y el numero de columna, con el for y el if recorro la matriz y borro el maximo, para que me obtenga los siguientes, he metido las posiciones en un array para el caso de que me pidan la columna con mas maximos.
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Maximos de una matriz

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/11/2012 01:28:14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear all
M=round(1000*rand(6,4));
n=input('Cantidad de maximos a buscar n=');
M1=M;
for i=1:n
    display(M1)
      [max1,columna(i)]=max(max(M1));
        display(['columna=',num2str(columna(i))])
        display(['max',num2str(i),'=',num2str(max1)])
        [n1,m1]=size(M1);
        for h1=1:n1
            for h2=1:m1
               if M1(h1,h2)==max1
                   M1(h1,h2)=0;
               end
            end
        end
end


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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
>> maximos_por_columnas
Cantidad de maximos a buscar n=3
 
M1 =
 
   762   347   694   906
   576    92   257   393
   748   148    10    25
   646   198   532   671
   123   672   279   837
   504   432   946   971
 
columna=4
max1=971
 
M1 =
 
   762   347   694   906
   576    92   257   393
   748   148    10    25
   646   198   532   671
   123   672   279   837
   504   432   946     0
 
columna=3
max2=946
 
M1 =
 
   762   347   694   906
   576    92   257   393
   748   148    10    25
   646   198   532   671
   123   672   279   837
   504   432     0     0
 
columna=4
max3=906
>> maximos_por_columnas
Cantidad de maximos a buscar n=2
 
M1 =
 
    57   727   285   933
   450   374   595   391
   582   582   962   273
   687   116   186   152
   719    58   193   397
   650   980   342   375
 
columna=2
max1=980
 
M1 =
 
    57   727   285   933
   450   374   595   391
   582   582   962   273
   687   116   186   152
   719    58   193   397
   650     0   342   375
 
columna=3
max2=962


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programacion Matlab
[email protected]

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