2017-11-26 12 views
1

私は2D熱伝達の問題を解決しようとしています(私はMATLABの初心者です)。私は以下のコードを書いており、実行すると停止しません。エラー(err)を使用してコンバージェンス状態を組み込もうとしましたが、プログラムを停止するたびに私のエラーは150です。コンバージェンスチェックを得るためにこのコードを調整するのに助けてもらえますか?有限差分

(ちなみに、私のプロジェクトは3Dプロジェクトですが、一度2Dのケースを試していたら、それを拡張して展開します)。

%===Solution of the problem of 2D in the bookmarks:Case2a===== 

close all; 
clear all; 
clc; 

DX=3; % step size 
DY=3; 
Lx= 60; %length along x-axis in cmn 
Ly=30; %length along y-axis 
m=Lx/DX+1; %Number of nodes along x-axis 
n=(Ly/DY+1); %Number of nodes along y-axis 
n=floor(n); 

k=2; 
h=500; 
T_inf=20; 

X=0:DX:Lx; 
Y=0:DY:Ly; 
T=zeros(m,n); 

tol=1; 
s=0; %s=2000 could be set as the maximum number of allowed iteration for example 
err=1; 
T_old=10; 

while err >=tol && s<2001 
s=s+1; 

%--boundary conditions---------------------------------------------------- 

T(1,:)=160;  %west 
T(m,:)=100; %east 

%===South Boundary "insulation" ============== 
for i=2:m-1 
    T(i,1)=0.25*[2*T(i,2)+T(i-1,1)+T(i+1,1)]; 
end 
%================North Boundary "Convection" ================ 
for i=2:m-1 
    T(i,n)=0.5*k/(h*DX+2*k)*[2*T(i,n-1)+T(i-1,n)+T(i+1,n)+2*h*DX*T_inf/k]; 
end 

for i = 2:m-1 
    for j = 2:n-1 
    T(i,j)=0.25*(T(i-1,j)+T(i+1,j)+T(i,j-1)+T(i,j+1)); 
    end 
end 
err=max(max(abs(T-T_old))); 
end 

%T=rot90(T) 

答えて

2

おそらくerrを計算した後、あなたのループ内T_oldからTを割り当てる必要があります。

+0

どのように私はそれを逃したか分からないが、それは働いてくれてありがとう。 –

+0

このコードを3Dに拡張することをお勧めしますか。私はkのための3番目のforループと対応する境界条件を追加することを考えていました。 –

+0

これは完全に異なるタイプの質問です。コードを理解することなく簡単に答えられるわけではありません。私はそれについて新しい質問を作成することをお勧めします。 –