stringtranslate.com

Matrices de duplicación y eliminación

En matemáticas , especialmente en álgebra lineal y teoría de matrices , la matriz de duplicación y la matriz de eliminación son transformaciones lineales utilizadas para transformar semivectorizaciones de matrices en vectorizaciones o (respectivamente) viceversa.

Matriz de duplicación

La matriz de duplicación es la única matriz que, para cualquier matriz simétrica , se transforma en :

.

Para la matriz simétrica , esta transformación se lee


La fórmula explícita para calcular la matriz de duplicación de una matriz es:

Dónde:

Aquí hay una función de C++ que utiliza Armadillo (biblioteca de C++) :

arma :: mat duplication_matrix ( const int & n ) { arma :: mat out (( n * ( n + 1 )) / 2 , n * n , arma :: fill :: ceros ); for ( int j = 0 ; j < n ; ++ j ) { for ( int i = j ; i < n ; ++ i ) { arma :: vec u (( n * ( n + 1 )) / 2 , arma :: fill :: ceros ); u ( j * n + i - (( j + 1 ) * j ) / 2 ) = 1.0 ; arma :: mat T ( n , n , arma :: fill :: ceros ); T ( i , j ) = 1.0 ; T ( j , i ) = 1.0 ; out += u * arma :: trans ( arma :: vectorise ( T )); } } devuelve fuera . t (); }                                                    

Matriz de eliminación

Una matriz de eliminación es una matriz que, para cualquier matriz , se transforma en :

[1]

Según la definición explícita (constructiva) dada por Magnus y Neudecker (1980), la matriz de eliminación está dada por

donde es un vector unitario cuyo elemento -ésimo es uno y ceros en el resto, y .

Aquí hay una función de C++ que utiliza Armadillo (biblioteca de C++) :

arma :: mat matriz_eliminación ( const int & n ) { arma :: mat out (( n * ( n + 1 )) / 2 , n * n , arma :: rellenar :: ceros ); for ( int j = 0 ; j < n ; ++ j ) { arma :: rowvec e_j ( n , arma :: rellenar :: ceros ); e_j ( j ) = 1.0 ; for ( int i = j ; i < n ; ++ i ) { arma :: vec u (( n * ( n + 1 )) / 2 , arma :: rellenar :: ceros ); u ( j * n + i - (( j + 1 ) * j ) / 2 ) = 1.0 ; arma :: rowvec e_i ( n , arma :: rellenar :: ceros ); e_i ( i ) = 1.0 ; fuera += arma :: kron ( u , arma :: kron ( e_j , e_i )); } } devolver fuera ; }                                                       

Para la matriz , una opción para esta transformación viene dada por

.

Notas

  1. ^ Magnus y Neudecker (1980), Definición 3.1

Referencias