Problemas para trabajar con variables introducidas en GUIDE
Publicado por Luis (16 intervenciones) el 18/09/2019 22:37:08
Hola buen dia!
Estoy trabajando en una interfaz en Matlab y necesitar realizar iteraciones (alrededor de 3000) sin embargo al parecer despues de realizar la primer iteracion las variables desaparecen (las cuales introduzco capturo en la interfaz), esto por que todos los calculos los realiza en la seccion donde coloque el boton de calcular y al momento de pulsarlo "jala" todas las variables. Anexo mi codigo y una captura del la interfaz. Espero puedan ayudarme muchas gracias.
En la imagen que adjunto se muestra mi interfaz
Estoy trabajando en una interfaz en Matlab y necesitar realizar iteraciones (alrededor de 3000) sin embargo al parecer despues de realizar la primer iteracion las variables desaparecen (las cuales introduzco capturo en la interfaz), esto por que todos los calculos los realiza en la seccion donde coloque el boton de calcular y al momento de pulsarlo "jala" todas las variables. Anexo mi codigo y una captura del la interfaz. Espero puedan ayudarme muchas gracias.
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
%%C
% --- Executes on button press in Calcular.
function Calcular_Callback(hObject, eventdata, handles)
% hObject handle to Calcular (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%%%%%Checks para las check box, frontal%%%
S1p = get(handles.checkconveccionfp, 'value');
S2p = get(handles.checktempctefp, 'value');
S3p = get(handles.checkflujocalorfp, 'value');
S4p = get(handles.cheakadiabaticofp, 'value');
%%%%%Checks para las check box, inferior%%%
S5p = get(handles.checkconveccioninfp, 'value');
S6p = get(handles.checktempcteinfp, 'value');
S7p = get(handles.checkflujocalorinfp, 'value');
S8p = get(handles.cheakadiabaticoinfp, 'value');
%%%%%Checks para las check box, trasera%%%
S9p = get(handles.checkconvecciontp, 'value');
S10p = get(handles.checktempctetp, 'value');
S11p = get(handles.checkflujocalortp, 'value');
S12p = get(handles.cheakadiabaticotp, 'value');
%%%%%Checks para las check box, superior%%%
S13p = get(handles.checkconveccionsp, 'value');
S14p = get(handles.checktempctesp, 'value');
S15p = get(handles.checkflujocalorsp, 'value');
S16p = get(handles.cheakadiabaticosp, 'value');
%%%%%Checks para las check box, derecha%%%
S17p = get(handles.checkconvecciondp, 'value');
S18p = get(handles.checktempctedp, 'value');
S19p = get(handles.checkflujocalordp, 'value');
S20p = get(handles.cheakadiabaticodp, 'value');
%%%%%Checks para las check box, izquierda%%%
S21p = get(handles.checkconveccionizqp, 'value');
S22p = get(handles.checktempcteizqp, 'value');
S23p = get(handles.checkflujocalorizqp, 'value');
S24p = get(handles.cheakadiabaticoizqp, 'value');
%%Este es la primera parte del codigo para la creacion del mocdulo tipo
%%ansys, este es la parte transitoria%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Datos termicos
%%%Datos para condicion de temperatura constante%%%%%%%%%%%%%%%%
TcaraFtal = str2double( get(handles.temperaturacfp, 'string') ); %%Temperatura cara frontal
TcaraIzq = str2double( get(handles.temperaturacizqp, 'string') ); %%Temperatura cara izquierda
TcaraDcha = str2double( get(handles.temperaturacdp, 'string') ); %%Temperatura cara derecha
TcaraIrior = str2double( get(handles.temperaturacinfp, 'string') ); %%Temperatura cara inferior
TcaraTsera = str2double( get(handles.temperaturactp, 'string') ); %%Temperatura cara trasera
TcaraSrior = str2double( get(handles.temperaturacsp, 'string') ); %%Temperatura cara superior
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%Datos para condicion de conveccion variable%%%%%%%%%%%%%%%%%%%%%%
hFtal = str2double( get(handles.conveccionfp, 'string') ); %%Conveccion para cara frontal
hIzq = str2double( get(handles.conveccionizqp, 'string') ); %%Conveccion para cara izquierda
hDcha = str2double( get(handles.convecciondp, 'string') ); %%Conveccion para cara derecha
hIrior = str2double( get(handles.conveccioninfp, 'string') ); %%Conveccion para cara inferior
hTsera = str2double( get(handles.convecciontp, 'string') ); %%Conveccion para cara trasera
hSrior = str2double( get(handles.conveccionsp, 'string') ); %%Conveccion para cara superior
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%Datos para condicion de flujo de calor%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FlujoFtal = str2double( get(handles.flujocalorfp, 'string') ); %%Conveccion para cara frontal
FlujoIzq = str2double( get(handles.flujocalorizqp, 'string') ); %%Conveccion para cara izquierda
FlujoDcha = str2double( get(handles.flujocalordp, 'string') ); %%Conveccion para cara derecha
FlujoIrior = str2double( get(handles.flujocalorinfp, 'string') ); %%Conveccion para cara inferior
FlujoTsera = str2double( get(handles.flujocalortp, 'string') ); %%Conveccion para cara trasera
FlujoSrior = str2double( get(handles.flujocalorsp, 'string') ); %%Conveccion para cara superior
Tamb = str2double( get(handles.temperaturamb, 'string') ); %%Temperatura ambiente
ku = str2double( get(handles.conductuvidad, 'string') ); %%Conductividad térmica
q=0; %%Generacion de calor
%Datos de nodos y longitudes
Nx=20; %%Nodos en X
Nz=20; %%Nodos en Z
Ny=20; %%Nodos en Y
Lx=.2; %%Longitud en X
Ly=.2; %%Longitud en Y
Lz=.2; %%Longitud en Z
dx=Lx/Nx;
dy=Ly/Ny;
dz=Lz/Nz;
%Coeficientes de nodos internos
rx=ku/dx^2; %Coeficiente de incremento en x
ry=ku/dy^2; %Coeficiente de incremento en y
rz=ku/dy^2; %Coeficiente de incremento en z
px=ku/dx; %Coeficiente de incremento en x
py=ku/dy; %Coeficiente de incremento en y
pz=ku/dz; %Coeficiente de incremento en z
%Inicializacion de las matrices
N=Nx*Ny*Nz; %El numero de incognitas de la matriz
A=zeros(N,N); %Matriz de coeficientes
T=zeros(N,1); %Matriz de temperaturas(grafica)
B=zeros(N,1); %Matriz de Resultados
P=-q; %Termino necesario para la generacion de calor
NFS=(ku/dx); %Avance en las fronteras hacia atras nodo secundario
NFSA=(ku/dx); %Avance en las fronteras hacia atras nodo secundario
%Inicializacion de ciclos para nodos internos
for k=2:Nz-1; %Controla el nivel en Z
for i=2:Nx-1; %Controla la fila de posiciones en X
for j=2:Ny-1; %Controla las columnas en Y
n=j+(i-1)*Ny+((k-1)*Nx*Ny); %Le da un numero al nodo en vez de una coordenada
A(n,n)=-2*(rx+ry+rz);
A(n,n-1)=1*ry; %Nodo en bloque anterior X
A(n,n+1)=1*ry; %Nodo en bloque siguiente X
A(n,n+Ny)=1*rz; %Nodo en bloque siguiente Y
A(n,n-Ny)=1*rz; %Nodo en bloque anterior Y
A(n,n-Nx*Ny)=1*rx; %Nodo en bloque anterior en Z
A(n,n+Nx*Ny)=1*rx; %Nodo en bloque siguiente en Z
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%Gauss Seidel para encontrar las incognitas de temperatura%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c=1; %Declaracion de contador para las iteracion de temperatura
while c<3000 %Contador while para las iteraciones
%%Solucion nodos interiores
%%%Solucion cara frontal%%%
i=1; %La posicion en Y no cambia en esa cara.
for k=1:Nz-1; %Controla la distancia en Z.
for j=1:Ny; %Controla la distancia en X.
n =j+(i-1)*Ny+((k-1)*Nx*Ny); %La posicion en X necesita esta cambiando
if S1p == 1
B(n)=(-hFtal*Tamb-NFSA*B(n+Nx))/((-ku/dx)-hFtal); %Frontera en cara frontal
end
if S2p == 1
B(n)=TcaraFtal; %Temperatura constante cara frontal
end
if S3p == 1
%%PENDIENTE%% %Flujo de calor frontal
end
if S4p == 1
hFtal = 0; %Condicion de conveccion cara frontal
B(n)=(-hFtal*Tamb-NFSA*B(n+Nx))/((-ku/dx)-hFtal);
end
end
end
%%%Solucion cara inferior%%%
k=1; %La posicion en Z no cambia en esa cara.
for i=2:Nx-1; %Controla la distancia en Z.
for j=2:Ny-1; %La posicion en X necesita esta cambiando
n=j+(i-1)*Ny+((k-1)*Nx*Ny); %Le da un numero al nodo en vez de una coordenada
if S5p == 1
B(n)=(-hIrior*Tamb-NFSA*B(n+Ny*Nx))/((-ku/dx)-hIrior); %Frontera en cara inferior
end
if S6p == 1
B(n)=TcaraIrior; %Temperatura constante cara frontal
end
if S7p == 1
%%PENDIENTE%% %Flujo de calor frontal
end
if S8p == 1
hIrior = 0; %Condicion de conveccion cara frontal
B(n)=(-hIrior*Tamb-NFSA*B(n+Ny*Nx))/((-ku/dx)-hIrior);
end
end
end
%%%Solucion cara trasera%%%
i=Nx; %La posicion en X no cambia en esa cara.
for k=1:Nz-1; %Controla la distancia en Z.
for j=1:Ny; %La posicion en Y necesita esta cambiando
n=j+(i-1)*Ny+((k-1)*Nx*Ny); %Le da un numero al nodo en vez de una coordenada
if S9p == 1
B(n)=(-hTsera*Tamb-NFS*B(n-Nx))/((-ku/dx)-hTsera); %Frontera en cara inferior
end
if S10p == 1
B(n)=TcaraTsera; %Temperatura constante cara frontal
end
if S11p == 1
%%PENDIENTE%% %Flujo de calor frontal
end
if S12p == 1
hTsera = 0; %Condicion de conveccion cara frontal
B(n)=(-hTsera*Tamb-NFS*B(n-Nx))/((-ku/dx)-hTsera);
end
end
end
%%%Solucion cara superior%%%
k=Nz; %La posicion en Z no cambia en esa cara.
for i=1:Nx; %Controla la distancia en Z.
for j=1:Ny; %La posicion en X necesita esta cambiando
n=j+(i-1)*Ny+((k-1)*Nx*Ny); %Le da un numero al nodo en vez de una coordenada
if S13p == 1
B(n)=(-hSrior*Tamb-NFS*B(n-Nx*Ny))/((-ku/dx)-hSrior); %Frontera en cara inferior
end
if S14p == 1
B(n)=TcaraSrior; %Temperatura constante cara frontal
end
if S15p == 1
%%PENDIENTE%% %Flujo de calor frontal
end
if S16p == 1
hSrior = 0; %Condicion de conveccion cara frontal
B(n)=(-hSrior*Tamb-NFS*B(n-Nx*Ny))/((-ku/dx)-hSrior);
end
end
end
%%%Solucion cara derecha%%%
j=1; %La posicion en X no cambia en esa cara.
for i=2:Nx-1; %Controla la distancia en Z.
for k=1:Nz; %La posicion en Y necesita esta cambiando
n=j+(i-1)*Ny+((k-1)*Nx*Ny); %Le da un numero al nodo en vez de una coordenada
if S17p == 1
B(n)=(-hDcha*Tamb-NFS*B(n+1))/((-ku/dx)-hDcha); %Frontera en cara inferior
end
if S18p == 1
B(n)=TcaraDcha; %Temperatura constante cara frontal
end
if S19p == 1
%%PENDIENTE%% %Flujo de calor frontal
end
if S20p == 1
hDcha = 0; %Condicion de conveccion cara frontal
B(n)=(-hDcha*Tamb-NFS*B(n+1))/((-ku/dx)-hDcha);
end
end
end
%%%Solucion frontera a conveccion cara izquierda%%%
j=Ny; %La posicion en X no cambia en esa cara.
for i=2:Nx-1; %Controla la distancia en Z.
for k=1:Nz-1; %La posicion en Y necesita esta cambiando
n=j+(i-1)*Ny+((k-1)*Nx*Ny); %Le da un numero al nodo en vez de una coordenada
if S21p == 1
B(n)=(-hIzq*Tamb-NFSA*B(n-1))/((-ku/dx)-hIzq); %Frontera en cara inferior
end
if S22p == 1
B(n)=TcaraIzq; %Temperatura constante cara frontal
end
if S23p == 1
%%PENDIENTE%% %Flujo de calor frontal
end
if S24p == 1
hIzq = 0; %Condicion de conveccion cara frontal
B(n)=(-hIzq*Tamb-NFSA*B(n-1))/((-ku/dx)-hIzq);
end
end
end
for i=2:Nx-1; %Controla el nivel de posiciones en Z
for k=2:Nz-1; %Controla la fila de posiciones de los coeficientes
for j=2:Ny-1; %Controla las columnas de los coeficientes
n=j+(i-1)*Ny+((k-1)*Nx*Ny); %Le da un numero al nodo en vez de una coordenada
B(n)=(1/(2*(rx+ry+rz)))*(A(n,n)*B(n)+(A(n,n-1)*B(n-1)+A(n,n+1)*B(n+1)+A(n,n+Ny)*B(n+Ny)+A(n,n-Ny)*B(n-Ny)+A(n,n-Nx*Ny)*B(n-Nx*Ny)+A(n,n+Nx*Ny)*B(n+Nx*Ny)));
end
end
end
c=c+1;
end
%Reacomodo de posiciones de vector
f1=figure;
reshape(B,Nx,Ny,Nz);
[x,y,z]= meshgrid(1:1:Nx,1:1:Ny,1:1:Nz);
slice(x,y,z,ans(:,:,:),[1,Nx],[1,Ny],[1,Nz]);
shading interp
xlabel('X','fontSize',12);
ylabel('Y','fontSize',12);
zlabel('Z','fontSize',12);
colorbar('location','eastoutside','fontsize',12);
c= colorbar;
c.Label.String = 'Temperatura °C';
title('Difusión de Calor','fontsize',12);
grid on;
axis('equal');
ax.XAxisLocation = 'origin';
ax.YAxisLocation = 'origin';
ax.ZAxisLocation = 'origin';
En la imagen que adjunto se muestra mi interfaz
Valora esta pregunta
0