矩阵和向量的特征

下面几种方法可用于获取矩阵的主要特征:

  • Rows, Cols:矩阵中的行数和列数。
  • Norm:预定义矩阵范数之一 (ENUM_MATRIX_NORM)
  • Cond:矩阵的条件数
  • Det:方形非退化矩阵的行列式
  • SLogDet:计算矩阵行列式的符号和算法
  • Rank:矩阵的秩
  • Trace:矩阵对角线的元素总和(迹)
  • Spectrum:矩阵谱(作为其本征值的集合)

此外,为向量定义了以下特征:

  • Size:向量的长度
  • Norm:预定义向量范数之一 (ENUM_VECTOR_NORM)

对象大小(以及其中元素的索引)使用 ulong 类型的值。

ulong matrix<T>::Rows()

ulong matrix<T>::Cols()

ulong vector<T>::Size()

大部分其它特征为实数。

double vector<T>::Norm(const ENUM_VECTOR_NORM norm, const int norm_p = 2)

double matrix<T>::Norm(const ENUM_MATRIX_NORM norm)

double matrix<T>::Cond(const ENUM_MATRIX_NORM norm)

double matrix<T>::Det()

double matrix<T>::SLogDet(int &sign)

double matrix<T>::Trace()

秩和谱分别为整数和向量。

int matrix<T>::Rank()

vector matrix<T>::Spectrum()

矩阵秩计算示例:

matrix a = matrix::Eye(44);
Print("matrix a (eye)\n"a);
Print("a.Rank()="a.Rank());
   
a[33] = 0;
Print("matrix a (defective eye)\n"a);
Print("a.Rank()="a.Rank());
   
matrix b = matrix::Ones(14);
Print("b \n"b);
Print("b.Rank()="b.Rank());
   
matrix zeros = matrix::Zeros(41);
Print("zeros \n"zeros);
Print("zeros.Rank()="zeros.Rank());

下面是脚本执行结果:

matrix a (eye)
[[1,0,0,0]
 [0,1,0,0]
 [0,0,1,0]
 [0,0,0,1]]
a.Rank()=4
  
matrix a (defective eye)
[[1,0,0,0]
 [0,1,0,0]
 [0,0,1,0]
 [0,0,0,0]]
a.Rank()=3
  
b
[[1,1,1,1]]
b.Rank()=1
   
zeros
[[0]
 [0]
 [0]
 [0]]
zeros.Rank()=0