Matlab - guardar matrices dentro de un for-end

   
Vista:

guardar matrices dentro de un for-end

Publicado por nazareno (14 intervenciones) el 17/11/2009 02:07:54
hola chicos, abro este hilo viejo porq estoy tratando de hacer algo parecido.
tengo varios bucles uno dentro del otro. el de afuera varia de (e) 1:3 y los dos de adentro (i,j) 1:2. por cada vez q se completa el bucle de afuera (e) se me forma una matriz de 8x8. por lo tanto voy a terminar teniendo 3 matrices de 8x8.
como hago para q me guarde esas tres matices? la parte del codigo q trata esto es esta:

for e=1:size(nl,1)
for i=1:size(r,2)
for j=1:size(s,2)
dh1r=1/4*(1+s(j)); dh1s=1/4*(1+r(i));
dh2r=-1/4*(1+s(j)); dh2s=1/4*(1-r(i));
dh3r=-1/4*(1-s(j)); dh3s=-1/4*(1-r(i));
dh4r=1/4*(1-s(j)); dh4s=-1/4*(1+r(i));
dh=[dh1r dh2r dh3r dh4r;
dh1s dh2s dh3s dh4s];
jacov=dh*[pg(1,nl(e,:));pg(2,nl(e,:))]';
invj=inv(jacov);
b1=[invj(1,1) invj(1,2) 0 0;
0 0 invj(2,1) invj(2,2);
invj(2,1) invj(2,2) invj(1,1) invj(1,2)];
b2=[dh1r 0 dh2r 0 dh3r 0 dh4r 0;
dh1s 0 dh2s 0 dh3s 0 dh4s 0;
0 dh1r 0 dh2r 0 dh3r 0 dh4r;
0 dh1s 0 dh2s 0 dh3s 0 dh4s];
b=b1*b2;
end
end
k(e)=k0+b'*c*b*det(jacov)*a1(i)*a2(j)
end

la idea es terminar con 3 matrices k(e) q son de 8x8, pero no logro encontrar la manera de hacerlo.
alguien sabe como?
saludos!
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

RE:guardar matrices dentro de un for-end

Publicado por cucu (38 intervenciones) el 17/11/2009 09:02:36
hola, no he leído tu código porque así tan desordenado se hace casi imposible, pero, has pensado en hacer la matriz de 8x8x3, como las imágenes, entonces cada una la meterías en el índice correspondiente, sea i, j o e (de nuevo, poniendo for e=1:size(nl,1) es imposible entender, porque no se que es nl)

Por eso no se si te estoy respondiendo bien, porque no entiendo nada, pero creo que hacer la matriz de 8x8x3 te solucionaría el problema.

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

RE:guardar matrices dentro de un for-end

Publicado por nazareno (14 intervenciones) el 17/11/2009 14:17:18
ok, dale, voy a sacar todas las cosas raras, perdon...

k0=zeros(8,8);
pg=[1 1.2 2.2 1.8 ; -0.1 -0.5 0.0 -0.3];
r=[00 0.1]; s=[-2.5 -3.1];
for e=1:3
for i=1:2
for j=1:2
dh1r=1/4*(1+s(j)); dh1s=1/4*(1+r(i));
dh2r=-1/4*(1+s(j)); dh2s=1/4*(1-r(i));
dh3r=-1/4*(1-s(j)); dh3s=-1/4*(1-r(i));
dh4r=1/4*(1-s(j)); dh4s=-1/4*(1+r(i));

dh=[dh1r dh2r dh3r dh4r ; dh1s dh2s dh3s dh4s];
jacov=dh*pg';
invj=inv(jacov);

b1=[invj(1,1) invj(1,2) 0 0;
0 0 invj(2,1) invj(2,2);
invj(2,1) invj(2,2) invj(1,1) invj(1,2)];

b2=[dh1r 0 dh2r 0 dh3r 0 dh4r 0;
dh1s 0 dh2s 0 dh3s 0 dh4s 0;
0 dh1r 0 dh2r 0 dh3r 0 dh4r;
0 dh1s 0 dh2s 0 dh3s 0 dh4s];
b=b1*b2;
end
end

k(e)=k0+b'*b*det(jacov)
end

la idea es terminar con 3 matrices k(e) q son de 8x8, pero no logro encontrar la manera de hacerlo.
no se como haria para armar una matriz de 3x8x8, siempre he trabajado con matrices de nxm. como tendria q armar k(e,;,;)? si lo pongo asi da error, no se como seria sino.
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

RE:guardar matrices dentro de un for-end

Publicado por cucu (38 intervenciones) el 17/11/2009 17:34:04
pues yo haría:

k0 = zeros(8,8,3);

y dentro de cada bucle de e, al finalizar:

k0(:,:,e) = k(e);

Espero que te funcione. 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

RE:guardar matrices dentro de un for-end

Publicado por nazareno (14 intervenciones) el 17/11/2009 21:13:52
perfecto.... chas gracias cucu.....
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