11

次のようなベクトルがあるとします。

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の初心者ですが、このようなことに悩まされてきました...)

4

4 に答える 4

26

hankel(A)最初の行列を取得します

triu(toeplitz(A))2番目のものを取得します。

――ローレン

于 2009-06-16T11:28:28.350 に答える
3

最良の解決策はローレンによってリストされています。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

ローレンが言及した組み込み関数のいくつかについて知る前に、このような帯行列を作成したことを思い出します。それらを使用するほど単純でクリーンではありませんが、機能しました。=)

于 2009-06-16T15:20:05.467 に答える
2

このような規則的なパターンを持つ三角形の行列を生成するには、toeplitz 関数を使用します。

m=toeplitz([1,0,0,0],[1,2,3,4])

他の場合には、使用しますrot90(m)

于 2012-10-10T12:25:49.187 に答える
2

私がそれについて行く方法は、マトリックスを作成することです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 に計算を実行させます。

于 2009-06-16T10:03:26.977 に答える