我试图从Eigen::DiagonalMatrix类型中提取子矩阵,但block不是Eigen::DiagonalMatrix类型的成员。
Eigen::DiagonalMatrix<double, 7> A;
...
(void) A.block<6,6>(0,0); // fails, block is not a member of Eigen::DiagonalMatrix
有其他方法提取DiagonalMatrix类型的子矩阵吗?
我想给SparseMatrix添加一个密集的矩阵,我知道我可以很容易地对密集矩阵做矩阵+向量
Eigen::MatrixXf mat(2,4);
Eigen::VectorXf v(2);
mat << 1, 2, 6, 9,
3, 1, 7, 2;
v << 0,
1;
//add v to each column of m
mat.colwise() += v;
但是对于稀疏矩阵,如何做到这一点呢?
我正在尝试使用eigen构造一个对角矩阵,然后沿对角线设置值:
Eigen::DiagonalMatrix<int, Eigen::Dynamic> diagonal_matrix(5);
for (int i = 0; i < 5; ++i) {
diagonal_matrix(i, i) = i * i + 2;
}
但是,因为diagonal_matrix缺少()运算符,所以这不起作用。使用eigen设置对角线矩阵的对角线值的正确方法是什么?
我确实有一个实现最小化算法的函数。我没有包括所有的vars,只包括用来说明类型的矩阵:
typedef Eigen::SparseMatrix<double> SpMat;
typedef Eigen::VectorXd Vec;
int lm_solver(void (*f_dz)(Vec* x_, int m, Vec* dz_, SpMat* W_),
void (*f_H)(Vec* x_, SpMat* jac_,int n_, int m_),
Vec* x, int nx, int mm, int nnz,
我想在我的程序中使用特征矩阵库作为线性代数引擎。Eigen使用表达式模板来实现惰性计算,并简化循环和计算。
例如:
#include<Eigen/Core>
int main()
{
int size = 40;
// VectorXf is a vector of floats, with dynamic size.
Eigen::VectorXf u(size), v(size), w(size), z(size);
u = 2*v + w + 0.2*z;
}
由于Eigen使用表达式模板,因此代码如下
u = 2*v + w + 0.2*z;
在上面提到的
我必须通过选择数组的一些成员来从数组构造Eigen::Vector。我知道我可以使用Eigen::Map来初始化Eigen::Vector,而不需要复制。
假设我有一个由N整数组成的数组,我需要通过选择具有从j到j+m和k到k+m的索引的数组值来创建一个Eigen::VectorXi,而不复制这些值。
这在Eigen或Armadillo中是可能的吗?
示例:
int array[]= {1,2,3,4,5,6,7,8,9,10};
//I need to initialize a Eigen::VectorXi with values having 0 to 0+3
// indi