簡體   English   中英

Matlab編碼有助於矩陣的manupulation

[英]Matlab coding help matrix 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

我不確定為什么它不會選擇正確的值並將其除以2而不是說當答案是T(2,5)時它是0(= 20 = 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

任何幫助都會很感激

謝謝

照我看來,

您正在嘗試訪問仍初始化為零的Matrix元素。 T矩陣為零(5,5)。

條件: if m==1 && n==Ny在迭代的早期執行,那時m = 1,n = 5,T(2,5)= 0。

所以你有T(1,5)= 0

所以,我建議你調試代碼,並在每次迭代結束時檢查Matrix M的內容。

T(1,5)為零的原因是所指示的代碼行在T(3,5)仍被設置為零時執行 - 它尚未填充值70,因此T( 1,5)設置為0/2 = 0。

如果以相反的順序遍歷m的值,則通過修改代碼

for m = (Nx:-1:1)

你會發現T(3,5)現在在設置T(1,5)之前設置為70,而T(1,5)現在正確設置為35。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM