2016-05-14 27 views
0

私は、非線形偏微分方程式を解くためのMatlabコードを書いています。私は、Aを主対角、Bを位置(i、i + 1)に、C in(i、i)を(M + 1)^ 2のブロック行列で置き換える必要がある点に達しました。 +2)。すなわち、BとCが主対角Aの上にあります。 このようなブロック行列を作成する簡単な方法はありますか?あなたはこのようtriu機能を使用して単一のブロックを構築することができ、そもそもmatlabでブロック三重対角行列を作成する

答えて

1

:私の理解が正しいとあなたは同じブロックにM+1回繰り返すことによって、ブロック対角行列を作成したい場合は

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 

、これは私があなたのコードを実行した後に得るものです

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

: [5x5のダブル] [5x5のダブル] [5x5のダブル]あなたはそのためblkdiagを使用することができます [5x5 double] [5x5 double] – YYG

+0

あなたは何を意味するのかよく分かりません。 'blkdiag'の結果である' res'は、25x25ブロック対角行列です。 'blocks'が' M + 1'マトリックスのセル配列であることを意味するなら - もちろん、もちろんです。 'blkdiag'を使って1つのブロック対角行列に結合する必要があります。 –

+0

私があなたを理解していれば、ブロックマトリックスが形成され、それが表示されないことだけが意味されますか? – YYG