2016-05-14 380 views
0

我正在寫一個Matlab代碼來解決非線性偏微分方程。我通過(M + 1)^ 2塊矩陣得到(M + 1)^ 2的點,其中A表示主對角線,B表示位置(i,i + 1),而C in(i,i +2)。即B和C在主對角線A之上。有沒有簡單的方法來建立這樣的塊矩陣?在matlab中創建塊三對角矩陣

回答

1

首先,你可以建立使用triu功能像這樣的單塊:

M = 4; 
A = 2; B = 3; C = 4; 
onesMat = ones(M+1,M+1); 
block = A*eye(M+1) + B*(triu(onesMat,1)-triu(onesMat,2)) + C*(triu(onesMat,2)-triu(onesMat,3)); 

block = 
    2  3  4  0  0 
    0  2  3  4  0 
    0  0  2  3  4 
    0  0  0  2  3 
    0  0  0  0  2 

如果我的理解是正確的,你要重複相同的塊M+1次創造一個塊對角矩陣,您可以使用blkdiag爲:

blocks = repmat({block}, M+1, 1); 
res = blkdiag(blocks{:}); 
+0

這是我運行你的代碼後得到: [5x5的雙] [5x5的雙] [5x5的雙] [5x5雙] [5x5雙] – YYG

+0

不確定你的意思。 'res','blkdiag'的結果是一個25x25的塊對角線矩陣。如果你的意思是'blocks'是'M + 1'矩陣的單元陣列 - 當然可以。我們需要使用blkdiag將它們組合成一個塊對角矩陣。 –

+0

好的,如果我理解你,你的意思是塊矩陣形成,只是它不顯示? – YYG