Matlab-кодирование помогает матричной манипуляции - PullRequest
0 голосов
/ 29 ноября 2011

Я работаю над этим кодированием для моего класса теплопередачи. Предполагается, что число - это другие уравнения, но я заменил их числами просто на

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, а говорит, что ответ равен 0, когда предполагается, что 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

любая помощь будет признательна

Спасибо

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Причина, по которой T (1,5) равен нулю, состоит в том, что указанная строка кода выполняется в точке, когда T (3,5) все еще установлена ​​на ноль - она ​​еще не была заполнена значением 70, и поэтому T (1,5) устанавливается в 0/2 = 0.

Если вы перебираете значения m в обратном порядке, изменив код на

for m = (Nx:-1:1)

вы обнаружите, что T (3,5) теперь установлено на 70, прежде чем T (1,5), а T (1,5) теперь правильно установлено на 35.

1 голос
/ 29 ноября 2011

На мой взгляд,

Вы пытаетесь получить доступ к элементу Матрицы, который все еще инициализирован в ноль.Т Матрица равна нулю (5,5).

И условие: if m==1 && n==Ny выполняется на ранней стадии итерации, когда m = 1, а n = 5 и T (2,5) = 0.

Итак, выиметь T (1,5) = 0

Итак, я бы посоветовал вам отладить код и проверять содержимое матрицы M в конце каждой итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...