Eigen提供了解线性方程的计算方法,包括LU分解法,QR分解法,SVD(奇异值分解)、特征值分解等。对于一般形式如下的线性系统:

        

  解决上述方程的方式一般是将矩阵A进行分解,当然最基本的方法是高斯消元法。

  先来看Eigen 官方的第一个例程:

 #include <iostream>
#include <Eigen/Dense> using namespace std;
using namespace Eigen; int main()
{
Matrix3f A;
Vector3f b;
A << ,,, ,,, ,,;
b << ,,;
cout<<"Here is the Matrix A:\n"<< A <<endl;
cout<<" Here is the vector b:\n"<< b <<endl;
Vector3f x = A.colPivHouseholderQr().solve(b);
cout<<"The solution is:\n"<<x<<endl;
return ;
}

运行结果如下:

Eigen内置的解线性方程组的算法如下表所示:

使用这些接口也可以解决矩阵相乘的问题:

 #include <iostream>
#include <Eigen/Dense> using namespace std;
using namespace Eigen; int main()
{
Matrix2f A,b;
A << ,-,-,;
b << ,,,;
cout<<"Here is the matrix A:\n"<<A<<endl;
cout<<"Here is the right hand side b:\n"<<b<<endl;
Matrix2f x = A.ldlt().solve(b);
cout<<"The solution is:\n"<<x<<endl;
return ;
}

运行结果如下:

Eigen也提供了计算特征值和特征向量的算法:

下面是一个简单的例子:

 #include <iostream>
#include <Eigen/Dense> using namespace std;
using namespace Eigen; int main()
{
Matrix2f A;
A << ,,,;
cout<<"Here is the matrix A:\n"<<A<<endl;
SelfAdjointEigenSolver<Matrix2f> eigensolver(A);
if( eigensolver.info() != Success ) abort();
cout<<" The eigenvalues of A are:\n"<<eigensolver.eigenvalues()<<endl;
cout<<" Here is a matrix whose columns are eigenvectors of A\n"
<<" corresponding to these eigenvalues:\n"
<<eigensolver.eigenvectors()<<endl;
return ;
}

运行结果如下:

Eigen 也提供了求逆矩阵和求矩阵行列式的算法,但是这两种算法对于大型矩阵来说都是非常不经济的算法,当需要对大型矩阵做这种的操作时,需要自己判断到底需不需这样做。但是对于小型矩阵 则可以没有顾虑地使用。

下面是一个例子:

 #include <iostream>
#include <Eigen/Dense> using namespace std;
using namespace Eigen; int main()
{
Matrix3f A;
A << ,,,
,,,
-,,; cout<<"Here is the matrix A:\n"<<A<<endl;
cout<<"The determinant of A is "<<A.determinant()<<endl;
cout<<"The inverse of A is:\n"<<A.inverse()<<endl;
return ;
}

运行结果如下:

Eigen也提供了解最小二乘问题的解法,并给出两种实现,分别是BDCSVD和JacobiSVD,其中推荐使用的一种是BDCSVD。下面是一个例子:

 #include <iostream>
#include <Eigen/Dense> using namespace std;
using namespace Eigen; int main()
{
MatrixXf A = MatrixXf::Random(,);
cout<<"Here is the matrix A:\n"<<A<<endl;
VectorXf b = VectorXf::Random();
cout<<"Here is the right hand side b:\n"<<b<<endl;
cout<<"The least-squares solution is:\n"
<<A.bdcSvd(ComputeThinU|ComputeThinV).solve(b)<<endl;
return ;
}

运行结果如下:

Eigen学习之简单线性方程与矩阵分解的更多相关文章

  1. 简单的基于矩阵分解的推荐算法-PMF, NMF

    介绍: 推荐系统中最为主流与经典的技术之一是协同过滤技术(Collaborative Filtering),它是基于这样的假设:用户如果在过去对某些项目产生过兴趣,那么将来他很可能依然对其保持热忱.其 ...

  2. 用Spark学习矩阵分解推荐算法

    在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法. 1. Spark推荐算法概述 在Spark MLlib ...

  3. OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)

    PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...

  4. HAWQ + MADlib 玩转数据挖掘之(四)——低秩矩阵分解实现推荐算法

    一.潜在因子(Latent Factor)推荐算法 本算法整理自知乎上的回答@nick lee.应用领域:"网易云音乐歌单个性化推荐"."豆瓣电台音乐推荐"等. ...

  5. FAST MONTE CARLO ALGORITHMS FOR MATRICES II (快速的矩阵分解策略)

    目录 问题 算法 LINEARTIMESVD 算法 CONSTANTTIMESVD 算法 理论 算法1的理论 算法2 的理论 代码 Drineas P, Kannan R, Mahoney M W, ...

  6. ML.NET 示例:推荐之One Class 矩阵分解

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  7. 矩阵分解----Cholesky分解

    矩阵分解是将矩阵拆解成多个矩阵的乘积,常见的分解方法有 三角分解法.QR分解法.奇异值分解法.三角分解法是将原方阵分解成一个上三角矩阵和一个下三角矩阵,这种分解方法叫做LU分解法.进一步,如果待分解的 ...

  8. RS:关于协同过滤,矩阵分解,LFM隐语义模型三者的区别

    项亮老师在其所著的<推荐系统实战>中写道: 第2章 利用用户行为数据 2.2.2 用户活跃度和物品流行度的关系 [仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法.学术界对协同过滤算 ...

  9. 【RS】List-wise learning to rank with matrix factorization for collaborative filtering - 结合列表启发排序和矩阵分解的协同过滤

    [论文标题]List-wise learning to rank with matrix factorization for collaborative filtering   (RecSys '10 ...

随机推荐

  1. 冒泡排序——Bubble Sort

    基本思想:两个数比较大小,较大的数下沉,较小的数冒起来. 过程: 1.比较相邻的两个数据,如果第二个数小,就交换位置. 2.从后向前两两比较,一直到比较最前两个数据.最终最小数被交换到起始的位置,这样 ...

  2. C#中null值属于什么变量类型

    今天学习发现有段代码的输出结果有些理解不了,如图1,输出的结果全部为 false: 图1 后来和同事讨论研究了一下才明白,原来是这样:↓ class Program { static void Mai ...

  3. Hadoop/Spark生态圈里的新气象

    令人惊讶的是,Hadoop在短短一年的时间里被重新定义.让我们看看这个火爆生态圈的所有主要部分,以及它们各自具有的意义. 对于Hadoop你需要了解的最重要的事情就是 ,它不再是原来的Hadoop. ...

  4. Rails中的增删改查

      1.        rails中类与对象与SQL中表与行的关系 rails中提供了对象关系映射(ORM),将模型类映射至表,模型类的关联表名是类名小写后的复数形式,如类名Order,对应的表名为o ...

  5. 【Xmail】使用Xmail搭建局域网邮件服务器

    下载地址:  http://www.xmailserver.org/xmail-1.27.win32bin.zip,当前最新版本  1.27. 解压文件:xmail-1.27.win32bin.zip ...

  6. 生产环境部署node记录(一)

    云服务器厂商:京东云 我选择的操作系统为公共镜像CentOS7.2. 步骤: 首先登陆服务器:使用ssh 用户名@IP地址  登陆 1. wget命令下载Node.js安装包 登陆node的官网复制下 ...

  7. C#语法之扩展

    扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.这是msdn的描述.上面几句 ...

  8. Firebird 备份与恢复

    备份test gbak -b test d:\test.bak -user sysdba 恢复为test1 gbak -c d:\test.bak test1

  9. [javaSE] 变量的传值与传址

    变量:就是将不确定的数据进行存储.也就是需要在内存中开辟一个空间 这个空间需要一个名称,这个名称就是变量名 基本数据类型:byte,short,int,long,double,float,char,b ...

  10. JDBC程序优化--提取配置信息放到属性文件中

    JDBC程序优化--提取配置信息放到属性文件中 此处仅仅优化JDBC连接部分,代码如下: public class ConnectionFactory { private static String ...