Matlab - ORDENAR FILAS DE UNA MATRIZ SIN IMPORTAR EL SIGNO

 
Vista:

ORDENAR FILAS DE UNA MATRIZ SIN IMPORTAR EL SIGNO

Publicado por José Rubén Córdova Rodríguez (2 intervenciones) el 03/04/2017 05:23:48
Necesito una forma de ordenar las filas de una matriz con base en los elementos de la primera, segunda, tercera... hasta n columnas. Es para llevar a cabo el método de eliminación de Gauss con pivoteo.

Hasta ahora mi código es así:
1
2
3
4
5
6
7
8
9
10
11
a=[10 -1 -5; -20 3 20; 5 3 5];
signos=sign(a); %Crea una matriz con los signos de los elementos de 'a'.
orden=sortrows(abs(a),-1); %Ordena a las filas sin importa el signo del primer elemento
tam=size(a);
n=tam(2);
 
for i=1:n
    for j=1:n
        a(i,j)=orden(i,j)*signos(i,j)
    end
end

Lo que me interesa sobre todo lo demás es ordenar las filas de la matriz sin que en el resultado final se vea alterado el signo de los elementos, o hallar una forma de ordenar conjuntamente la matriz de signos con la matriz "a", para utilizar el bucle.
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

ORDENAR FILAS DE UNA MATRIZ SIN IMPORTAR EL SIGNO

Publicado por José Rubén Córdova Rodríguez (2 intervenciones) el 09/04/2017 04:03:20
Dada una matriz cualquiera, ordenar las filas descendentemente, tomando en cuenta sólo la magnitud del primer valor de cada fila sin considerar su signo; por ejemplo:

A=
4 5 6
-30 7 4
52 23 7

el resultado debería ser:

A=
52 23 7
-30 7 4
4 5 6
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

ORDENAR FILAS DE UNA MATRIZ SIN IMPORTAR EL SIGNO

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 10/04/2017 01:21:54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear
A=[4 5 6
-30 7 4
52 23 7
-14 6 9];
n=size(A,1);
for i=1:n
    for j=1:n-i
        if abs(A(j,1))<abs(A(j+1,1))
            aux=A(j,:);
            A(j,:)=A(j+1,:);
            A(j+1,:)=aux;
        end
    end
end
display(A)

1
2
3
4
5
6
>> ordenar_en_descendente
A =
    52    23     7
   -30     7     4
   -14     6     9
     4     5     6

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


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
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