Re: [問題] 二維熱傳問題已回收
※ 引述《winderwen (需要充電一下!!)》之銘言:
: 這是我目前在解的二維熱傳問題,
: 三邊固定是T1,一邊是T2,以下是我編寫的程式碼,
: 可以請大家幫我看看哪裡出錯嗎?
: 因為跑出來的結果很奇怪~~ 謝謝
: clc
: clear all
: T1=70;
: T2=200;
: W=2;
: L=2;
: for x=0:0.2:2
: for y=0:0.2:2
: error1=100.0;
: n=0;
: while error1>0.01
: n=n+1;
: w1(n)=2/n*sin(n*pi*x/L).*(sinh(n*pi*y/L)./sinh(n*pi*W/L));
: w(n)=(2/pi)*(sum(w1(1:n)));
: T(n)=(T2-T1)*w(n)+T1;
: if n>1
: error1=abs((T(n-1)-T(n))/T(n-1));
: end
: end
: T_final(floor(x/0.2)+1,floor(y/0.2)+1)=T(n);
: w1(:)=0;
: end
: end
很怪 看起來整個結構都寫錯
我想x,y是你的二維座標,所以while至少要放在最外層,
才可以知道x,y跑出來w整個domain的結果,
而x,y也可以用矩陣的方式宣告就不用迴圈的方式計算w
不過不太瞭解,你最後想求出來的是T還是w,應該是T,從error1看來
另while裡面有個if,的確,n=2以上才可以使用,因為在n=1沒有T(0),
建議,若要增加while裡面的速度,可以去掉if
一開始先預設T(1) = inf; 我們從n=2開始進行,就可以不用那個if
而T_final.....和w1(:)=0在程式中似乎沒有用到
改寫如下,請參考:
clear
clc
T1=...;
T2=...;
W =...;
L =...;
x = 0:0.2:2;
y = 0:0.2:2;
% 預設值
error = 100;
n = 1;
T(1) = inf;
w = 0;
while error > 0.01
n = n+1;
w1= ....;
w = w1 + w;
T(n) = (T2-T1)*w+T1;
error = abs(T(n-1)-T(n))/T(n-1);
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.128.130
討論串 (同標題文章)