Eigen 入门 VectorXcd MatrixXcd LDL SVD

参考:http://www.cnblogs.com/python27/p/EigenQuickRef.html

另外增加啦以下内容!!!

关于VectorXcd  MatrixXcd的用法甚少 官网也没找到

// EigenTest.cpp : 定义控制台应用程序的入口点。
//

#include

#include

using namespace std;
using namespace Eigen;

int main()
{
    int flag = 0;
    MatrixXd Mat(2,2);//病态矩阵
    VectorXd myVect(2);
    Mat << 1,1,
        1,1.001;
    myVect << 2,2;
    cout<<"Original Matrix:"< //特征值 特征向量
    EigenSolver eig(Mat);
    VectorXcd  eigValue = eig.eigenvalues();//复数特征值向量
    MatrixXcd eigVector = eig.eigenvectors();//复数特征向量矩阵

    cout<<"Eig Values:"<     cout<<"Eig Vector:"<     
    VectorXd eigXV = eigValue.real();
    MatrixXd eigXM = eigVector.real();
//复数向量赋值
    VectorXcd x1;
    MatrixXcd mat1;
    x1.resize(2,1);
    mat1.resize(2,2);
    x1.setZero();
    mat1.setZero();
    mat1.Random(2,2);
    x1[0]._Val[0] = 1;
    x1[1]._Val[0] = 2;
    mat1(0,1)._Val[1] = 999.0;
    cout<<"Complex Vector:"<     cout<<"Complex Vector:"<
    
//改变矩阵一行
    //cout<< "2nd row:"<     //Mat.row(0) = myVect;
    //cout<<"Change Row Matrix:"<
//LDL分解
     LDLT ldlt(Mat);//A = LDL
     LLT llt(Mat);//A = L*L'
     MatrixXd L,D,LL;
     VectorXd dD;
     L = ldlt.matrixL();
     dD = ldlt.vectorD();
     D = dD.asDiagonal();
     LL = llt.matrixL();
     cout<<"Matrix L:"<      cout<<"Matrix D:"<      cout<<"Matrix LL:"<      cout<<"Matrix L*D*L':"<      cout<<"Matrix LL*LL:"<


//SVD分解
    JacobiSVD svd(Mat,ComputeThinU|ComputeThinV);
    MatrixXd U,S,V;
    VectorXd vS;
    U = svd.matrixU();
    V = svd.matrixV();
    cout<<"MatriX U:"<     vS = svd.singularValues();//返回对角线的向量
    S = vS.asDiagonal();
    cout<<"MatriX S:"<     cout<<"MatriX V:"<
    cout<<"Reverse Matrix U*S*V:"<



    cin>>flag;
    return 0;
}

你可能感兴趣的:(Eigen 入门 VectorXcd MatrixXcd LDL SVD)