Armadillo之求矩阵的逆(inverse)

求一个矩阵的逆(inverse or multiplicative inverse)使用矩阵的.i()方法或用inv()函数

m.i() //返回m的逆

1 若m不是方正的(square),则函数抛出std::logic_error异常。

2 如果m是奇异的(singular),则输出的矩阵将被重置,且抛出std::runtime_error异常

inv(m)   //返回m的逆
inv(A,m) //A被设为m的逆

1 若m不是方正的(square),则函数抛出std::logic_error异常。

2 如果m是奇异的(singular),则输出的矩阵将被重置,且抛出std::runtime_error异常,同时inv(A,m)返回值将是false

代码:

 mat m = "2,4;3,1;";
 mat m1 = m.i();
 m1.print();
 cout << "-----" << endl;
 mat m2 = inv(m);
 m2.print();
 cout << "-----" << endl;
 mat A;
 inv(A, m);
 A.print();

输出:

如果矩阵m已经知道是对称的(symmetric),方阵的(square),正数的(positive),有限的(definite)则求m的逆使用inv_sympd函数将大大加快运算速度:

A=inv_sympd(m)
inv_sympd(A,m)

以上两种方法运行后A都是m的逆。

1 使用这个函数要启用LAPACK

2 若m不是方正的(square),则函数抛出std::logic_error异常。

3 现在inv_sympd不检查矩阵m是否是对称,方阵,正数,有限的。

4 如果m是奇异的(singular),则输出的矩阵将被重置,且抛出std::runtime_error异常,同时inv_sympd(A,m)返回值将是false

Armadillo之求矩阵的逆(inverse)

时间: 2024-10-29 14:19:19

Armadillo之求矩阵的逆(inverse)的相关文章

论如何求矩阵的逆?先看看基础芝士!

这是关于矩阵的一个bugblog (如果觉得格式看不下去请移步:洛咕) 矩阵求逆是个有趣(但暂且不知道有什么神奇运用)的东西, 不过矩阵这玩意儿貌似和线性代数以及向量之类的东西相关,所以学了绝对不亏 xiao 另外,本篇blog 并不一定毫无错误,甚至可能会有些理解上的小偏差,所以请各位观看的神仙及时指出好让作者修改精进,谢谢. 还有矩阵求逆的两种方法将会放在最后讲解 想要学会矩阵求逆的话,首先你得了解几个关于矩阵的概念以及名称的含义 (当然如果你知道这些概念的话可以直接往下跳) 基本概念 1.

【BZOJ3168】[Heoi2013]钙铁锌硒维生素 高斯消元求矩阵的逆+匈牙利算法

[BZOJ3168][Heoi2013]钙铁锌硒维生素 Description 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加宇宙比赛的饮食.众所周知,前往宇宙的某个星球,通常要花费好长好长的时间,人体情况在这之间会发生变化,因此,需要根据每天的情况搭配伙食,来保证营养.小林把人体需要的营养分成了n种,这些营养包括但不限于铁,钙.他准备了2套厨师机器人,一套厨师机器人有n个,每个厨师机器人只会做一道菜,这道菜一斤能提供第i种营养xi微克.想要吃这道菜的时候,只要输入一个数,就

高斯消元求矩阵的逆

以前的博客:高斯消元,线性基,行列式. 考虑将\(A\)消成单位矩阵,同时对单位矩阵\(I\)做同样的操作,这样\(A\)变成\(I\),而\(I\)变成\(A^{-1}\). 用高斯消元即可. 若一列中全是0,说明该矩阵是奇异矩阵. 原文地址:https://www.cnblogs.com/utopia999/p/9763445.html

矩阵的逆 C 语言 算法一

矩阵的逆 C 语言 算法一 一.求解步骤 1.矩阵必须是方阵(即矩阵的行列相等). 2.矩阵可逆的充分必要条件是其行列式的值不为零. 3.求出矩阵的伴随矩阵. 4.逆矩阵=行列式值的倒数*伴随矩阵. 二.算法 #include <stdio.h> #include <stdlib.h> void main() { int i,j; int dimension; double deterValue=1; double **array,**deterArray, **companion

《Linear Algebra and Its Applications》-矩阵的逆

矩阵的逆: 逆矩阵的定义: 类比于我们在研究实数的时候回去讨论一个数的倒数,对应的,在矩阵运算中,当AB = I的时候,A,B互称为逆矩阵,这里的I类似实数中的1,表示单位矩阵,即对角线是1其余位置是0的n x n的矩阵. 逆矩阵的唯一性: 逆矩阵是像实数的倒数一样唯一存在的么?我们不妨简单地证明一下.假设A的两个逆矩阵是B,C.根据定义我们有AB=I,AC=I,结合基本的矩阵运算法则,容易看到B=C=IA^-1,由此能够看到逆矩阵是唯一存在的. 如何求解逆矩阵: 如何求解逆矩阵这个问题其实能够

(数学概念)矩阵的逆、伪逆、左右逆,最小二乘,投影矩阵

主要内容: 矩阵的逆.伪逆.左右逆 矩阵的左逆与最小二乘 左右逆与投影矩阵 一.矩阵的逆.伪逆.左右逆 1.矩阵的逆 定义: 设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=I. 则我们称B是A的逆矩阵,而A则被称为可逆矩阵. 可逆条件: A是可逆矩阵的充分必要条件是,即可逆矩阵就是非奇异矩阵.(当 时,A称为奇异矩阵) 性质: 矩阵A可逆的充要条件是A的行列式不等于0. 可逆矩阵一定是方阵. 如果矩阵A是可逆的,A的逆矩阵是唯一的. 可逆矩阵也被称为非奇异矩

Armadillo之计算矩阵的行列式(determinant)

计算矩阵的行列式很简单,用det方法或是log_det方法 1 det(A) 如果A不是方阵的(square),将抛出std::logic_error异常 例: mat m = "3,2,4;1,-2,3;2,3,2;"; double d = det(m); cout << d << endl; 运行结果是-3 2 log_det(value, sign,A) 文档里推荐当矩阵A比较大时,使用本函数来代替det函数(估计会加快计算速度) det(A)=exp(

数组-09. 求矩阵的局部极大值

数组-09. 求矩阵的局部极大值(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值.本题要求给定矩阵的全部局部极大值及其所在的位置. 输入格式: 输入在第1行中给出矩阵A的行数M和列数N(3<=M,N<=20):最后M行,每行给出A在该行的N个元素的值.数字间以空格分隔.

hdu 4888 最大流给出行列和求矩阵

第一步,考虑如何求是否有解.使用网络流求解,每一行和每一列分别对应一个点,加上源点和汇点一共有N+M+2个点.有三类边: 1. 源点 -> 每一行对应的点,流量限制为该行的和 2. 每一行对应的点 -> 每一列对应的点,流量限制为 K 3. 每一列对应的点 -> 汇点,流量限制为该列的和 对上图做最大流,若源点出发的边和到达汇点的边全都满流,则有解,否则无解.若要求构造方案,则 (i,j) 对应的整数就是行 i–> 列 j 的流量. 第二步,考虑解是否唯一.显然,解唯一的充分必要条