Re: [問題] 二維熱傳問題已回收

看板MATLAB作者 (衝啊 充實自己)時間14年前 (2009/12/16 20:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1BADAYgU (MATLAB)
文章代碼(AID): #1BADAYgU (MATLAB)