2011-11-29 2 views
0

나는 열 전달 클래스에 대한 코딩 작업을하고 있습니다. 수는 다른 식으로 생각하지만 난에 숫자를 대체 단순히Matlab 코딩 도움말 매트릭스 manupulation

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 

나는 그것이 올바른 값을 선택하고 오히려 대답은 0 말하는 2로 나누면되지 않습니다 왜 확실하지 않다 T (2,5) = 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 

도움 당신은 여전히 ​​0으로 초기화되어있는 행렬의 요소에 액세스하려고 그것을

감사

내가보기로

답변

1

,

감사 할 것입니다. T 행렬은 제로 (5,5)입니다.

조건 : if m==1 && n==Ny은 반복의 초기에 실행되고, m = 1이고 n = 5이고 T (2,5) = 0입니다.

그래서 당신은 T는 (1,5) 그래서 0

을 =가, 난 당신이 코드를 디버깅 제안하고 각 반복의 끝에서 매트릭스 M의 내용을 확인합니다.

1

T (1,5)가 여전히 0으로 설정된 이유는 T (1,5)가 0 인 이유는 코드의 줄이 T (3,5)가 여전히 0으로 설정된 시점에서 실행된다는 것입니다. 만약 찾을하면 역순 m의 값을 반복 코드를 수정하여이

for m = (Nx:-1:1) 

을 할 경우, 따라서 T는 (1,5)은 0/2 = 0

로 설정된 T (1,5)가 설정되기 전에 T (3,5)가 이제 70으로 설정되고, T (1,5)가 이제 35로 정확하게 설정된다.