2011-11-29 7 views
0

Je travaille sur ce codage pour ma classe de transfert de chaleur. Le nombre sont supposés être d'autres équations, mais je les ai remplacés par des numéros de simplementMatlab codage aide matrice de traitement

l=.2; 

w=.2; 

dx=.05; 

dy=.05; 

k=400; 

q=500; 

Nx = (l/dx+1); %nodes in the x direction 

Ny = (w/dy+1); %nodes in the y direction 

T=zeros(Nx,Ny); 

for m = (1:Nx) %node counter in x nodes 

    for n = (1:Ny) %node counter in y nodes 

     if n==1; %left side 
      T(m,n)=50; 

     elseif m==1 && n<Ny;%Heat Flux 

      T(m,n)=60; 

     elseif m>=2 && n==Ny && m<Nx; %insulated, right side 
      T(m,n)=70; 

     elseif n>=2 && n<=Ny-1 && m==Nx ; %insulated, bottom side 

      T(m,n)=80; 

     elseif m>=((.325*l)/dx)+1 && m<=((.675*l)/dx)+1 && n>=((.325*w)/dy)+1 && n<= 
((.675*w)/dy)+1; 

      T(m,n) = 400;%center or steam 
     elseif m>1 && m<Nx && n>1 && n<Ny 

      T(m,n) = 90; 

     elseif m==1 && n==Ny; 

      **T(m,n)=T(m+2,n)/2;%**<-------------------this wont work properly**** 

     elseif n==Nx && m==Ny; 

      T(m,n)= 110; 



     end 

    end 

end 

Je ne sais pas pourquoi il ne choisira pas la valeur correcte et le diviser par 2 plutôt dit que la réponse est 0 quand il est supposé être T (2,5) qui est 70/2 = 35?

T = 

    50 60 60 60  0 
    50 90 90 90 70 
    50 90 400 90 70 
    50 90 90 90 70 
    50 80 80 80 110 

toute aide serait apprécier

Merci

Répondre

1

Comme je le vois,

Vous essayez d'accéder à l'élément de la matrice qui est toujours initialisé à zéro. T Matrix est zéro (5,5).

Et la condition: if m==1 && n==Ny est exécutée au début de l'itération, à ce moment, m = 1, et n = 5 et T (2,5) = 0.

Vous avez donc T (1,5) = 0

Alors, je vous suggère de déboguer le code et vous vérifiez le contenu de la matrice M à la fin de chaque itération.

1

La raison pour laquelle T (1,5) est nul est que la ligne de code indiquée est exécutée à un point où T (3,5) est toujours mis à zéro - il n'a pas encore été rempli avec la valeur 70, et donc T (1,5) est réglé sur 0/2 = 0.

Si vous boucle à travers les valeurs de m dans l'ordre inverse, en modifiant le code à

for m = (Nx:-1:1) 

vous trouverez T (3,5) est maintenant mis à 70 avant que T (1,5) soit réglé, et T (1,5) est maintenant réglé correctement sur 35.