Matlab - Organizar matriz como vector

   
Vista:

Organizar matriz como vector

Publicado por Xiomara (23 intervenciones) el 15/11/2011 04:32:30
Hola, necesito ayuda para organizar una matriz en forma de un vector, tengo la siguiente matriz....


____C1______C2_______C3___C4____C5____C6____C7
F1___0_____-180.64_____0_____0_____0_____0_____0
F2___0_____ 0_____95.35____0_____0_____0_____0
F3___0________0_______0__-55.48____0_____0____-3.15
F4___0________0_______0_____0_____0_____0_____42.69
F5___0_______0________0_____0_____0___-22.98_____0
F6___0_______0________0_____0_____0_____0_____-12.61
F7___0_______0________0_____0_____0_____0_____0

Lo que quiero es que esta matriz se me organice como un vector con las parejas de datos, es decir solo las celdas que contienen valores diferentes a cero, de tal modo que quede algo así:

F1, C2 -180.64
F2,C3 95.35
F3, C4 -55.48
F3, C7 -3.15
F4, C7 42.69
F5,C6 -22.98
F6, C7 -12.61

Y luego poder enumerar las parejas de tal modo que quede así:

P1 -180.64
P2 95.35
P3 -55.48
P4 -3.15
P5 42.69
P6 -22.98
P7 -12.61


Les agradezco mucho la ayuda que me pudieran brindar!

Gracias!
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

Organizar matriz como vector

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 15/11/2011 15:08:51
hola Xiomara
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
clear all
M=importdata('matriz_como_vector.xlsx');
 Data=M.data.Hoja1;
 Textdata1=M.textdata.Hoja1(1,:);
 Textdata2=M.textdata.Hoja1(:,1);
[fil,col]=size(Data);
c=1;
 for j=1:fil-1
    [fila,columna]=find(Data(j,:)~=0);
    for k=1:length(columna)
         D(c,:)=[Textdata2(j+1) Textdata1(columna(k)+1) Data(j,columna(k))];
         c=c+1;
    end
 end
 for j=1:size(D,1)
    fprintf(' %s %s %7.2f\n',cell2mat(D(j,1)),cell2mat(D(j,2)),cell2mat(D(j,3)));
end
 
 for j=1:size(D,1)
     P(j,:)={['P',num2str(j)],num2str(cell2mat(D(j,3)))};
 end
 
for j=1:size(P,1)
    fprintf('\n %s %6.2f',cell2mat(P(j,1)),cell2mat(D(j,3)));
end
fprintf('\n');
 
EJECUCION
>> matriz_como_vector
 F1 C2 -180.64
 F2 C3   95.35
 F3 C4  -55.48
 F3 C7   -3.15
 F4 C7   42.69
 F5 C6  -22.98
 F6 C7  -12.61
 
 P1 -180.64
 P2  95.35
 P3 -55.48
 P4  -3.15
 P5  42.69
 P6 -22.98
 P7 -12.61



Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmai.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

Organizar matriz como vector

Publicado por Xiomara (23 intervenciones) el 15/11/2011 16:37:59
Hola José, muchas gracias por tu respuesta, pero creo que omití dar un poco mas de detalles, la matriz que tengo inicial no la tengo en excel, es una matriz que ya he creado en matlab, y está creada a partir del siguiente "for":

for i = 1:nl
L = fb(i);
M = tb(i);
Tet(Sl) = 0;

FP(L,M) = -B2(L,M)*(Tet(L)-Tet(M));
FP(M,L) = -B2(M,L)*(Tet(M)-Tet(L));
end

Mi matriz se llama FP y es de 18x18, en el ejemplo anterior lo había colocado menos completo, pero realmente la matriz FP que tengo es asi (aquí solo colocaré una submatriz de 7x7):

_______C1_______C2_______C3_______C4_______C5_______C6_______C7
F1_____ 0_____-180.64_______0________0________0_________0________0
F2___180.64______0_______95.35_______0________0_________0________0
F3_____0______-95.35_______0_______-55.48______0_________0______-3.15
F4_____0________0________55.48______0________0__________0_____42.69
F5_____0________0_________0_________0________0_______-22.98_____0
F6_____0________0_________0_________0_______22.98_______0_____-12.61
F7_____0________0________3.15_____-42.69_______0_______12.61_____0

Como se puede observar, la matriz es antisimétrica, pero al igual que el ejemplo anterior, quiero tener finalmente un vector con las parejas de:

F1, C2 -180.64
F2,C3 95.35
F3, C4 -55.48
F3, C7 -3.15
F4, C7 42.69
F5,C6 -22.98
F6, C7 -12.61

Y luego poder enumerar las parejas de tal modo que quede así:

P1 -180.64
P2 95.35
P3 -55.48
P4 -3.15
P5 42.69
P6 -22.98
P7 -12.61

Traté de modificar el código que me enviaste la primera vez pero no logre tener buenos resultados :(, te agradecería la ayuda que me pudieras brindar.

Saludos!
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

Organizar matriz como vector

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 15/11/2011 16:43:30
Mandame tu codigo ami correo.
con lo cual generas tu matriz.
Entonces mas facil de lo q pensé.
O conectate via live mesenger para mayor detalles. Sino te voy a seguir dando respuestas no tan acertadas.



Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmai.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

Organizar matriz como vector

Publicado por Xiomara (23 intervenciones) el 15/11/2011 17:42:54
Oks, muchas gracias, ya te envíe los archivos a tu correo.

Saludos!
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 Dave

Organizar matriz como vector

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 16/11/2011 02:51:54
Hola Xiomara;

Lograste desarrollar el programa para tu enunciado, si es así, te agradecería que nos compartas la solución, ya que es una enunciado interesante.

Te agradezco.

Saludos
Dave Correa
E-mail: correa.dave30@gmail.com
http://fismatlab.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

Organizar matriz como vector

Publicado por Xiomara (23 intervenciones) el 16/11/2011 03:13:43
Hola, aún no logro solucionarlo, José me está ayudando, así que cuando este resulto lo publico.

Saludos!!!
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 Dave

Organizar matriz como vector

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 16/11/2011 03:16:17
De acuerdo,

por si haga falta una ayuda adicional, coloco a disposición mis servicios de programación Fismatlab.

Saludos
Dave Correa
E-mail: correa.dave30@gmail.com
http://fismatlab.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 JOSE JEREMIAS CABALLERO

Organizar matriz como vector

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 16/11/2011 18:13:41
HOLA xIOMARA


%======================
clear all
clc

FP = [ 0 -180.6417 0 0 0 0 0
180.6417 0 95.3583 0 0 0 0
0 -95.3583 0 -55.4847 0 0 -3.1570
0 0 55.4847 0 0 0 42.6942
0 0 0 0 0 -22.9830 0
0 0 0 0 22.9830 0 -12.6159
0 0 3.1570 -42.6942 0 12.6159 0];

datas1=[1:size(FP,2);FP];
M=[[0:size(FP,2)]', datas1];
Data=triu(M(2:end,2:end));
Textdata1=M(1,:);
Textdata2=M(:,1);
[fil,col]=size(Data);
c=1;
for j=1:fil-1
[fila,columna]=find(Data(j,:)~=0);
for k=1:length(columna)
FP1(c,:)=[Textdata2(j+1) Textdata1(columna(k)+1) Data(j,columna(k))];
c=c+1;
end
end
for j=1:size(FP1,1)
FP1(j,:)=[FP1(j,1) FP1(j,2) FP1(j,3)];
PP1(j,:)=[j FP1(j,3)];
end
FP1 %Vector deseado de la matriz asimétrica
PP1 %Numeración de las parejas del vector
%=================================

EJECUCION
>>matriz_como_vector
FP1 =

1.0000 2.0000 -180.6417
2.0000 3.0000 95.3583
3.0000 4.0000 -55.4847
3.0000 7.0000 -3.1570
4.0000 7.0000 42.6942
5.0000 6.0000 -22.9830
6.0000 7.0000 -12.6159


PP1 =

1.0000 -180.6417
2.0000 95.3583
3.0000 -55.4847
4.0000 -3.1570
5.0000 42.6942
6.0000 -22.9830
7.0000 -12.6159


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Profesor de Metodos Numericos con Matlab
PROGRAMADOR EN MATLAB
jjcc94@hotmai.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 JOSE JEREMIAS CABALLERO

Organizar matriz como vector

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 16/11/2011 18:17:04
Hola Xiomara.
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
%===============================
clear all
clc
FP = [      0       -180.6417       0       0       0       0       0
        180.6417        0       95.3583     0       0       0       0
            0       -95.3583        0   -55.4847    0       0   -3.1570
            0           0       55.4847     0       0       0   42.6942
            0           0           0       0       0   -22.9830    0
            0           0           0       0   22.9830     0  -12.6159
            0           0        3.1570 -42.6942    0    12.6159    0];
 
datas1=[1:size(FP,2);FP];
M=[[0:size(FP,2)]', datas1];
Data=triu(M(2:end,2:end));
Textdata1=M(1,:);
Textdata2=M(:,1);
[fil,col]=size(Data);
c=1;
 for j=1:fil-1
    [fila,columna]=find(Data(j,:)~=0);
     for k=1:length(columna)
         FP1(c,:)=[Textdata2(j+1) Textdata1(columna(k)+1) Data(j,columna(k))];
         c=c+1;
    end
 end
 for j=1:size(FP1,1)
      FP1(j,:)=[FP1(j,1) FP1(j,2) FP1(j,3)];
      PP1(j,:)=[j FP1(j,3)];
 end
FP1 %Vector deseado de la matriz asimétrica
PP1 %Numeración de las parejas del vector
%================================
 
EJECUCION
>>matriz_como_vector
FP1 =
 
    1.0000    2.0000 -180.6417
    2.0000    3.0000   95.3583
    3.0000    4.0000  -55.4847
    3.0000    7.0000   -3.1570
    4.0000    7.0000   42.6942
    5.0000    6.0000  -22.9830
    6.0000    7.0000  -12.6159
 
 
PP1 =
    1.0000 -180.6417
    2.0000   95.3583
    3.0000  -55.4847
    4.0000   -3.1570
    5.0000   42.6942
    6.0000  -22.9830
    7.0000  -12.6159



Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Profesor de Metodos Numericos con Matlab
PROGRAMADOR EN MATLAB
jjcc94@hotmai.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

Organizar matriz como vector

Publicado por Xiomara (23 intervenciones) el 16/11/2011 19:00:18
Hola José!

Muchas gracias por tu ayuda, me funcionó como quería =D =D !!!!!

Saludos!!!
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

Organizar matriz como vector

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 16/11/2011 22:42:22
ok.
Entonces tu problema fue resuelto.

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Profesor de Metodos Numericos con Matlab
PROGRAMADOR EN MATLAB
jjcc94@hotmai.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 Dave

Organizar matriz como vector

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 16/11/2011 23:19:11
Xiomara;

Me parece muy engorroso y poco claro el código que desarrollo José, considero que tu problema se solucionaría haciendo uso unicamente de la función find.

Con el unico fin de contribuir a problemas similares, les dejo el codigo que da solución al problema planteado.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
clear all,clc
 
FP=[0 -180.64 0 0 0 0 0;
    0 0 95.35 0 0 0 0;
    0 0 0 -55.48 0 0 -3.15;
    0 0 0 0 0 0 42.69;
    0 0 0 0 0 -22.98 0;
    0 0 0 0 0 0 -12.61;
    0 0 0 0 0 0 0];
 
[indx,indy]=find(FP~=0);
[ind]=find(FP~=0);
var=FP(ind);
sal01=[indx,indy,var];
 
fprintf('Fila   Columna   Valor\n');
fprintf('%5i  %5i %10.3 f\n',sal01');

tmp=1:length(var);  tmp=tmp';
sal02=[tmp,var];
 
fprintf('\n\n Punto   Valor\n');
fprintf('P%2i  % 10.3 f \n',sal02');




clear all,clc

FP=[0 -180.64 0 0 0 0 0;
0 0 95.35 0 0 0 0;
0 0 0 -55.48 0 0 -3.15;
0 0 0 0 0 0 42.69;
0 0 0 0 0 -22.98 0;
0 0 0 0 0 0 -12.61;
0 0 0 0 0 0 0];

[indx,indy]=find(FP~=0);
[ind]=find(FP~=0);
var=FP(ind);
sal01=[indx,indy,var];

fprintf('Fila Columna Valor\n');
fprintf('%5i %5i %10.3f\n',sal01');

tmp=1:length(var); tmp=tmp';
sal02=[tmp,var];

fprintf('\n\n Punto Valor\n');
fprintf('P%2i %10.3f\n',sal02');



Espero que sea de alguna ayuda.

Saludos
Dave Correa
E-mail: correa.dave30@gmail.com
http://fismatlab.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 Dave

Organizar matriz como vector

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 16/11/2011 23:21:52
Xiomara;

Los resultados serían:

Fila Columna Valor
1 2 -180.640
2 3 95.350
3 4 -55.480
5 6 -22.980
3 7 -3.150
4 7 42.690
6 7 -12.610


Punto Valor
P 1 -180.640
P 2 95.350
P 3 -55.480
P 4 -22.980
P 5 -3.150
P 6 42.690
P 7 -12.610


Espero que sea de alguna ayuda.

Saludos
Dave Correa
E-mail: correa.dave30@gmail.com
http://fismatlab.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

Organizar matriz como vector

Publicado por Xiomara (23 intervenciones) el 17/11/2011 01:59:33
Hola Dave!

Muchas gracias por tu aporte, también da buenos resultados, lo único que no veo es como acoplarlo directamente al código de mi programa, ya que veo que funciona bien cuando se coloca directamente en el "Command window", pero si lo pego con el resto de mi código no funciona, o mejor dicho los resultados de "sal01" y "sal02" aún no son los correctos, esto a que se debe?

Saludos!
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 Dave

Organizar matriz como vector

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 17/11/2011 02:59:38
Hola Xiomara;

El inconveniente, lo está produciendo el apostrofe, que esta transponiendo los elementos de sal01 y sal02, pero esto se puede solucionar haciendo algunos pequeños cambios, prueba con el siguiente codigo:
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
clear all,clc
 
FP=[0 -180.64 0 0 0 0 0;
    0 0 95.35 0 0 0 0;
    0 0 0 -55.48 0 0 -3.15;
    0 0 0 0 0 0 42.69;
    0 0 0 0 0 -22.98 0;
    0 0 0 0 0 0 -12.61;
    0 0 0 0 0 0 0];
 
[indx,indy]=find(FP~=0);
[ind]=find(FP~=0);
var=FP(ind);
 
fprintf('Fila   Columna   Valor\n');
for n=1:length(var);
sal01(n,1)=indx(n);
sal01(n,2)=indy(n);
sal01(n,3)=var(n);
fprintf('%5i  %5i %10.3f\n',sal01(n,:));
end
 
disp(' ')
disp(' ')
 
for n=1:length(var);
sal02(n,1)=n;
sal02(n,2)=var(n);
fprintf('P%3i  % 10.3f \n',sal02(n,:));
end



Espero que sea de alguna ayuda.

Saludos
Dave Correa
E-mail: correa.dave30@gmail.com
http://fismatlab.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 Dave

Organizar matriz como vector

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 17/11/2011 16:52:54
Hola Xiomara;

Como te fue con código?

Saludos
Dave Correa
E-mail: correa.dave30@gmail.com
http://fismatlab.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