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

原创 2015年07月09日 22:33:03

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");
}

结果
这里写图片描述

相关文章推荐

armadillo库之对称矩阵的特征值与特征向量

#  上面的测试用例能正常运行

Armadillo (C++ library)

Latest Files armadillo-4.419.alpha1.tar.gz (日期: 2014-09-03, 大小: 5.2 MB)armadillo-4.400.1.tar.gz (...

Armadillo C++ linear algebra library 学习笔记(7)——统计相关函数

1、求矩阵行、列的最大值A、通过调用”max(A, dim)”函数求矩阵A的行(dim=1)、列(dim=0)最大值。 B、示例#include #include using namespace...
  • jnulzl
  • jnulzl
  • 2015年07月17日 17:12
  • 1663

Armadillo C++ linear algebra library 学习笔记(6)——生成矩阵

1、主对角线为1的矩阵A、通过调用”eye(rows, cols)”函数生成主对角线为1的矩阵。 B、示例#include #include using namespace arma; int...
  • jnulzl
  • jnulzl
  • 2015年07月17日 16:40
  • 1942

Armadillo C++ linear algebra library 学习笔记(4)——矩阵的运算

1、矩阵的四则运算A、通过”+”、“-”、”*”、”/”、”%”分别进行矩阵的加、减、乘、点除、点乘运算。 B、示例 //1、构造矩阵A、B mat A(2,2),B(2,2); ...
  • jnulzl
  • jnulzl
  • 2015年07月09日 19:09
  • 2327

Visual Studio使用Armadillo线性代数运算库

在Visual Studio中可以添加Armadillo线性代数库,进行一些矩阵运算,本文在Visual Studio 2015中添加Armadillo进行一系列测试,其中有几个调试要点 请...

Armadillo C++ linear algebra library 学习笔记(1)——简介与安装

1、Armadillo C++ 简介 Armadillo C++ Library是一种C++的线性代数库(矩阵数学)以取得良好的平衡速度与易用性。整数,浮点,而复杂的数字支持,以及一个子集,三角和统...
  • jnulzl
  • jnulzl
  • 2015年07月08日 20:58
  • 3231

C++中armadillo矩阵库使用说明

在http://blog.csdn.net/piaoxuezhong/article/details/58055709博文中介绍了eigen矩阵库的使用,这里介绍另一种矩阵库:armadillo~ ...

Armadillo C++ linear algebra library 学习笔记(2)——矩阵的基本操作(1)

1、获取矩阵的某个元素A、通过nameMat(i,j)获取矩阵nameMat的第(i,j)个元素。 B、示例#include #include using namespace arma; int...
  • jnulzl
  • jnulzl
  • 2015年07月08日 21:20
  • 3088

C++连续输入带空格的字符串

测试文件 测试1#include #include #include using namespace std;int main() { freopen("in.txt","r",std...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Armadillo C++ linear algebra library 学习笔记(5)——矩阵的分解
举报原因:
原因补充:

(最多只允许输入30个字)