Matlab - Como almacenar cada corrida de un ciclo for en una nueva variable tipo matriz en matlab

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 5 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar cada corrida de un ciclo for en una nueva variable tipo matriz en matlab

Publicado por Jeifer (4 intervenciones) el 20/07/2020 08:47:06
Tengo el siguiente codigo en matlab, lo que necesito es poder guardar cada corrida del ciclo en una nueva variable, lo que se estan generando son matrices, estoy trabajando en un programa de transferencia de calor por metodos finitos y necesito almacenar estas matrices porque luego tengo que ensamblarlas, pero no se como hacerlo, por favor si alguien pudiera ayudarme

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
prompt='Ingrese el numero de elementos por lado\n';
Nelem=input(prompt);
w=linspace(0,1,Nelem+1);
[a,b]=size(w);%me interesa es b que es el numero de nodos
 
L=1;%Longitud elemento
c=[1 0 0 0; 1 L 0 0; 1 0 L 0;1 L L L*L];
c_inv=inv(c);
e=0.03;%espesor de la placa
K=0.05;%conducitividad termica del elemento
 
syms x y
dN1_dx=c_inv(2,1)+c_inv(4,1)*y;
dN1_dy=c_inv(3,1)+c_inv(4,1)*x;
dN2_dx=c_inv(2,2)+c_inv(4,2)*y;
dN2_dy=c_inv(4,2)*y;
dN3_dx=c_inv(4,3)*y;
dN3_dy=c_inv(3,3)+c_inv(4,3)*x;
dN4_dx=c_inv(4,4)*y;
dN4_dy=c_inv(4,4)*x;
 
k_e=zeros(4);
K_e(1,1)=dN1_dx*dN1_dx+dN1_dy*dN1_dy;
K_e(1,2)=dN1_dx*dN2_dx+dN1_dy*dN2_dy;
K_e(1,3)=dN1_dx*dN3_dx+dN1_dy*dN3_dy;
K_e(1,4)=dN1_dx*dN4_dx+dN1_dy*dN4_dy;
 
K_e(2,2)=dN2_dx*dN2_dx+dN2_dy*dN2_dy;
K_e(2,3)=dN2_dx*dN3_dx+dN2_dy*dN3_dy;
K_e(2,4)=dN2_dx*dN4_dx+dN2_dy*dN4_dy;
 
K_e(3,3)=dN3_dx*dN3_dx+dN3_dy*dN3_dy;
K_e(3,4)=dN3_dx*dN4_dx+dN3_dy*dN4_dy;
 
K_e(4,4)=dN4_dx*dN4_dx+dN4_dy*dN4_dy;
 
K_e(1,1)=K_e(1,2);
K_e(2,1)=K_e(1,3);
K_e(4,1)=K_e(1,4);
K_e(3,1)=K_e(1,3);
K_e(3,2)=K_e(2,3);
K_e(4,3)=K_e(3,4);
K_e(4,2)=K_e(2,4);
 
K_e_int=K*e*int(K_e);
 
 
%intento de crear las matrices locales
x_move=w(1,1:end-1);
y_move=w(1,1:end-1);%el y va en el ciclo mas externo
 
for j=1:b-1
    for i=1:b-1
   K_1=subs(K_e_int,[x,y],[x_move(1,i),y_move(1,j)])
   end
end
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
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar cada corrida de un ciclo for en una nueva variable tipo matriz en matlab

Publicado por Daniel (354 intervenciones) el 20/07/2020 13:25:16
Hola,

Para esto hay dos opciones, usar la función eval o celdas.

La función eval lo que hace es ejecutar el código de una cadena de texto que se puede crear en tiempo de ejecución.

1
eval('x = 1');

Lo que crea una variable x con contenido 1. Para lo que se pide solo hay que concatenar las cadenas con algo como

1
eval(['x', i, ' = función(i);'])

donde i es un número, Aunque se usa bastante esta es una muy mala practica ya tiene graves problemas de seguridad (posibilita inyección de código) y mantenimiento (a la larga no se sabe las variables que hay en memoria).

La otra opción es usar celdas que se usan como las matrices pero que en lugar de paréntesis se usan llaves. Con la ventaja de que pueden guardar cualquier tipo de dato.

1
2
3
X = cell(1, 2);
X{1} = [1,2,3]
X{2} = 'descripción';

Saludos,
Daniel Rodríguez
Analytics Lane
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
sin imagen de perfil
Val: 9
Ha aumentado su posición en 5 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Como almacenar cada corrida de un ciclo for en una nueva variable tipo matriz en matlab

Publicado por Jeifer Martinez (4 intervenciones) el 20/07/2020 18:02:44
Muchas gracias !!!
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