Armadillo C++ linear algebra library 学习笔记(5)——矩阵的分解

1、矩阵的SVD分解

A、通过调用”svd(U,S,V,X)”函数进行矩阵X的奇异值分解(svd)。X = USV’
B、示例

#include 
#include 
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat A = randu(5, 5)*10;
    //2、对矩阵A进行svd分解,USV' = A
    mat U,V;//U,V均为正交矩阵
    colvec S;//S为奇异值构成的列向量
    svd(U,S,V,A);//进行奇异值分解
    A.print("原矩阵A:");
    U.print("正交矩阵U=\n");
    S.print("奇异值列向量S=\n");
    V.print("正交矩阵V=\n");
}

结果
Armadillo C++ linear algebra library 学习笔记(5)——矩阵的分解_第1张图片

2、矩阵的Cholesky分解

A、通过调用”chol(X)”函数进行矩阵X的Cholesky分解。X = R.t()*R
B、示例

#include 
#include 
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat B = randu(5, 5)*10;
    mat A = B.t()*B;//A为对称矩阵
    mat R = chol(A);//对矩阵A进行Cholesky分解,R.t()*R = A,矩阵A必须是对称矩阵;
    A.print("原对称矩阵A:");
    R.print("矩阵ACholesky分解后的R为:\n");
}

结果
Armadillo C++ linear algebra library 学习笔记(5)——矩阵的分解_第2张图片

3、矩阵的QR分解

A、通过调用”qr(Q, R, X)”函数进行矩阵X的QR分解。X = QR
B、示例

#include 
#include 
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat A = randu(5, 5)*10;
    mat Q,R;
    qr(Q,R,A);//QR=A
    A.print("原矩阵A:");
    Q.print("QR分解后的矩阵Q为:\n");
    R.print("QR分解后的矩阵R为:\n");
}

结果
Armadillo C++ linear algebra library 学习笔记(5)——矩阵的分解_第3张图片

4、矩阵的LU分解

A、通过调用”lu(L, U, P, X)”函数进行矩阵X的LU分解。PX = LU
B、示例

#include 
#include 
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat A = randu(5, 5)*10;
    mat P,L,U;
    lu(L,U,P,A);//PA = LU
    A.print("原矩阵A:");
    L.print("LU分解后的矩阵L为:\n");
    U.print("LU分解后的矩阵U为:\n");
    P.print("LU分解后的矩阵P为:\n");
}

结果
Armadillo C++ linear algebra library 学习笔记(5)——矩阵的分解_第4张图片

你可能感兴趣的:(Armadillo)