关闭

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

1314人阅读 评论(0) 收藏 举报
分类:

1、矩阵的SVD分解

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

#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat A = randu<mat>(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");
}

结果
这里写图片描述

2、矩阵的Cholesky分解

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

#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat B = randu<mat>(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");
}

结果
这里写图片描述

3、矩阵的QR分解

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

#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat A = randu<mat>(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");
}

结果
这里写图片描述

4、矩阵的LU分解

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

#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
    //1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
    mat A = randu<mat>(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");
}

结果
这里写图片描述

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:141531次
    • 积分:1744
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:9篇
    • 译文:6篇
    • 评论:24条
    文章分类
    最新评论