在经过前面2篇对 eigen库的基础知识了解之后,下面就可以用eigen库进行一些实际的操作了。

1.计算矩阵行列式的值

在Eigen里你不能混合两种不同类型的矩阵,像这样是错的
v_3d << 3, 2, 1;
Eigen::Matrix<double, 2, 1> result_wrong_type = matrix_23 * v_3d;
你不能用一个整数类型的矩阵和一个浮点数的矩阵直接相乘
应该显式转换
cast 强制类型转换

MatrixXf m1;//整数类型矩阵
MatrixXf m5;//浮点数类型的矩阵
float result1;
m5=m1.cast<float>();//矩阵类型的强制转换
result1=m5.determinant();//求行列式的值
result1=floor(result1+0.5);
result2=int(result1);//转化成整数显示
m_str3.Format(_T("%d"),result2);

determinant()函数只能用于浮点数类型的矩阵,如果矩阵的类型是整数,那么就会报错

2.矩阵的分解

1)三角分解
首先先引入几个概念
a)置换矩阵
当 m≦n时,一个 m×n 的(0,1) 矩阵P为置换矩阵的充要条件是P的每一行恰有一个 1,每一列恰有一个 1。
置换矩阵在数学中的矩阵论里,置换矩阵是一种系数只由0和1组成的方块矩阵。置换矩阵的每一行和每一列都恰好有一个1,其余的系数都是0。在线性代数中,每个n阶的置换矩阵都代表了一个对n个元素(n维空间的基)的置换。当一个矩阵乘上一个置换矩阵时,所得到的是原来矩阵的横行(置换矩阵在左)或纵列(置换矩阵在右)经过置换后得到的矩阵。
以3阶置换矩阵为例,其置换矩阵共有3!=6种

比如

b)置换矩阵的逆是其转置矩阵,

c)eigen官网的实例
This class represents a LU decomposition of any matrix, with complete pivoting: the matrix A is decomposed as A=P(-1) LUQ(-1) where L is unit-lower-triangular, U is upper-triangular, and P and Q are permutation matrices. This is a rank-revealing LU decomposition. The eigenvalues (diagonal coefficients) of U are sorted in such a way that any zeros are at the end.

This decomposition provides the generic approach to solving systems of linear equations, computing the rank, invertibility, inverse, kernel, and determinant.

This LU decomposition is very stable and well tested with large matrices. However there are use cases where the SVD decomposition is inherently more stable and/or flexible. For example, when computing the kernel of a matrix, working with the SVD allows to select the smallest singular values of the matrix, something that the LU decomposition doesn’t see.

The data of the LU decomposition can be directly accessed through the methods matrixLU(), permutationP(), permutationQ().


三角分解的内容是非常丰富的,下面是一些分解方法
i)Doolittle分解
对于非奇异矩阵(任n阶顺序主子式不全为0)的方阵A,都可以进行Doolittle分解,得到A=LU,其中L为单位下三角矩阵,U为上三角矩阵;这里的Doolittle分解实际就是Gauss变换;
(ii)Crout分解
对于非奇异矩阵(任n阶顺序主子式不全为0)的方阵A,都可以进行Crout分解,得到A=LU,其中L为下三角矩阵,U为单位上三角矩阵;
(iii)列主元三角分解
对于非奇异矩阵的方阵A,采用列主元三角分解,得到PA=LU,其中P为一个置换矩阵,L,U与Doolittle分解的规定相同;
(iv)全主元三角分解
对于非奇异矩阵的方阵A,采用全主元三角分解,得到PAQ=LU,其中P,Q为置换矩阵,L,U与Doolittle分解的规定相同;
(v)直接三角分解
对于非奇异矩阵的方阵A,利用直接三角分解推导得到的公式(Doolittle分解公式或者Crout分解公式),可以进行递归操作,以便于计算机编程实现;
(vi)“追赶法”
追赶法是针对带状矩阵(尤其是三对角矩阵)这一大稀疏矩阵的特殊结构,得出的一种保带性分解的公式推导,实质结果也是LU分解;因为大稀疏矩阵在工程领域应用较多,所以这部分内容需要特别掌握。
(vii)Cholesky分解法(平方根法)和改进的平方根法
Cholesky分解法是是针对正定矩阵的分解,其结果是 A=LDLT=LD(1/2)D(1/2)LT=L1L1T。如何得到L1,实际也是给出了递归公式。
改进的平方根法是Cholesky分解的一种改进。为避免公式中开平方,得到的结果是A=LDLT=TLT, 同样给出了求T,L的公式。
非奇异矩阵:若n阶方阵A的行列式不为零,即 |A|≠0,则称A为非奇异矩阵或满秩矩阵,否则称A为奇异矩阵或降秩矩阵。
对比eigen官网列举的例子,其采取的是全主元三角分解。

矩阵库eigen的用法(三)————求行列式值和三角分解求线性方程组的解相关推荐

  1. MATLAB常见矩阵运算函数,矩阵的转置transpose()、求行列式值det()、求矩阵的秩rank()、求矩阵的特征值eig()、求逆矩阵inv()

    MATLAB常见矩阵运算函数 1.转置 如矩阵A 转置后 2.求行列式的值det(A) 使用此函数必须保证A为方阵 3.求矩阵的秩 4.求方阵的特征值 5.求方阵的逆矩阵

  2. 给MTL库添加求行列式值

    在使用MTL库的时候,发现mtl库没有求行列式的值的函数,google了一把,找到下面的网页 How to Find Determinant of nxn matrix? 参考里面的说明,给mtl加上 ...

  3. C++矩阵库 Eigen 快速入门

    Eigen 矩阵定义 #include <Eigen/Dense>Matrix<double, 3, 3> A; // Fixed rows and cols. Same as ...

  4. C++高斯消去法求行列式值

    </pre><p><pre name="code" class="cpp">////Created By Kevin Fen ...

  5. 求π的值C++--递归求阶乘、浮点数精度控制技巧

    [问题描述] 给定一个精度值e,用下列公式计算π的近似值,要求前后两次π的迭代之差的绝对值小于e,给出相应的最小迭代次 数n和最后一次计算的π的值. π/2=1+1!/3+2!/(3×5)+3!/(3 ...

  6. python求最值_python怎么求一个函数的最值?

    我来举个穷举法的例子. # 函数的功能为 x**2 def multi(x): y = x**2 return y # step 为尝试的步进值 def find(func, min_, max_, ...

  7. opencv求矩阵的逆_OpenCV 矩阵操作 加减乘除 求逆 行列式值 | 学步园

    GEMM 通用矩阵乘法 void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, doub ...

  8. Eigen 库常用基本用法 备忘

    ps: eigen 看到的时候较多,自己写的时候总有一些用法想不起来具体函数名,特此总结一下以备忘. 官方doc: eigen 官网最权威 目录 Eigen 矩阵定义 Eigen 基础使用 Eigen ...

  9. C# 矩阵库 功能特别强大!!

    文章目录 一个强大的C# 矩阵库 1. 矩阵库的中主要函数说明 2. 使用方法: 方法1:基于.dll 方法2:不需.dll 3. 使用示例: 一个强大的C# 矩阵库 接下来对一个特别厉害的矩阵库使用 ...

最新文章

  1. 'ScriptModel' object has no attribute 'save'
  2. Python之二叉树的遍历
  3. openstack rocky 安装_北京暖气安装费用-上海装修报价
  4. 基于NEON指令的图像旋转加速【armv7】
  5. Win下执行Swing程序的BAT文件 和 Linux下执行Swing程序的SH文件
  6. PHP独特学习模式_php基础知识
  7. 趣图:当我捕获Bug的时候
  8. java swing 如何设置按钮大小_Java Swing - Button不改变宽度的大小
  9. 如何使用PowerShell在Azure中创建SQL虚拟机
  10. PML调用PDMS内核命令研究
  11. C语言例题——密码校验
  12. Python 3. Python pyqt5 opencv 摄像头软件 相机 软件 有录像保存视频,保存图片,识别人脸位置功能
  13. 我的ROS2开发环境
  14. 使用Webupload上传图片到FastDFS分布式文件系统
  15. IAP之boot实现
  16. “职业丑人”:大公司雇“职业杀手”大裁员
  17. 大内高手—内存管理器
  18. 栈和队列、堆、堆栈的区别?
  19. Python今日编程——判断水仙花数然后求水仙花数
  20. unity获取麦克风音量_深入探究Valve Index的耳机、麦克风设计过程

热门文章

  1. #1.6股市预测数学的基本思路
  2. SupeSite 数据库 用户名不正确
  3. Python项目--外星人入侵--武装飞船
  4. tf.argmax函数说明
  5. 测试android运行电流电压,[原创]安卓手机查看充放电电压、电流及功率
  6. DLL动态链接库的导入导出
  7. [网络克隆]利用tiny proxy实现局域网内批量安装WINDOWS操作系统。
  8. 【论文分享】ARCUS: Symbolic Root Cause Analysis of Exploits in Production Systems
  9. 化学镀废水漂洗水六价铬的深度去除
  10. Flex中label换行