1、矩阵的四则运算
A、通过”+”、“-”、”*”、”/”、”%”分别进行矩阵的加、减、乘、点除、点乘运算。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、构造矩阵A、B
mat A(2,2),B(2,2);
for (int i = 0; i < 4; i++)
{
A(i)=i+1;//i:以列为排列顺序,矩阵的第i个元素
B(i)=i+5;
}
A.print("矩阵A为:");
B.print("矩阵B为:");
//2、矩阵A与矩阵B相加
mat AAddB = A + B;
AAddB.print("A + B =");
//3、矩阵A与矩阵B相减
mat AMinusB = A - B;
AMinusB.print("A - B =");
//4、矩阵A与矩阵B相乘
mat AMulB = A * B;
AMulB.print("A * B =");
//5、矩阵A与矩阵B点除
mat ADiviB = A / B;
ADiviB.print("A / B =");
//6、矩阵A与矩阵B点乘
mat ADotMulB = A % B;
ADotMulB.print("A % B =");
}
C、结果
2、矩阵的逆与伪逆
A、通过”inv(A)”、“pinv(A)”分别求矩阵A的逆与伪逆矩阵。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
mat A = randu<mat>(5, 5)*10;
mat A_inv = inv(A);//当A为方阵时,用inv()
mat A_pinv = pinv(A);//当A不为方阵时,用pinv()
mat AMulA_inv = A * A_inv;//验证结果
A.print("原矩阵A:");
A_inv.print("矩阵A的逆矩阵为:");
AMulA_inv.print("A * A^-1为:");
A_pinv.print("矩阵A的伪逆矩阵为:");
}
C、结果
3、解线性方程组
A、通过”solve(A,B)”来解线性方程组:AX=B。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、产生随机矩阵A,大小为5x5,每个数的范围为:(0,10)
mat A = randu<mat>(5, 5)*10;
//2、获取矩阵的第2列
colvec B = A.col(1);
//3、解线性方程组AX=B
mat X = solve(A,B);
X.print("X = ");
}
C、结果