Loading article…
数学、特に線型代数学と行列理論において、複製行列と消去行列は、行列の半ベクトル化をベクトル化に、あるいは(それぞれ)その逆に 変換するために使用される線形変換です。
複製マトリックス
複製行列は、任意の対称行列に対してに変換される唯一の行列です。
- 。
対称行列の場合、この変換は次のようになる。
マトリックスの複製マトリックスを計算するための明示的な式は次のとおりです。
どこ:
- は、位置で値を、他の場所では 0 を持つの単位ベクトルです。
- 位置が1でそれ以外が0の行列である
以下は、 Armadillo (C++ ライブラリ)を使用したC++関数です。
arma :: mat duplication_matrix ( const int & n ) { arma :: mat out (( n * ( n + 1 )) / 2 , n * n , arma :: fill :: zeros ); for ( int j = 0 ; j < n ; ++ j ) { for ( int i = j ; i < n ; ++ i ) { arma :: vec u (( n * ( n + 1 )) / 2 , arma :: fill :: zeros ); u ( j * n + i - (( j + 1 ) * j ) / 2 ) = 1.0 ; arma :: mat T ( n , n , arma :: fill :: zeros ); T ( i , j ) = 1.0 ; T ( j , i ) = 1.0 ; out += u * arma :: trans ( arma :: vectorise ( T )); } } return out . t (); }
消去マトリックス
消去行列は、任意の行列に対してに変換される行列です。
- [1 ]
Magnus & Neudecker (1980) による明示的な(構成的な)定義によれば、消去行列は次のように表される。
ここで、 は、番目の要素が 1 で、それ以外が 0 である単位ベクトルです。
以下は、 Armadillo (C++ ライブラリ)を使用したC++関数です。
arma :: mat elimination_matrix ( const int & n ) { arma :: mat out (( n * ( n + 1 )) / 2 , n * n , arma :: fill :: zeros ); for ( int j = 0 ; j < n ; ++ j ) { arma :: rowvec e_j ( n , arma :: fill :: zeros ); e_j ( j ) = 1.0 ; for ( int i = j ; i < n ; ++ i ) { arma :: vec u (( n * ( n + 1 )) / 2 , arma :: fill :: zeros ); u ( j * n + i - (( j + 1 ) * j ) / 2 ) = 1.0 ; arma :: rowvec e_i ( n 、arma :: fill :: zeros ); e_i ( i ) = 1.0 ; out += arma :: kron ( u 、arma :: kron ( e_j 、e_i ) ); } } return out ; }
行列の場合、この変換の1つの選択肢は次のように与えられる。
- 。
注記
- ^ Magnus & Neudecker (1980)、定義 3.1
参考文献
- Magnus, Jan R.; Neudecker, Heinz (1980)、「消去行列: いくつかの補題と応用」、SIAM Journal on Algebraic and Discrete Methods、1 (4): 422–449、doi :10.1137/0601049、ISSN 0196-5212。
- Jan R. Magnus と Heinz Neudecker (1988)、「Matrix Differential Calculus with Applications in Statistics and Econometrics」、Wiley。ISBN 0-471-98633 -X。
- Jan R. Magnus (1988)、Linear Structures、オックスフォード大学出版局。ISBN 0-19-520655 -X
