Libigl - Laplace Bletrami 算子分解
Libigl - Laplace Bletrami Operator Decomposition
以下代码来自Libigl的教程306:http://libigl.github.io/libigl/tutorial/#eigen-decomposition
........
SparseMatrix<double> L,M;
cotmatrix(V,F,L);
L = (-L).eval(); // WHY?????
massmatrix(V,F,MASSMATRIX_TYPE_DEFAULT,M);
const size_t k = 5;
if(!eigs(L,M,k+1,EIGS_TYPE_SM,U,D))
{
cout<<"failed."<<endl;
}
// Normalize
U = ((U.array()-U.minCoeff())/(U.maxCoeff()-U.minCoeff())).eval();
.......
我不明白L = (-L).eval();
谁能帮帮我?
完整的代码可以在 https://github.com/libigl/libigl/blob/master/tutorial/306_EigenDecomposition/main.cpp
找到
不同的人对拉普拉斯算子使用不同的约定。 libigl 生成负半定拉普拉斯算子(参见 documentation notes)。因此,该矩阵具有非正特征值。另一方面,libigl::eigs()
需要一个半正定矩阵。这就是为什么 L
被否定(将负半定矩阵变成正半定矩阵)。
以下代码来自Libigl的教程306:http://libigl.github.io/libigl/tutorial/#eigen-decomposition
........
SparseMatrix<double> L,M;
cotmatrix(V,F,L);
L = (-L).eval(); // WHY?????
massmatrix(V,F,MASSMATRIX_TYPE_DEFAULT,M);
const size_t k = 5;
if(!eigs(L,M,k+1,EIGS_TYPE_SM,U,D))
{
cout<<"failed."<<endl;
}
// Normalize
U = ((U.array()-U.minCoeff())/(U.maxCoeff()-U.minCoeff())).eval();
.......
我不明白L = (-L).eval();
谁能帮帮我?
完整的代码可以在 https://github.com/libigl/libigl/blob/master/tutorial/306_EigenDecomposition/main.cpp
不同的人对拉普拉斯算子使用不同的约定。 libigl 生成负半定拉普拉斯算子(参见 documentation notes)。因此,该矩阵具有非正特征值。另一方面,libigl::eigs()
需要一个半正定矩阵。这就是为什么 L
被否定(将负半定矩阵变成正半定矩阵)。