MATLABでベクトルに基づいて三角行列を作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1000535

  •  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)

を使用します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top