MATLABでベクトルに基づいて三角行列を作成するにはどうすればよいですか?
-
05-07-2019 - |
質問
次のようなベクターがあるとしましょう:
A = [101:105]
実際には:
[ 101, 102, 103, 104, 105 ]
そして、ベクトル/行列関数と演算子のみを使用して行列を生成したい:
101 102 103 104 105
102 103 104 105 0
103 104 105 0 0
104 105 0 0 0
105 0 0 0 0
または次のマトリックス:
101 102 103 104 105
0 101 102 103 104
0 0 101 102 103
0 0 0 101 102
0 0 0 0 101
アイデアはありますか?
(私はMATLABの初心者です。しかし、私はこれにaddleしています...)
解決
hankel(A)
は最初の行列を取得します
triu(toeplitz(A))
は2番目のものを取得します。
-ローレン
他のヒント
最適なソリューションは、ローレン。 SPDIAGS を使用して、これらのマトリックスを作成することもできます。
vec = 101:105;
A = full(spdiags(repmat(vec,5,1),0:4,5,5)); % The second matrix
B = fliplr(full(spdiags(repmat(fliplr(vec),5,1),0:4,5,5))); % The first matrix
ローレンが言及した組み込み関数のいくつかについて知る前に、このようなバンド行列を作成したことを思い出します。それらを使用するほど簡単できれいではありませんが、うまくいきました。 =)
私がそれについて行く方法は、マトリックス A
を作成することです:
101 102 103 104 105 101 102 103 104 105 101 102 103 104 105 101 102 103 104 105 101 102 103 104 105
そして、マトリックス B
を見つけて、 A * B
を掛けると、希望する結果が得られるようにします。基本的に、最初に紙の上で線形代数を実行し、次にMatlabに計算を実行させます。
このような規則的なパターンでこのような三角行列を生成するには、toeplitz関数を使用します。例:
m=toeplitz([1,0,0,0],[1,2,3,4])
その他の場合は、 rot90(m)
所属していません StackOverflow