看板 MATLAB 關於我們 聯絡資訊
在下是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
CBET:xMat = rot90(reshape(x, 3, 3)); % 將 x 排回原來的位置 11/30 00:27
CBET:B(2:(end-1), 2:(end-1)) = xMat; % 將排好的 x 塞回去 11/30 00:28
e01234567:謝謝CBET大,幫大忙了,不過我要輸入第二行的式子 11/30 00:55
e01234567:B(2:(end-1), 2:(end-1)) = xMat 11/30 00:55
e01234567:會出現Undefined function or variable 'B'.的訊息 11/30 00:59
e01234567:是我要再設syms B之類的嗎?還是先設定好B矩陣的唯度!? 11/30 00:59
CBET:我這邊 B 是指那 5x5 含邊界值的矩陣,需要先定義好 11/30 01:03
e01234567:不好意思我沒用過不輸入數字、代號,純定義矩陣維度的 11/30 01:19
e01234567:方法,是用eye ones 或是zeros randn 這些 隨便定出B矩 11/30 01:19
e01234567:陣嗎? 11/30 01:19
e01234567:還是說打好邊界值,中間3*3那一塊 就打個0給他就好嗎? 11/30 01:20
CBET:是的,中間那塊給 0 就可以了,反正後面要用 xMat 取代 11/30 01:29
e01234567:了解 謝謝 11/30 01:29
e01234567:雖然說自己只能慢慢列矩陣 方程式 和自己補邊界值 11/30 01:30
e01234567:不過也是一個方法^^"學到了很多 謝謝 11/30 01:31
e01234567:作業是中間是9*9 右邊界還是 對x偏微=0 所以是90個方程 11/30 01:32
e01234567:有得我算了orz.. 11/30 01:32
※ 編輯: e01234567 來自: 140.120.229.231 (11/30 10:33)
tomichy:感覺好溫馨 看見十幾年前的東西... 11/30 13:30