1.创建matrix
MatrixXf M = MatrixXf::Random(4, 62000);
MatrixXd M(4,1000);
创建vector
VectorXd x(Anta_M);
2.可以通过成员函数transpose()、conjugate()和 adjoint()来完成矩阵的转置,共轭矩阵,和共轭转置矩阵,注意这些函数返回操作后的结果,而不会对原矩阵的元素进行直接操作,如果要让原矩阵的进行转换,则需要使用响应的InPlace函数,例如:transposeInPlace() 、adjointInPlace() 之类。
3.求矩阵所有元素和、全部元素相乘、平均值、最小值、最大值、迹
MatrixXd mat;
double sum_m=mat.sum():
double prd_m=mat.prd():
double mean_m=mat.mean():
double min_m=mat.minCoeff():
double max_m=mat.maxCoeff():
double trace_m=mat.trace():
4.将矩阵某一部分赋值
1)分别赋值某行到某行
MatrixXd Vn(4, 2);
for (int i = 0; i < jam_num; i++)
Vn.col(i) = eigen_vectors.col(ind(Anta_M - i - 1));
cout << Vn << endl;
2)使用.block赋值,参数分别为(起始行,起始列,截断矩阵的行数,截断矩阵的列数)
MatrixXd Vnn=eigen_vectors.block(0, 0, 4, 2);
cout << Vnn << endl;
5.获取矩阵最大值的行数、列数
MatrixXd F(90, 180);
ptrdiff_t max_i, max_j;
double maxp_2 = F.maxCoeff(&max_i, &max_j);
6.矩阵分解
MatrixXd Rs = M * M_T / L;//欲分解的协方差矩阵Rs
//cout << Rs.block(0, 0, 4, 2) << endl;
//cout << Rs << endl;
//cout << typeid(Rs).name() << " ";//输出Rs类型
//矩阵分解过程
SelfAdjointEigenSolver<MatrixXd> eigensolver(Rs);
if (eigensolver.info() != Success) abort();
VectorXd eigen_values = eigensolver.eigenvalues();//矩阵特征值
MatrixXd eigen_vectors = eigensolver.eigenvectors();//矩阵特征向量
VectorXd eig_values_sorted;
VectorXi ind;
sort_vec(eigen_values, eig_values_sorted, ind);//将特征值按从小到大排序并返回排序后的特征值分别在原向量内的位置ind