42 lines
1.3 KiB
Factor
42 lines
1.3 KiB
Factor
|
! Copyright (c) 2012 Anonymous
|
|||
|
! See http://factorcode.org/license.txt for BSD license.
|
|||
|
USING: kernel math.functions math.matrices sequences ;
|
|||
|
IN: rosetta-code.conjugate-transpose
|
|||
|
|
|||
|
! http://rosettacode.org/wiki/Conjugate_transpose
|
|||
|
|
|||
|
! Suppose that a matrix M contains complex numbers. Then the
|
|||
|
! conjugate transpose of M is a matrix MH containing the complex
|
|||
|
! conjugates of the matrix transposition of M.
|
|||
|
|
|||
|
! This means that row j, column i of the conjugate transpose
|
|||
|
! equals the complex conjugate of row i, column j of the original
|
|||
|
! matrix.
|
|||
|
|
|||
|
! In the next list, M must also be a square matrix.
|
|||
|
|
|||
|
! A Hermitian matrix equals its own conjugate transpose: MH = M.
|
|||
|
|
|||
|
! A normal matrix is commutative in multiplication with its
|
|||
|
! conjugate transpose: MHM = MMH.
|
|||
|
|
|||
|
! A unitary matrix has its inverse equal to its conjugate
|
|||
|
! transpose: MH = M − 1. This is true iff MHM = In and iff MMH =
|
|||
|
! In, where In is the identity matrix.
|
|||
|
|
|||
|
! Given some matrix of complex numbers, find its conjugate
|
|||
|
! transpose. Also determine if it is a Hermitian matrix, normal
|
|||
|
! matrix, or a unitary matrix.
|
|||
|
|
|||
|
: conj-t ( matrix -- conjugate-transpose )
|
|||
|
flip [ [ conjugate ] map ] map ;
|
|||
|
|
|||
|
: hermitian-matrix? ( matrix -- ? )
|
|||
|
dup conj-t = ;
|
|||
|
|
|||
|
: normal-matrix? ( matrix -- ? )
|
|||
|
dup conj-t [ m. ] [ swap m. ] 2bi = ;
|
|||
|
|
|||
|
: unitary-matrix? ( matrix -- ? )
|
|||
|
[ dup conj-t m. ] [ length identity-matrix ] bi = ;
|