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

时间:2023-02-13 21:35:25

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

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

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

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

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

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

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 C++ linear algebra library 学习笔记(5)——矩阵的分解