Re: [eigen] Using MatrixL

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]



to complete the answer, "MatrixL" is a typedef.

gael

On Tue, Apr 5, 2016 at 3:21 AM, Hervé Audren <h.audren@xxxxxxxxxx> wrote:
Hello,

There is a typo in your code: you should use the matrixL() method instead of the MatrixL() method. I am not sure why the latter even exists, but I do not think that it is what you are looking for.

Cheers,
Hervé


On 2016年04月05日 05:36, Brad Bell wrote:
I am trying to use the MatrixL function with the SimplicialLLT class; see
http://eigen.tuxfamily.org/dox-devel/classEigen_1_1SimplicialLLT.html#ab1d2a318355498a335b9923e0b12a290
I do not understand why I get the following message
    error: invalid use of ‘Eigen::SimplicialLLT<Eigen::SparseMatrix<double, 0>, 1>::MatrixL’
when I compile the following program:

# include <iostream>
# include <Eigen/SparseCholesky>
# define TRY_TO_USE_MATRIXL 1
int main(void)
{
    typedef Eigen::SparseMatrix<double, Eigen::ColMajor> eigen_sparse;
    typedef Eigen::SimplicialLLT<eigen_sparse, Eigen::Lower> eigen_cholesky;

    size_t n = 4;
    //
    // identity matrix
    eigen_sparse eye(n, n);
    for(size_t i = 0; i < n; i++)
        eye.insert(i, i) = 1.0;
    //
    // cholesky factor L * L^T
    eigen_cholesky cholesky;
    cholesky.compute( eye );
    //
    // unit vector in first coordinate direction
    eigen_sparse unit(n, 1);
    unit.insert(0, 0) = 1.0;
    //
    // solve eye * x = unit;
    eigen_sparse x = cholesky.solve(unit);
    //
    // print x
    std::cout << "x = " << x << std::endl;
    //
    // print L
# if TRY_TO_USE_MATRIXL
    std::cout << cholesky.MatrixL() << std::endl;
# endif
    //
    return 0;
}









Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/