文章目录

  • [Eigen Matlab使用小结](https://www.cnblogs.com/rainbow70626/p/8819119.html)
    • Eigen初始化
    • 0.[官网资料](http://eigen.tuxfamily.org/index.php?title=Main_Page)
    • 1. Eigen Matlab矩阵定义
    • 2. Eigen Matlab基础使用
    • 3. Eigen Matlab特殊矩阵生成
    • 4. Eigen Matlab矩阵分块
    • 5. Eigen Matlab矩阵元素交换
    • 6. Eigen Matlab矩阵转置
    • 7. Eigen Matlab矩阵乘积
    • 8.Eigen Matlab矩阵单个元素操作
    • 9. Eigen Matlab矩阵化简
    • 10. Eigen Matlab矩阵点乘
    • 11. Eigen Matlab矩阵类型转换
    • 12. Eigen Matlab求解线性方程组 Ax = b
    • 13. Eigen Matlab矩阵特征值

Eigen Matlab使用小结

Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,然后包含头文件就能使用,非常方便。此外,Eigen的接口清晰,稳定高效。 Eigen 的 API 接口与 Matlab对应的接口见原文。

Eigen初始化

0.官网资料

Eigen is versatile
它支持所有矩阵大小,从小的固定大小矩阵到任意大的密集矩阵,甚至是稀疏矩阵。
它支持所有标准数字类型,包括std :: complex,整数,并且可以轻松扩展为自定义数字类型。
它支持各种矩阵分解和几何特征。
它的不受支持模块的生态系统提供了许多专门功能,例如非线性优化,矩阵函数,多项式求解器,FFT等。
Eigen is fast
表达式模板允许在适当的情况下智能地删除临时文件并启用惰性计算。
明确的矢量为SSE 2/3/4,AVX,AVX2,FMA,AVX512,ARM NEON(32位和64位),的PowerPC的AltiVec / VSX(32位和64位),ZVector(s390x /执行zEC13)SIMD指令集,以及自3.4 MIPS以来的MSA,可平滑回退到非矢量化代码。
固定大小的矩阵已完全优化:避免了动态内存分配,并且在有意义的情况下展开了循环。
对于大型矩阵,要特别注意缓存的友好性。
Eigen is reliable
为确保可靠性,精心选择了算法。可靠性折衷已得到明确记录,并且可以进行非常 安全的 分解。
Eigen已通过其自己的测试套件(超过500个可执行文件),标准的BLAS测试套件以及LAPACK测试套件的一部分进行了全面测试。
Eigen is elegant
由于表达式模板,C ++程序员感觉自然而然,该API非常干净和可表达。
在Eigen之上实现算法感觉就像在复制伪代码。
由于我们针对许多编译器运行测试套件,因此Eigen具有良好的编译器支持,以确保可靠性并解决所有编译器错误。Eigen还是标准的C ++ 98,并保持非常合理的编译时间。
文献资料
Eigen 3文档:包括入门指南,详尽的教程,快速参考,以及有关从Eigen 2移植到Eigen 3的页面。

1. Eigen Matlab矩阵定义

#include <Eigen/Dense>Matrix<double, 3, 3> A;               // Fixed rows and cols. Same as Matrix3d.
Matrix<double, 3, Dynamic> B;         // Fixed rows, dynamic cols.
Matrix<double, Dynamic, Dynamic> C;   // Full dynamic. Same as MatrixXd.
Matrix<double, 3, 3, RowMajor> E;     // Row major; default is column-major.
Matrix3f P, Q, R;                     // 3x3 float matrix.
Vector3f x, y, z;                     // 3x1 float matrix.
RowVector3f a, b, c;                  // 1x3 float matrix.
VectorXd v;                           // Dynamic column vector of doubles// Eigen          // Matlab           // comments
x.size()          // length(x)        // vector size
C.rows()          // size(C,1)        // number of rows
C.cols()          // size(C,2)        // number of columns
x(i)              // x(i+1)           // Matlab is 1-based
C(i,j)            // C(i+1,j+1)       //

2. Eigen Matlab基础使用

// Basic usage
// Eigen        // Matlab           // comments
x.size()        // length(x)        // vector size
C.rows()        // size(C,1)        // number of rows
C.cols()        // size(C,2)        // number of columns
x(i)            // x(i+1)           // Matlab is 1-based
C(i, j)         // C(i+1,j+1)       //A.resize(4, 4);   // Runtime error if assertions are on.
B.resize(4, 9);   // Runtime error if assertions are on.
A.resize(3, 3);   // Ok; size didn't change.
B.resize(3, 9);   // Ok; only dynamic cols changed.A << 1, 2, 3,     // Initialize A. The elements can also be4, 5, 6,     // matrices, which are stacked along cols7, 8, 9;     // and then the rows are stacked.
B << A, A, A;     // B is three horizontally stacked A's.
A.fill(10);       // Fill A with all 10's.

3. Eigen Matlab特殊矩阵生成

// Eigen                            // Matlab
MatrixXd::Identity(rows,cols)       // eye(rows,cols)
C.setIdentity(rows,cols)            // C = eye(rows,cols)
MatrixXd::Zero(rows,cols)           // zeros(rows,cols)
C.setZero(rows,cols)                // C = ones(rows,cols)
MatrixXd::Ones(rows,cols)           // ones(rows,cols)
C.setOnes(rows,cols)                // C = ones(rows,cols)
MatrixXd::Random(rows,cols)         // rand(rows,cols)*2-1        // MatrixXd::Random returns uniform random numbers in (-1, 1).
C.setRandom(rows,cols)              // C = rand(rows,cols)*2-1
VectorXd::LinSpaced(size,low,high)  // linspace(low,high,size)'
v.setLinSpaced(size,low,high)       // v = linspace(low,high,size)'

4. Eigen Matlab矩阵分块

// Matrix slicing and blocks. All expressions listed here are read/write.
// Templated size versions are faster. Note that Matlab is 1-based (a size N
// vector is x(1)...x(N)).
// Eigen                           // Matlab
x.head(n)                          // x(1:n)
x.head<n>()                        // x(1:n)
x.tail(n)                          // x(end - n + 1: end)
x.tail<n>()                        // x(end - n + 1: end)
x.segment(i, n)                    // x(i+1 : i+n)
x.segment<n>(i)                    // x(i+1 : i+n)
P.block(i, j, rows, cols)          // P(i+1 : i+rows, j+1 : j+cols)
P.block<rows, cols>(i, j)          // P(i+1 : i+rows, j+1 : j+cols)
P.row(i)                           // P(i+1, :)
P.col(j)                           // P(:, j+1)
P.leftCols<cols>()                 // P(:, 1:cols)
P.leftCols(cols)                   // P(:, 1:cols)
P.middleCols<cols>(j)              // P(:, j+1:j+cols)
P.middleCols(j, cols)              // P(:, j+1:j+cols)
P.rightCols<cols>()                // P(:, end-cols+1:end)
P.rightCols(cols)                  // P(:, end-cols+1:end)
P.topRows<rows>()                  // P(1:rows, :)
P.topRows(rows)                    // P(1:rows, :)
P.middleRows<rows>(i)              // P(i+1:i+rows, :)
P.middleRows(i, rows)              // P(i+1:i+rows, :)
P.bottomRows<rows>()               // P(end-rows+1:end, :)
P.bottomRows(rows)                 // P(end-rows+1:end, :)
P.topLeftCorner(rows, cols)        // P(1:rows, 1:cols)
P.topRightCorner(rows, cols)       // P(1:rows, end-cols+1:end)
P.bottomLeftCorner(rows, cols)     // P(end-rows+1:end, 1:cols)
P.bottomRightCorner(rows, cols)    // P(end-rows+1:end, end-cols+1:end)
P.topLeftCorner<rows,cols>()       // P(1:rows, 1:cols)
P.topRightCorner<rows,cols>()      // P(1:rows, end-cols+1:end)
P.bottomLeftCorner<rows,cols>()    // P(end-rows+1:end, 1:cols)
P.bottomRightCorner<rows,cols>()   // P(end-rows+1:end, end-cols+1:end)

5. Eigen Matlab矩阵元素交换

// Of particular note is Eigen's swap function which is highly optimized.
// Eigen                           // Matlab
R.row(i) = P.col(j);               // R(i, :) = P(:, i)
R.col(j1).swap(mat1.col(j2));      // R(:, [j1 j2]) = R(:, [j2, j1])

6. Eigen Matlab矩阵转置

// Views, transpose, etc; all read-write except for .adjoint().
// Eigen                           // Matlab
R.adjoint()                        // R'
R.transpose()                      // R.' or conj(R')
R.diagonal()                       // diag(R)
x.asDiagonal()                     // diag(x)
R.transpose().colwise().reverse(); // rot90(R)
R.conjugate()                      // conj(R)

7. Eigen Matlab矩阵乘积

// All the same as Matlab, but matlab doesn't have *= style operators.
// Matrix-vector.  Matrix-matrix.   Matrix-scalar.
y  = M*x;          R  = P*Q;        R  = P*s;
a  = b*M;          R  = P - Q;      R  = s*P;
a *= M;            R  = P + Q;      R  = P/s;R *= Q;          R  = s*P;R += Q;          R *= s;R -= Q;          R /= s;

8.Eigen Matlab矩阵单个元素操作

// Vectorized operations on each element independently
// Eigen                  // Matlab
R = P.cwiseProduct(Q);    // R = P .* Q
R = P.array() * s.array();// R = P .* s
R = P.cwiseQuotient(Q);   // R = P ./ Q
R = P.array() / Q.array();// R = P ./ Q
R = P.array() + s.array();// R = P + s
R = P.array() - s.array();// R = P - s
R.array() += s;           // R = R + s
R.array() -= s;           // R = R - s
R.array() < Q.array();    // R < Q
R.array() <= Q.array();   // R <= Q
R.cwiseInverse();         // 1 ./ P
R.array().inverse();      // 1 ./ P
R.array().sin()           // sin(P)
R.array().cos()           // cos(P)
R.array().pow(s)          // P .^ s
R.array().square()        // P .^ 2
R.array().cube()          // P .^ 3
R.cwiseSqrt()             // sqrt(P)
R.array().sqrt()          // sqrt(P)
R.array().exp()           // exp(P)
R.array().log()           // log(P)
R.cwiseMax(P)             // max(R, P)
R.array().max(P.array())  // max(R, P)
R.cwiseMin(P)             // min(R, P)
R.array().min(P.array())  // min(R, P)
R.cwiseAbs()              // abs(P)
R.array().abs()           // abs(P)
R.cwiseAbs2()             // abs(P.^2)
R.array().abs2()          // abs(P.^2)
(R.array() < s).select(P,Q);  // (R < s ? P : Q)

9. Eigen Matlab矩阵化简

// Reductions.
int r, c;
// Eigen                  // Matlab
R.minCoeff()              // min(R(:))
R.maxCoeff()              // max(R(:))
s = R.minCoeff(&r, &c)    // [s, i] = min(R(:)); [r, c] = ind2sub(size(R), i);
s = R.maxCoeff(&r, &c)    // [s, i] = max(R(:)); [r, c] = ind2sub(size(R), i);
R.sum()                   // sum(R(:))
R.colwise().sum()         // sum(R)
R.rowwise().sum()         // sum(R, 2) or sum(R')'
R.prod()                  // prod(R(:))
R.colwise().prod()        // prod(R)
R.rowwise().prod()        // prod(R, 2) or prod(R')'
R.trace()                 // trace(R)
R.all()                   // all(R(:))
R.colwise().all()         // all(R)
R.rowwise().all()         // all(R, 2)
R.any()                   // any(R(:))
R.colwise().any()         // any(R)
R.rowwise().any()         // any(R, 2)

10. Eigen Matlab矩阵点乘

// Dot products, norms, etc.
// Eigen                  // Matlab
x.norm()                  // norm(x).    Note that norm(R) doesn't work in Eigen.
x.squaredNorm()           // dot(x, x)   Note the equivalence is not true for complex
x.dot(y)                  // dot(x, y)
x.cross(y)                // cross(x, y) Requires #include <Eigen/Geometry>

11. Eigen Matlab矩阵类型转换

 Type conversion
// Eigen                           // Matlab
A.cast<double>();                  // double(A)
A.cast<float>();                   // single(A)
A.cast<int>();                     // int32(A)
A.real();                          // real(A)
A.imag();                          // imag(A)
// if the original type equals destination type, no work is done

12. Eigen Matlab求解线性方程组 Ax = b

// Solve Ax = b. Result stored in x. Matlab: x = A \ b.
x = A.ldlt().solve(b));  // A sym. p.s.d.    #include <Eigen/Cholesky>
x = A.llt() .solve(b));  // A sym. p.d.      #include <Eigen/Cholesky>
x = A.lu()  .solve(b));  // Stable and fast. #include <Eigen/LU>
x = A.qr()  .solve(b));  // No pivoting.     #include <Eigen/QR>
x = A.svd() .solve(b));  // Stable, slowest. #include <Eigen/SVD>
// .ldlt() -> .matrixL() and .matrixD()
// .llt()  -> .matrixL()
// .lu()   -> .matrixL() and .matrixU()
// .qr()   -> .matrixQ() and .matrixR()
// .svd()  -> .matrixU(), .singularValues(), and .matrixV()

13. Eigen Matlab矩阵特征值

// Eigenvalue problems
// Eigen                          // Matlab
A.eigenvalues();                  // eig(A);
EigenSolver<Matrix3d> eig(A);     // [vec val] = eig(A)
eig.eigenvalues();                // diag(val)
eig.eigenvectors();               // vec
// For self-adjoint matrices use SelfAdjointEigenSolver<>
    // Matlab

A.eigenvalues(); // eig(A);
EigenSolver eig(A); // [vec val] = eig(A)
eig.eigenvalues(); // diag(val)
eig.eigenvectors(); // vec
// For self-adjoint matrices use SelfAdjointEigenSolver<>


Eigen/Matlab 使用小结相关推荐

  1. MATLAB【十三】————仿真函数记录以及matlab变成小结

    part one:matlab 编程小结. 1.char 与string的区别,char使用的单引号 '' ,string使用的是双引号"". 2.一般标题中的输出一定要通过 nu ...

  2. Eigen/Matlab库矩阵运算方法

    Eigen/Matlab库矩阵运算方法 Eigen库包含头文件简介: Core 有关矩阵和数组的类,有基本的线性代数(包含 三角形 和 自伴乘积 相关),还有相应对数组的操作. Geometry 几何 ...

  3. matlab编程小结

    最近在用matlab处理一些开源数据,需要用到matlab编程. 之前学习matlab编程不够系统和全面,对很多函数不太了解.数字图像处理和矩阵的一些常用处理居然不太熟悉,停留在学习的舒适区,有点不应 ...

  4. Matlab画图小结(二)

    #Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外, ...

  5. Matlab画图小结(一)

    #前言 Matlab作为常用的科学计算软件,其自带的画图足以支持我们日常的画图所学. ##图中子图作法 第一种:magnify是个动态放大镜,固化后可以用tools>edit plot移动小图, ...

  6. matlab 图像处理 新浪 应变,[转载]Matlab图像处理小结

    经常做做图像处理的东西,时间长了,有些函数就忘了,看到网上有人总结,收藏了. 1. 图像和图像数据 缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大 ...

  7. 2020-12-10 MATLAB学习小结(十九)

    MATLAB绘图 三 其他坐标系下的二维曲线图 统计图 矢量图形 其他坐标系下的二维曲线图 (1)对数坐标图 semilogx(x1, y1, 选项1, x2, y2, 选项2, -) semilog ...

  8. matlab乘号前加点,matlab使用经验小结

    1.shift+enter是一次输入几条语句时换行用的:空格+...+enter是一句话分行时的接续! 2.通过what命令可显示出搜索路径上的文件名,如:what(显示当前目录中的文件):what  ...

  9. matlab 随机数大于0,Matlab 随机数 小结

    1,rand 生成均匀分布的伪随机数.分布在(0~1)之间 语法:rand(m,n)生成m行n列的均匀分布的伪随机数 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是 ...

最新文章

  1. [ImportNew]Java中的Timer类和TimerTask类
  2. Ooui:在浏览器中运行.NET应用
  3. Linux shell类型
  4. SAP系统未清账和已清账的区分
  5. NUMA导致的MySQL服务器SWAP问题分析
  6. 研究人员的AI技术能够实时匹配活页乐谱与MIDI音频
  7. hdu 2197 本原串
  8. Java_数组练习答案_Java数组练习题带答案.doc
  9. Python使用reduce()函数计算多个集合的并集与交集
  10. Extjs chart 总结 reload-chart.js 修改
  11. 麦克纳姆轮全向移动机器人速度空间分析
  12. 问答 | 为什么car-like robot转向机构需要使用等腰梯形?
  13. 14-循环队列实现(C语言)
  14. 外卖系统源码,如何搭建一套同城o2o外卖商城平台
  15. threejs特效:边缘暗角shader
  16. 听说 Python 生成二维码很简单,说的好像我Java 很复杂一样。
  17. xmarks恢复使用
  18. GdPicture.NET SDK Crack,提供多种打印功能
  19. 超实用Word小技巧,常用但很少有人记得住
  20. 让物体沿椭圆轨道运动

热门文章

  1. 计算机类英语怎么学,计算机专业英语教程视频
  2. linux系统创建lvm卷,LVM逻辑卷创建管理
  3. python端午dragboat消消乐 美轮美奂的界面效果
  4. Reading Paper
  5. 力扣(LeetCode)刷题,简单题(第18期)
  6. GitHub:TensorFlow、PyTorch最全资料集锦
  7. opencv仿射变换
  8. 基于语义分割的视频弹幕防挡实现(训练、测试、部署实现)
  9. python一个月能掌握吗_零基础python入门分析,如何做到一个月学会(深思极恐)...
  10. ttc转换ttf字体在线_R 语言画图中英文字体解决方案