0
我正在寫一個Matlab代碼來解決非線性偏微分方程。我通過(M + 1)^ 2塊矩陣得到(M + 1)^ 2的點,其中A表示主對角線,B表示位置(i,i + 1),而C in(i,i +2)。即B和C在主對角線A之上。有沒有簡單的方法來建立這樣的塊矩陣?在matlab中創建塊三對角矩陣
我正在寫一個Matlab代碼來解決非線性偏微分方程。我通過(M + 1)^ 2塊矩陣得到(M + 1)^ 2的點,其中A表示主對角線,B表示位置(i,i + 1),而C in(i,i +2)。即B和C在主對角線A之上。有沒有簡單的方法來建立這樣的塊矩陣?在matlab中創建塊三對角矩陣
首先,你可以建立使用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{:});
這是我運行你的代碼後得到: [5x5的雙] [5x5的雙] [5x5的雙] [5x5雙] [5x5雙] – YYG
不確定你的意思。 'res','blkdiag'的結果是一個25x25的塊對角線矩陣。如果你的意思是'blocks'是'M + 1'矩陣的單元陣列 - 當然可以。我們需要使用blkdiag將它們組合成一個塊對角矩陣。 –
好的,如果我理解你,你的意思是塊矩陣形成,只是它不顯示? – YYG