没有合适的资源?快使用搜索试试~ 我知道了~
Eigen-从官网翻译的教程资料
资源推荐
资源详情
资源评论
目录
一、概览............................................................ 2
二、入门............................................................ 2
2.1 如何安装 Eigen ............................................. 2
2.2 一个简单例子作为第一个程序 ................................. 2
2.3 编译和运行您的第一个程序 ................................... 3
2.4 第一个程序的解释 ........................................... 3
2.5 案例 2:Matrices 和 vectors ................................. 4
2.6 第二个程序的解释 ........................................... 5
2.7 接下来该怎么办? ........................................... 5
三、章节............................................................ 6
3.1 稠密矩阵和数组操作 ......................................... 6
3.1.1 Matrix 类 ............................................. 6
3.1.2 Matrix 和 Vector 算法 ................................. 12
3.1.3 Array 类和元素相关操作 ............................... 19
3.1.4 块操作............................................... 24
3.1.5 片和索引............................................. 28
3.1.6 高级初始化........................................... 32
3.1.7 简约、访问器和传播................................... 36
3.1.8 重塑................................................. 43
3.1.9 STL 迭代器和算法 ..................................... 46
3.1.10 与原始缓冲区的接口:Map 类 ............................ 47
3.1.11 混叠 ................................................ 49
3.1.12 存储顺序 ............................................ 54
3.1.13 对齐问题 ............................................ 56
3.1.14 参考 ................................................ 69
3.2 密集线性问题和分解 ........................................ 69
3.2.1 线性代数与分解....................................... 69
3.2.2 密集分解目录......................................... 76
3.2.3 求解线性最小二乘系统................................. 76
3.2.4 就地矩阵分解......................................... 77
3.2.5 密集分解的基准....................................... 77
3.2.6 参考指南............................................. 78
3.2.7 稀疏线性代数......................................... 78
3.2.8 几何学............................................... 78
四、扩展和定制..................................................... 78
五、一般主题....................................................... 78
六、类列表......................................................... 78
一、概览
这是 Eigen3 的 API 文档。您可以下载 tgz 压缩包用来离线阅读。
对于第一次接触 Eigen,最好的地方是看一下
入门
页面,该页面向您展示了
如何使用 Eigen 编写和编译您的第一个程序。
然后,
快速参考
页面以非常简洁的格式为您提供了对 API 的相当完整的描述,
这对于回忆特定功能的语法或快速查看 API 特别有用。它们目前包含以下两个特
性集,未来还会有更多的特性集:
[快速参考]密集的矩阵和数组操作
[快速参考]稀疏线性代数
你是 MatLab 用户?还有一个简短的 ASCII 参考与 Matlab 翻译。
主要文档
被组织成章节,涵盖不同的特性领域。它们本身由用户手册页面和
参考页面组成,用户手册页面以全面的方式描述了不同的特性,参考页面允许您
通过相关的 Eigen 范数块和类访问 API 文档。
在
扩展/自定义 Eigen
部分中,您将找到关于扩展 Eigen 特性和支持自定义
标量类型的讨论和示例。
在
一般主题
部分,您将找到关于更一般主题的文档,例如预处理器指令、控
制断言、多线程、MKL 支持、一些 Eigen 的内部见解等等……
最后,不要错过搜索引擎,它有助于快速找到给定类或函数的文档。
想要更多吗?检查
不支持的范数块
文档。
二、入门
这是一个关于如何开始使用 Eigen 的简短指南。它有双重目的:对于想要尽
快开始编码的人来说,它是对 Eigen 库的最小介绍;你也可以阅读这个页面作为
教程的第一部分,教程更详细地解释了库,在这种情况下,您将继续 The Matrix
Class。
2.1 如何安装 Eigen
为了使用 Eigen,您只需要下载并提取 Eigen 的源代码(参见 wiki 获取下载
说明)。实际上,Eigen 子目录中的头文件是使用 Eigen 编译程序所需的唯一文
件。所有平台的头文件都是相同的。没有必要使用 CMake 或安装任何东西。
2.2 一个简单例子作为第一个程序
这里有一个相当简单的程序来帮助你开始。
我们将在告诉你如何编译它之后解释这个程序。
2.3 编译和运行您的第一个程序
没有可以链接到的库。在编译上述程序时,您需要记住的唯一一件事是编译
器必须能够找到 Eigen 头文件。放置 Eigen 源代码的目录必须位于包含路径中。
在 GCC 中,你可以使用-I 选项来实现这一点,所以你可以用这样的命令编译程
序:
在 Linux 或 Mac OS X 上,另一种选择是符号链接或复制 Eigen 文件夹到
/usr/local/include/。这样,你就可以用:
当你运行这个程序时,它会产生以下输出:
2.4 第一个程序的解释
Eigen 头文件定义了许多类型,但是对于简单的应用程序,只使用 MatrixXd
类型就足够了。这表示一个任意大小的矩阵(因此在 MatrixXd 中有 X),其中每
个元素都是双精度数(因此在 MatrixXd 中有 d)。请参阅
快速参考
指南,了解可
用于表示矩阵的不同类型的概述。
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
}
g++ -I /path/to/eigen/ my_program.cpp -o my_program
g++ my_program.cpp -o my_program
3 -1
2.5 1.5
Eigen/Dense 头文件定义了 MatrixXd 类型和相关类型的所有成员函数(参见
头文件表
)。在这个头文件(和其他 Eigen 头文件)中定义的所有类和函数都在
Eigen 命名空间中。
main 函数的第一行声明了一个 MatrixXd 类型的变量,并指定它是一个 2 行
2 列的矩阵(元素没有初始化)。语句 m(0,0) = 3 将左上角的元素设置为 3。您需
要使用圆括号来引用矩阵中的元素。通常在计算机科学中,第一个索引是 0,与
数学中第一个索引是 1 的惯例相反。
下面三个语句设置了其他三个元素。最后一行将矩阵 m 输出到标准输出流。
2.5 案例 2:Matrices 和 vectors
这是另一个例子,它结合了矩阵和向量。现在专注于左边的程序;我们稍后
会讨论右边的程序。
运行时设置尺寸 编译时设置尺寸
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
using Eigen::VectorXd;
int main()
{
MatrixXd m = MatrixXd::Random(3,3);
m = (m + MatrixXd::Constant(3,3,1.2)) * 50;
std::cout << "m =" << std::endl << m <<
std::endl;
VectorXd v(3);
v << 1, 2, 3;
std::cout << "m * v =" << std::endl << m * v <<
std::endl;
}
#include <iostream>
#include <Eigen/Dense>
using Eigen::Matrix3d;
using Eigen::Vector3d;
int main()
{
Matrix3d m = Matrix3d::Random();
m = (m + Matrix3d::Constant(1.2)) * 50;
std::cout << "m =" << std::endl << m <<
std::endl;
Vector3d v(1,2,3);
std::cout << "m * v =" << std::endl << m * v <<
std::endl;}
输出结果如下:
m =
94 89.8 43.5
49.4 101 86.8
88.3 29.8 37.8
m * v =
404
512
261
2.6 第二个程序的解释
第二个例子首先声明一个 3 × 3 的矩阵 m,它使用 Random()方法初始化,
随机值在-1 到 1 之间。下一行应用线性映射,使元素值在 10 到 110 之间。函数
调用 MatrixXd::Constant(3,3,1.2)返回一个所有元素都等于 1.2 的 3 × 3 矩
阵表达式。剩下的就是标准算术了。
主函数的下一行引入了一个新类型:VectorXd。这表示任意大小的(列)向量。
在这里,向量 v 被创建为包含 3 个未初始化的元素。倒数第二行使用逗号初始化
器,在
高级初始化
中解释,将向量 v 的所有元素设置为如下所示:
程序的最后一行将矩阵 m 与向量 v 相乘并输出结果。
现在回头看第二个示例程序。我们提出了两个版本。在左边的版本中,矩阵
的类型为 MatrixXd,表示任意大小的矩阵。右边的版本是类似的,除了矩阵的
类型是 Matrix3d,它表示固定大小的矩阵(这里是 3 × 3)。因为类型已经编码
了矩阵的大小,所以没有必要在构造函数中指定大小;比较 MatrixXd m(3,3)和
Matrix3d m 的写法。类似地,我们左边有 VectorXd(任意大小),右边有
Vector3d(固定大小)。注意,这里向量 v 的元素是直接在构造函数中设置的,不
过也可以使用与左例相同的语法。
使用固定大小的矩阵和向量有两个优点。编译器生成更好(更快)的代码,因
为它知道矩阵和向量的大小。在矩阵中指定大小还允许在编译时进行更严格的检
查。例如,如果您尝试将 Matrix4d (4 × 4 矩阵)与 Vector3d(大小为 3 的向量)
相乘,编译器将会报错。然而,使用的矩阵太大会增加编译时间和可执行文件的
大小。在编译时也可能不知道矩阵的大小。经验法则是对于 4 × 4 或更小的矩
阵使用固定的大小。
2.7 接下来该怎么办?
这篇长篇
教程
值得花时间阅读。
然而,如果你认为你不需要它,你可以直接使用类文档和我们的快速参考指
南。
1
V= 2
3
剩余77页未读,继续阅读
资源评论
千秋10000
- 粉丝: 279
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功