Eigen学习之简单线性方程与矩阵分解
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学习之简单线性方程与矩阵分解的更多相关文章
- 简单的基于矩阵分解的推荐算法-PMF, NMF
介绍: 推荐系统中最为主流与经典的技术之一是协同过滤技术(Collaborative Filtering),它是基于这样的假设:用户如果在过去对某些项目产生过兴趣,那么将来他很可能依然对其保持热忱.其 ...
- 用Spark学习矩阵分解推荐算法
在矩阵分解在协同过滤推荐算法中的应用中,我们对矩阵分解在推荐算法中的应用原理做了总结,这里我们就从实践的角度来用Spark学习矩阵分解推荐算法. 1. Spark推荐算法概述 在Spark MLlib ...
- OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...
- HAWQ + MADlib 玩转数据挖掘之(四)——低秩矩阵分解实现推荐算法
一.潜在因子(Latent Factor)推荐算法 本算法整理自知乎上的回答@nick lee.应用领域:"网易云音乐歌单个性化推荐"."豆瓣电台音乐推荐"等. ...
- FAST MONTE CARLO ALGORITHMS FOR MATRICES II (快速的矩阵分解策略)
目录 问题 算法 LINEARTIMESVD 算法 CONSTANTTIMESVD 算法 理论 算法1的理论 算法2 的理论 代码 Drineas P, Kannan R, Mahoney M W, ...
- ML.NET 示例:推荐之One Class 矩阵分解
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- 矩阵分解----Cholesky分解
矩阵分解是将矩阵拆解成多个矩阵的乘积,常见的分解方法有 三角分解法.QR分解法.奇异值分解法.三角分解法是将原方阵分解成一个上三角矩阵和一个下三角矩阵,这种分解方法叫做LU分解法.进一步,如果待分解的 ...
- RS:关于协同过滤,矩阵分解,LFM隐语义模型三者的区别
项亮老师在其所著的<推荐系统实战>中写道: 第2章 利用用户行为数据 2.2.2 用户活跃度和物品流行度的关系 [仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法.学术界对协同过滤算 ...
- 【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 ...
随机推荐
- org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.
当我用Springboot和mybatis进行延迟加载时候报出如下的错误: org.apache.ibatis.executor.loader.javassist.JavassistProxyFact ...
- static变量生命周期小研究
A页面:定义一个普通类,类包含一个静态变量a,值为:111111111111111111 B页面:修改a的值为:22222222222222 C页面:用来查看a的值 1.在vs2008中,先打开B,再 ...
- Scope及其子类介绍
之前写的文章: 关于作用域范围Scope Scope及相关的子类如下: 同时有些Scope还继承了Scope.ScopeListener类,如下: 1.StarImportScope及ImportSc ...
- Redis笔记(六):Java中使用Redis
Java程序使用Redis 添加依赖包 Maven依赖方式 <dependency> <groupId>redis.clients</groupId> <ar ...
- centos6.5 + 7 静态ip配置
2017/09/19日更, centos6.5 可用 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static D ...
- Shiro的Filter机制详解---源码分析
Shiro的Filter机制详解 首先从spring-shiro.xml的filter配置说起,先回答两个问题: 1, 为什么相同url规则,后面定义的会覆盖前面定义的(执行的时候只执行最后一个). ...
- 从入门到不放弃系列之Koa2
一.Koa2入门 本来是想Express入门的,但是既然都是要学,干嘛不学最新的呢? 其实我想说,我本来只是想学个小程序开发,现在已经陆陆续续开了好多坑了.. 本文参考廖雪峰教程 二.Async 最新 ...
- 我理解的js中预解释
浏览器在执行代码前,先找带var和带function的地方,把带var的声明且赋予初始值undefined,把带function的声明且定义. 带var关键字预解释 让我们先看下这段代码执行的结果: ...
- Ajax中的同步和异步
var flag=true; ; $.ajax({ url: "http://www.jb51.net/", success: function(data){ flag=false ...
- jade——创建第一个jade模板
什么是jade? jade是node.js的一个模板引擎,参考了haml的语法,是简写的html语言. 使用单个标签代替双标签,类似于Python,通过缩进来确定从属关系,没有结束符号,非常简洁,使用 ...