Matlab - Separar en submatrices

   
Vista:

Separar en submatrices

Publicado por Carlos (16 intervenciones) el 16/05/2013 12:14:19
Buenas,

Teniendo estos datos de partida:

A=
2011 3.914
2011 2.702
2011 7.200
2011 2.954
2011 0.890
2011 6.242
2011 3.118
2011 1.934
2011 3.231
2008 0.868
2008 1.188
2008 8.478
2008 8.605
2008 5.177
2008 0.538
2008 2.113
2008 3.178
2008 7.391
2008 0.139
2008 0.387
2008 1.521
2008 5.842
2015 2.927
2015 2.591
2015 1.804
2015 2.188
2000 0.296
2000 0.745
2000 0.189
2000 0.687
2000 0.184
2000 0.368
2000 0.626
2000 0.780
2000 0.081
2000 0.929
1900 3.879
1900 2.434
1900 2.179
1900 2.234
1900 1.532
1900 2.543

Cómo podría hacer para separar en submatrices con el mismo año mediante un script?

es decir:

A1=
2011 3.914
2011 2.702
2011 7.200
2011 2.954
2011 0.890
2011 6.242
2011 3.118
2011 1.934
2011 3.231

A2=
2008 0.868
2008 1.188
2008 8.478
2008 8.605
2008 5.177
2008 0.538
2008 2.113
2008 3.178
2008 7.391
2008 0.139
2008 0.387
2008 1.521
2008 5.842

A3=
2015 2.927
2015 2.591
2015 1.804
2015 2.188

A4=
2000 0.296
2000 0.745
2000 0.189
2000 0.687
2000 0.184
2000 0.368
2000 0.626
2000 0.780
2000 0.081
2000 0.929

A5=
1900 3.879
1900 2.434
1900 2.179
1900 2.234
1900 1.532
1900 2.543


A ver si se os ocurre algo¡ Por favor, no pongais lo de A1=A(1:10,:) porque eso ya lo se hacer yo. Me refiero a algún script que lo resuelva.

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

Separar en submatrices

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 16/05/2013 14:38:37
Bueno nececitas hacerlo con un bucle( puede ser while o for), dentro de ese bucle vas comparando los elementos de la primera columna consecutivamente (es decir compara dos elementos consecutivos en cada iteracion para eso usa la funcion if ). Ademas para que guarde tal como quieres en A1, A2,.... para eso debes usar la funcion genvarname() . Aqui un ejemplo del uso de la funcin genvarname

http://www.lawebdelprogramador.com/foros/Matlab/1375635-Como_cambiar_de_variable_en_un_loop_%22for%22..html

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com


http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Separar en submatrices

Publicado por carlos (16 intervenciones) el 16/05/2013 16:58:13
Gracias jeremias,

Cuando tenga el script lo cuelgo.

Un saludo
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

Separar en submatrices

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 17/05/2013 02:21:13
Hola Carlos;

La solución practica es la siguiente.

Asumir que existe la variable A.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>> tmp  = find(A(:,1) == 2011);
 
>> A1 = A(tmp,:)
2011 3.914
2011 2.702
2011 7.200
2011 2.954
2011 0.890
2011 6.242
2011 3.118
2011 1.934
2011 3.231
 
>> tmp = find(A(:,1) == 1900);
 
>> A5 = A(tmp,:)
 
1900 3.879
1900 2.434
1900 2.179
1900 2.234
1900 1.532
1900 2.543


Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
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

Separar en submatrices

Publicado por Carlos (16 intervenciones) el 18/05/2013 13:52:36
Gracias Dave, pero mi idea de como solucionar el problema está más enfocada a un problema genérico por lo que debo usar if y for.

Aquí dejo el script y el resultado. El único paso que me falta es como cerrar el script para que me aparezca la ultima matriz con las filas del año 2029.

A ver si se os ocurre algo.

DATA=[2011 2;2011 3;2011 7;2012 1;2012 3;2012 6;2012 9;2013 2;2013 1;2013 6;2013 5;2013 4;2015 7;2029 0; 2029 80]
[fila, col]=size(DATA);
r=1;n=1;
M(1,:)=DATA(1,:);
for k=2:fila
if M(1,1)==DATA(k,1)
n=n+1;
M(n,:)=DATA(k,:);
else
if n==1
M=M;
else
M(r,:);
end
v=genvarname(['M',num2str(r)]);
eval([v,'=M']);
clear M;
M(1,:)=DATA(k,:);
n=1;
r=r+1;
end
end

Resultado:

DATA =

2011 2
2011 3
2011 7
2012 1
2012 3
2012 6
2012 9
2013 2
2013 1
2013 6
2013 5
2013 4
2015 7
2029 0
2029 80

M1 =

2011 2
2011 3
2011 7


M2 =

2012 1
2012 3
2012 6
2012 9


M3 =

2013 2
2013 1
2013 6
2013 5
2013 4


M4 =

2015 7
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

Separar en submatrices

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 18/05/2013 14:21:43
Hola Carlos;

Deberías hacerlo de la siguiente manera.

1
2
3
4
5
6
7
8
9
10
11
12
13
clear all,clc
DATA=[2011 2;2011 3;2011 7;2012 1;2012 3;2012 6;2012 9;...
    2013 2;2013 1;2013 6;2013 5;2013 4;2015 7;2029 0; 2029 80]
YEAR=unique(DATA(:,1));
 
for n=1:length(YEAR)
    tmp=find(DATA(:,1)==YEAR(n));
    NEWDATA = DATA(tmp,:);
    v=genvarname(['M',num2str(n)]);
    eval([v,'= NEWDATA']);
end
 
clear tmp n v YEAR NEWDATA


Con lo cual obtienes los siguientes resultados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
M1 =
        2011           2
        2011           3
        2011           7
 
M2 =
        2012           1
        2012           3
        2012           6
        2012           9
 
M3 =
        2013           2
        2013           1
        2013           6
        2013           5
        2013           4
 
M4 =
        2015           7
 
M5 =
        2029           0
        2029          80



Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
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

Separar en submatrices

Publicado por carlos (16 intervenciones) el 18/05/2013 15:38:19
Gracias de nuevo Dave,

Era lo que buscaba¡

eres un crack

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

Separar en submatrices

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 18/05/2013 15:53:16
Carlos;

Me da gusto que haya sido de ayuda.

Por otro lado, te comento que brindo servicios de programación en general, si conoces a alguna persona interesada en mis servicios, proporcionale mi información de contacto o el link a mi blog http://fismatlab.blogspot.com/.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
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

Separar en submatrices

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 18/05/2013 23:55:50
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
65
66
67
68
69
70
71
72
73
74
clear all
clc
A=[2011 3.914
 2011 2.702
 2011 7.200
 2011 2.954
 2011 0.890
 2011 6.242
 2011 3.118
 2011 1.934
 2011 3.231
 2008 0.868
 2008 1.188
 2008 8.478
 2008 8.605
 2008 5.177
 2008 0.538
 2008 2.113
 2008 3.178
 2008 7.391
 2008 0.139
 2008 0.387
 2008 1.521
 2008 5.842
 2015 2.927
 2015 2.591
 2015 1.804
 2015 2.188
 2000 0.296
 2000 0.745
 2000 0.189
 2000 0.687
 2000 0.184
 2000 0.368
 2000 0.626
 2000 0.780
 2000 0.081
 2000 0.929
 1900 3.879
 1900 2.434
 1900 2.179
 1900 2.234
 1900 1.532
 1900 2.543];
 
i=2;
k=1;
n=1;
while i<=size(A,1)
    if A(i-1,1)==A(i,1)
       v=genvarname(['A',num2str(k)]);
       eval([v, '(',num2str(n),',:)=A(i-1,:)']);
       n=n+1;
       N=n;
    elseif A(i-1,1)~=A(i,1)
       v=genvarname(['A',num2str(k)]);
       eval([v, '(',num2str(n),',:)=A(i-1,:)']);
        k=k+1;
        n=1;
    end
    i=i+1;
end
v=genvarname(['A',num2str(k)]);
eval([v, '(',num2str(N),',:)=A(i-1,:)']);
 
 
clc
display('>>genvarname14')
A
clear A
submatrices=whos('A*');
for i=1:k
    eval(submatrices(i).name)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
EJECUCION
>>genvarname14
 
A =
 
   1.0e+03 *
 
    2.0110    0.0039
    2.0110    0.0027
    2.0110    0.0072
    2.0110    0.0030
    2.0110    0.0009
    2.0110    0.0062
    2.0110    0.0031
    2.0110    0.0019
    2.0110    0.0032
    2.0080    0.0009
    2.0080    0.0012
    2.0080    0.0085
    2.0080    0.0086
    2.0080    0.0052
    2.0080    0.0005
    2.0080    0.0021
    2.0080    0.0032
    2.0080    0.0074
    2.0080    0.0001
    2.0080    0.0004
    2.0080    0.0015
    2.0080    0.0058
    2.0150    0.0029
    2.0150    0.0026
    2.0150    0.0018
    2.0150    0.0022
    2.0000    0.0003
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0004
    2.0000    0.0006
    2.0000    0.0008
    2.0000    0.0001
    2.0000    0.0009
    1.9000    0.0039
    1.9000    0.0024
    1.9000    0.0022
    1.9000    0.0022
    1.9000    0.0015
    1.9000    0.0025
 
 
A1 =
 
   1.0e+03 *
 
    2.0110    0.0039
    2.0110    0.0027
    2.0110    0.0072
    2.0110    0.0030
    2.0110    0.0009
    2.0110    0.0062
    2.0110    0.0031
    2.0110    0.0019
    2.0110    0.0032
 
 
A2 =
 
   1.0e+03 *
 
    2.0080    0.0009
    2.0080    0.0012
    2.0080    0.0085
    2.0080    0.0086
    2.0080    0.0052
    2.0080    0.0005
    2.0080    0.0021
    2.0080    0.0032
    2.0080    0.0074
    2.0080    0.0001
    2.0080    0.0004
    2.0080    0.0015
    2.0080    0.0058
 
 
A3 =
 
   1.0e+03 *
 
    2.0150    0.0029
    2.0150    0.0026
    2.0150    0.0018
    2.0150    0.0022
 
 
A4 =
 
   1.0e+03 *
 
    2.0000    0.0003
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0004
    2.0000    0.0006
    2.0000    0.0008
    2.0000    0.0001
    2.0000    0.0009
 
 
A5 =
 
   1.0e+03 *
 
    1.9000    0.0039
    1.9000    0.0024
    1.9000    0.0022
    1.9000    0.0022
    1.9000    0.0015
    1.9000    0.0025





Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Separar en submatrices

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 19/05/2013 00:16:52
Hola José;

Unicamente desearía comentarte que aprecio tu lógica, pero deseo comentarte que tu código no sería tan genérico, ya que en el caso que la secuencia de fechas no sea estrictamente ordenada, los resultados sería diferentes a los esperados, cosa que no sucede con el código anteriormente propuesto.

Tómalo como un comentario constructivo.

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
A=[2011 3.914
 2011 2.702
 2011 7.200
 2008 2.954
 2011 0.890
 2009 6.242
 2011 3.118
 2011 1.934
 2011 3.231
 2008 0.868
 2008 1.188
 2008 8.478
 2008 8.605
 2009 5.177
 2008 0.538
 2008 2.113
 2008 3.178
 2010 7.391
 2008 0.139
 2008 0.387
 2008 1.521
 2008 5.842
 2015 2.927
 2015 2.591
 2015 1.804
 2015 2.188
 2000 0.296
 2000 0.745
 2000 0.189
 2000 0.687
 2000 0.184
 2000 0.368
 2003 0.626
 2000 0.780
 2000 0.081
 2000 0.929
 1900 3.879
 1900 2.434
 1900 2.179
 1900 2.234
 1901 1.532
 1900 2.543];


Tu código produciría los siguiente resultados.

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
A1 =
 
   1.0e+03 *
 
    2.0110    0.0039
    2.0110    0.0027
    2.0110    0.0072
 
 
A10 =
 
   1.0e+03 *
 
    2.0080    0.0001
    2.0080    0.0004
    2.0080    0.0015
    2.0080    0.0058
 
 
A11 =
 
   1.0e+03 *
 
    2.0150    0.0029
    2.0150    0.0026
    2.0150    0.0018
    2.0150    0.0022
 
 
A12 =
 
   1.0e+03 *
 
    2.0000    0.0003
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0004
 
 
A13 =
 
   1.0e+03 *
 
    2.0030    0.0006
 
 
A14 =
 
   1.0e+03 *
 
    2.0000    0.0008
    2.0000    0.0001
    2.0000    0.0009
 
 
A15 =
 
   1.0e+03 *
 
    1.9000    0.0039
    1.9000    0.0024
    1.9000    0.0022
    1.9000    0.0022
 
 
A16 =
 
   1.0e+03 *
 
    1.9010    0.0015
 
 
A17 =
 
   1.0e+03 *
 
         0         0
         0         0
         0         0
    1.9000    0.0025
 
 
A2 =
 
   1.0e+03 *
 
    2.0080    0.0030
 
 
A3 =
 
   1.0e+03 *
 
    2.0110    0.0009
 
 
A4 =
 
   1.0e+03 *
 
    2.0090    0.0062
 
 
A5 =
 
   1.0e+03 *
 
    2.0110    0.0031
    2.0110    0.0019
    2.0110    0.0032
 
 
A6 =
 
   1.0e+03 *
 
    2.0080    0.0009
    2.0080    0.0012
    2.0080    0.0085
    2.0080    0.0086
 
 
A7 =
 
   1.0e+03 *
 
    2.0090    0.0052
 
 
A8 =
 
   1.0e+03 *
 
    2.0080    0.0005
    2.0080    0.0021
    2.0080    0.0032
 
 
A9 =
 
   1.0e+03 *
 
    2.0100    0.0074


Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
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

Separar en submatrices

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 19/05/2013 00:37:13
Yo solamente hago códigos según lo que el usuario pone su data.
Bueno prueba tu código con la data original del usuario que pone. ¿Tu código arroja lo que quiere el usuario?. Fíjate en la generación de los Ai.

Posdata: No soy de las personas que opina de los códigos de los demás que ponen en el foro, no digo que mis códigos son mejores, nada de eso, solamente me limito a contestar. Cada uno responde según sus conocimientos que tiene sobre matlab y programación en matlab. Pero por tu observación a mi código, es que te respondo.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

[url][url]http://matlabcaballero.blogspot.com[/url][/url]

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Separar en submatrices

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 19/05/2013 00:43:30
José;

Aquí la prueba que solicitas.

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
clear all,clc
 
DATA=[2011 3.914
2011 2.702
2011 7.200
2011 2.954
2011 0.890
2011 6.242
2011 3.118
2011 1.934
2011 3.231
2008 0.868
2008 1.188
2008 8.478
2008 8.605
2008 5.177
2008 0.538
2008 2.113
2008 3.178
2008 7.391
2008 0.139
2008 0.387
2008 1.521
2008 5.842
2015 2.927
2015 2.591
2015 1.804
2015 2.188
2000 0.296
2000 0.745
2000 0.189
2000 0.687
2000 0.184
2000 0.368
2000 0.626
2000 0.780
2000 0.081
2000 0.929
1900 3.879
1900 2.434
1900 2.179
1900 2.234
1900 1.532
1900 2.543];
 
YEAR=unique(DATA(:,1));
 
for n=1:length(YEAR)
    tmp=find(DATA(:,1)==YEAR(n));
    NEWDATA = DATA(tmp,:);
    v=genvarname(['M',num2str(n)]);
    eval([v,'= NEWDATA']);
end
 
clear tmp n v YEAR NEWDATA


Los resultados son los siguientes.

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
65
66
67
68
69
70
M1 =
 
   1.0e+03 *
 
    1.9000    0.0039
    1.9000    0.0024
    1.9000    0.0022
    1.9000    0.0022
    1.9000    0.0015
    1.9000    0.0025
 
 
M2 =
 
   1.0e+03 *
 
    2.0000    0.0003
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0004
    2.0000    0.0006
    2.0000    0.0008
    2.0000    0.0001
    2.0000    0.0009
 
 
M3 =
 
   1.0e+03 *
 
    2.0080    0.0009
    2.0080    0.0012
    2.0080    0.0085
    2.0080    0.0086
    2.0080    0.0052
    2.0080    0.0005
    2.0080    0.0021
    2.0080    0.0032
    2.0080    0.0074
    2.0080    0.0001
    2.0080    0.0004
    2.0080    0.0015
    2.0080    0.0058
 
 
M4 =
 
   1.0e+03 *
 
    2.0110    0.0039
    2.0110    0.0027
    2.0110    0.0072
    2.0110    0.0030
    2.0110    0.0009
    2.0110    0.0062
    2.0110    0.0031
    2.0110    0.0019
    2.0110    0.0032
 
 
M5 =
 
   1.0e+03 *
 
    2.0150    0.0029
    2.0150    0.0026
    2.0150    0.0018
    2.0150    0.0022


Hasta donde veo, los resultados son los esperados (no creo que haya problemas en colocar Mi en vez de Ai) y el código funcionaria igualmente bien para el caso que propuse (con fechas desordenadas).

Por lo demás, aprecio tus comentarios y lógica de programación.

Cualquier cosa estamos en contacto.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
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

Separar en submatrices

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 19/05/2013 00:50:59
El ultimo submatriz generado debe ser:

M5=
1900 3.879
1900 2.434
1900 2.179
1900 2.234
1900 1.532
1900 2.543

pues ese es la pregunta del usuario y no lo que esta arrojando tu código.

M5 =

1.0e+03 *

2.0150 0.0029
2.0150 0.0026
2.0150 0.0018
2.0150 0.0022


Claro que habría problema, si es que usuario desea trabajar con los sub indicies de los Mi.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Separar en submatrices

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 19/05/2013 01:07:05
José;

Estoy haciéndote una critica constructiva, de mi parte aprecio mucho a las personas que me hacen comentarios, criticas (destructivas o constructivas), de ellas tomo lo bueno y así sigo avanzando.


Sobre la re-pregunta,

Los resultados de 1900 están en la variable M1, por lo tanto no cabe la comparación de los resultados del año 2015 con los del año 1900. Pero podría agregar una línea al código, para que muestre lo que cuestionas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DATA=[
...
...
...];
 
YEAR = unique(DATA(:,1));
YEAR = rot90(YEAR,3);
 
for n=1:length(YEAR)
    tmp=find(DATA(:,1)==YEAR(n));
    NEWDATA = DATA(tmp,:);
    v=genvarname(['M',num2str(n)]);
    eval([v,'= NEWDATA']);
end
 
clear tmp n v YEAR NEWDATA


Los resultados serían:

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
65
66
67
68
69
70
M1 =
 
   1.0e+03 *
 
    2.0150    0.0029
    2.0150    0.0026
    2.0150    0.0018
    2.0150    0.0022
 
 
M2 =
 
   1.0e+03 *
 
    2.0110    0.0039
    2.0110    0.0027
    2.0110    0.0072
    2.0110    0.0030
    2.0110    0.0009
    2.0110    0.0062
    2.0110    0.0031
    2.0110    0.0019
    2.0110    0.0032
 
 
M3 =
 
   1.0e+03 *
 
    2.0080    0.0009
    2.0080    0.0012
    2.0080    0.0085
    2.0080    0.0086
    2.0080    0.0052
    2.0080    0.0005
    2.0080    0.0021
    2.0080    0.0032
    2.0080    0.0074
    2.0080    0.0001
    2.0080    0.0004
    2.0080    0.0015
    2.0080    0.0058
 
 
M4 =
 
   1.0e+03 *
 
    2.0000    0.0003
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0004
    2.0000    0.0006
    2.0000    0.0008
    2.0000    0.0001
    2.0000    0.0009
 
 
M5 =
 
   1.0e+03 *
 
    1.9000    0.0039
    1.9000    0.0024
    1.9000    0.0022
    1.9000    0.0022
    1.9000    0.0015
    1.9000    0.0025



En si se están mostrando los resultados en sentido inverso (las fechas se puede ordenar ascendente o descendente).

Gracias por los comentarios, espero que sigamos intercambiando comentarios, son muy interesantes y de ellos se aprende, me da gusto intercambiar comentarios con personas que saben lo que hacen.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
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

Separar en submatrices

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 19/05/2013 01:22:21
No es que invertido. Esa no es la respuesta.
tu M3 es incorrecto.
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
clear all
clc
A=[2011 3.914
 2011 2.702
 2011 7.200
 2011 2.954
 2011 0.890
 2011 6.242
 2011 3.118
 2011 1.934
 2011 3.231
 2008 0.868
 2008 1.188
 2008 8.478
 2008 8.605
 2008 5.177
 2008 0.538
 2008 2.113
 2008 3.178
 2008 7.391
 2008 0.139
 2008 0.387
 2008 1.521
 2008 5.842
 2015 2.927
 2015 2.591
 2015 1.804
 2015 2.188
 2000 0.296
 2000 0.745
 2000 0.189
 2000 0.687
 2000 0.184
 2000 0.368
 2000 0.626
 2000 0.780
 2000 0.081
 2000 0.929
 1900 3.879
 1900 2.434
 1900 2.179
 1900 2.234
 1900 1.532
 1900 2.543]
 
[c,ia2,ic2] = unique(A(:,1),'stable');
for n=1:length(c)
    eval([genvarname(['A',num2str(n)]),'= A(find(A(:,1)==c(n)),:)']);
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
EJECUCION
>> genvarname15
 
A =
 
   1.0e+03 *
 
    2.0110    0.0039
    2.0110    0.0027
    2.0110    0.0072
    2.0110    0.0030
    2.0110    0.0009
    2.0110    0.0062
    2.0110    0.0031
    2.0110    0.0019
    2.0110    0.0032
    2.0080    0.0009
    2.0080    0.0012
    2.0080    0.0085
    2.0080    0.0086
    2.0080    0.0052
    2.0080    0.0005
    2.0080    0.0021
    2.0080    0.0032
    2.0080    0.0074
    2.0080    0.0001
    2.0080    0.0004
    2.0080    0.0015
    2.0080    0.0058
    2.0150    0.0029
    2.0150    0.0026
    2.0150    0.0018
    2.0150    0.0022
    2.0000    0.0003
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0004
    2.0000    0.0006
    2.0000    0.0008
    2.0000    0.0001
    2.0000    0.0009
    1.9000    0.0039
    1.9000    0.0024
    1.9000    0.0022
    1.9000    0.0022
    1.9000    0.0015
    1.9000    0.0025
 
 
A1 =
 
   1.0e+03 *
 
    2.0110    0.0039
    2.0110    0.0027
    2.0110    0.0072
    2.0110    0.0030
    2.0110    0.0009
    2.0110    0.0062
    2.0110    0.0031
    2.0110    0.0019
    2.0110    0.0032
 
 
A2 =
 
   1.0e+03 *
 
    2.0080    0.0009
    2.0080    0.0012
    2.0080    0.0085
    2.0080    0.0086
    2.0080    0.0052
    2.0080    0.0005
    2.0080    0.0021
    2.0080    0.0032
    2.0080    0.0074
    2.0080    0.0001
    2.0080    0.0004
    2.0080    0.0015
    2.0080    0.0058
 
 
A3 =
 
   1.0e+03 *
 
    2.0150    0.0029
    2.0150    0.0026
    2.0150    0.0018
    2.0150    0.0022
 
 
A4 =
 
   1.0e+03 *
 
    2.0000    0.0003
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0007
    2.0000    0.0002
    2.0000    0.0004
    2.0000    0.0006
    2.0000    0.0008
    2.0000    0.0001
    2.0000    0.0009
 
 
A5 =
 
   1.0e+03 *
 
    1.9000    0.0039
    1.9000    0.0024
    1.9000    0.0022
    1.9000    0.0022
    1.9000    0.0015
    1.9000    0.0025



Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Separar en submatrices

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 19/05/2013 01:51:34
Hola José;

Al menos me doy cuenta que a mi propuesta de código le falta agregar el argumento de estable, pero al final no he renunciado a mi modo de programación, y agrego tu aporte a mi código.

En conclusión queda totalmente descartada la propuesta que estabas haciendo, ya que sería muy engorrosa y ademas no funcionaria en el caso de fechas desordenadas.


Espero que sigamos discutiendo en otros post.

El único beneficiado es el usuario.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
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

Separar en submatrices

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 19/05/2013 02:12:59
Como te dije, yo solo contesto según la data del usuario. Si el usuario hubiera puesto una data con año desordenado, entonces le hubiera hecho un código según data que ponía.
por mi parte mi código es correcto y es exactamente lo que pide el usuario.
Asunto terminado.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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