2018-09-22 19:18:59 +08:00
use na ::{ Scalar , Real , DefaultAllocator } ;
2018-09-20 16:50:34 +08:00
2018-09-20 20:23:31 +08:00
use traits ::{ Alloc , Dimension , Number } ;
2018-09-23 20:48:45 +08:00
use aliases ::{ TMat , TVec } ;
2018-09-20 16:50:34 +08:00
2018-09-22 19:18:59 +08:00
/// The determinant of the matrix `m`.
2018-09-23 20:48:45 +08:00
pub fn determinant < N : Real , D : Dimension > ( m : & TMat < N , D , D > ) -> N
2018-09-20 20:23:31 +08:00
where DefaultAllocator : Alloc < N , D , D > {
m . determinant ( )
}
2018-09-20 16:50:34 +08:00
2018-09-22 19:18:59 +08:00
/// The inverse of the matrix `m`.
2018-09-23 20:48:45 +08:00
pub fn inverse < N : Real , D : Dimension > ( m : & TMat < N , D , D > ) -> TMat < N , D , D >
2018-09-20 16:50:34 +08:00
where DefaultAllocator : Alloc < N , D , D > {
2018-09-23 20:48:45 +08:00
m . clone ( ) . try_inverse ( ) . unwrap_or ( TMat ::< N , D , D > ::zeros ( ) )
2018-09-20 16:50:34 +08:00
}
2018-09-22 19:21:02 +08:00
/// Component-wise multiplication of two matrices.
2018-09-23 20:48:45 +08:00
pub fn matrix_comp_mult < N : Number , R : Dimension , C : Dimension > ( x : & TMat < N , R , C > , y : & TMat < N , R , C > ) -> TMat < N , R , C >
2018-09-20 16:50:34 +08:00
where DefaultAllocator : Alloc < N , R , C > {
x . component_mul ( y )
}
2018-09-22 19:18:59 +08:00
/// Treats the first parameter `c` as a column vector and the second parameter `r` as a row vector and does a linear algebraic matrix multiply `c * r`.
2018-09-23 20:48:45 +08:00
pub fn outer_product < N : Number , R : Dimension , C : Dimension > ( c : & TVec < N , R > , r : & TVec < N , C > ) -> TMat < N , R , C >
2018-09-20 16:50:34 +08:00
where DefaultAllocator : Alloc < N , R , C > {
c * r . transpose ( )
}
2018-09-22 19:18:59 +08:00
/// The transpose of the matrix `m`.
2018-09-23 20:48:45 +08:00
pub fn transpose < N : Scalar , R : Dimension , C : Dimension > ( x : & TMat < N , R , C > ) -> TMat < N , C , R >
2018-09-20 16:50:34 +08:00
where DefaultAllocator : Alloc < N , R , C > {
x . transpose ( )
}