1. ホーム
  2. matlab

[解決済み] matlabで三角行列を作る

2022-02-14 01:31:08

質問

matlabで三角行列を作りたい。

full(gallery('tridiag', 10,  1, -4, 6, -4, 1)) 

で、関数の引数が多すぎるような気がします。他の方法はないのでしょうか?

次のような行列を作ろうとしています。

 6    -4     1     0     0
-4     6    -4     1     0
 1    -4     6    -4     1
 0     1    -4     6    -4
 0     0     1    -4     6

解決方法は?

0でない対角線が5本あるので、これは3角形行列ではないので、この行列を使うことはできません。 tridiag オプションで指定します。このような行列は、手動で diag() この関数は,指定された対角線の行列を作成することができ,どの対角線を書きたいかを選択することもできます.

したがって、5つの異なる行列を作成し、それぞれの行列の対角が0でないことを指定することで実現できます。

n=5;
B=diag(6*ones(n,1),0)+diag(-4*ones(n-1,1),1)+diag(-4*ones(n-1,1),-1)+diag(1*ones(n-2,1),2)+diag(1*ones(n-2,1),-2);

このコードでは n=5 が行列の順序であれば diag(6*ones(n,1),0) は、ベクトル(長さ n ) は、すべての 6 となり、そのベクトルは0番目の対角線に配置されます。このような行列は、他の場所では0になります。
同様に diag(-4*ones(n-1,1),1) はベクトル(長さ n-1 ) は、すべての -4 となり、そのベクトルは第1超対角線に配置されます。このような行列は、他の部分ではゼロとなり、このような行列を前の行列と合計します。
そして、このような連鎖反応は、行列が完全に生成されるまで続くのです。

更新 : を見て回ったのですが gallery() ヘルプを見ると、確かにToeplitz pentadiagonalのオプションがあります。これを利用するとよいでしょう。

full(gallery('toeppen',5,1,-4,6,-4,1))