??????????? C++ ???Щ???????????????Matlab ???????????????????????鷳??????????? Eigen ????????????????????? Eigen ?????????C++?????????????????????????????????£????????????????????????????Eigen????????????????Ч???????????????? Matlab???? Eigen ?? API ????????????????? Eigen ?? Matlab ??????????????????????????????????????????????????????????????Щ??????????????????????£????????????
????Eigen ??????
#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)       //
????Eigen ???????
// 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 be
4?? 5?? 6??     // matrices?? which are stacked along cols
7?? 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.
????Eigen ???????????
// 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)'
????Eigen ??????
// 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)