作者e01234567 (伊武天澤)
看板MATLAB
標題[問題] 有限差分法繪圖問題
時間Thu Nov 29 23:41:00 2012
在下是matlab的新手,今天晚上終於搞好怎麼用有限差分法。
不過教授要求用把方格裡每次跌代的數據拿來繪圖,製成動畫
所以我猜數據應該要維持成原方格模式,
我用的方法比較笨,
假如邊界值是這樣好了
1 1 1 1 1
0.8 x7 x8 x9 1
0.5 x4 x5 x6 1
0.2 x1 x2 x3 1
0 0.1 0.25 0.9 1
我是把u1~u9周圍加相除以四的部份拿出來算,之後再列出
9*9的大矩陣Ax=b的方式來求解
再輸入matlab 用Jocobi法進行跌代進算,
但問題來了..我算出來的
新x值是以
x=[x1 x2 x3 x4 x5 x6 x7 x8 x9]' 的方式顯現,
在想要寫甚麼碼來把他塞回原方格的位置,
而且邊界值的部份是被我先抓出來手算過的,所以也不太知道該怎麼把邊界值&新x值
組回原本的方格
向
1 1 1 1
0.8 newx7 newx8 newx9 1
0.5 newx4 newx5 newx6 1
0.2 newx1 newx2 newx3 1
0 0.1 0.25 0.9 1
這樣子的方式來顯現他,
for i=1:n^0.5
B(i,1:n^0.5)=x(1:n^0.5,1)
end
一開始是打算用這樣的方式來寫
B =
0.3508 0.5276 0.8187
0.3508 0.5276 0.8187
0.3508 0.5276 0.8187
ans =
0.3508
0.5276
0.8187
0.5874
0.7017
0.8589
0.8080
0.8562
0.9258
卻跑出這樣的東西....不知道該怎麼...
還是說從我一開始這樣來解跌代的問題,就不太可能把數字塞回方格了呢?
而且我這樣的方式很笨,今天只有九個未知數....
當如果有90個方程式的話,就得自己手算90個 再慢慢去輸入A係數矩陣,
感覺上不是很好,
有沒有其他更好的寫法可以推薦^^?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.229.231
1F:推 CBET:xMat = rot90(reshape(x, 3, 3)); % 將 x 排回原來的位置 11/30 00:27
2F:→ CBET:B(2:(end-1), 2:(end-1)) = xMat; % 將排好的 x 塞回去 11/30 00:28
3F:→ e01234567:謝謝CBET大,幫大忙了,不過我要輸入第二行的式子 11/30 00:55
4F:→ e01234567:B(2:(end-1), 2:(end-1)) = xMat 11/30 00:55
5F:→ e01234567:會出現Undefined function or variable 'B'.的訊息 11/30 00:59
6F:→ e01234567:是我要再設syms B之類的嗎?還是先設定好B矩陣的唯度!? 11/30 00:59
7F:推 CBET:我這邊 B 是指那 5x5 含邊界值的矩陣,需要先定義好 11/30 01:03
8F:→ e01234567:不好意思我沒用過不輸入數字、代號,純定義矩陣維度的 11/30 01:19
9F:→ e01234567:方法,是用eye ones 或是zeros randn 這些 隨便定出B矩 11/30 01:19
10F:→ e01234567:陣嗎? 11/30 01:19
11F:→ e01234567:還是說打好邊界值,中間3*3那一塊 就打個0給他就好嗎? 11/30 01:20
12F:推 CBET:是的,中間那塊給 0 就可以了,反正後面要用 xMat 取代 11/30 01:29
13F:→ e01234567:了解 謝謝 11/30 01:29
14F:→ e01234567:雖然說自己只能慢慢列矩陣 方程式 和自己補邊界值 11/30 01:30
15F:→ e01234567:不過也是一個方法^^"學到了很多 謝謝 11/30 01:31
16F:→ e01234567:作業是中間是9*9 右邊界還是 對x偏微=0 所以是90個方程 11/30 01:32
17F:→ e01234567:有得我算了orz.. 11/30 01:32
※ 編輯: e01234567 來自: 140.120.229.231 (11/30 10:33)
18F:推 tomichy:感覺好溫馨 看見十幾年前的東西... 11/30 13:30