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

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
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值