Либигл - Лаплас Блетрами Оператор Разложение

Следующий код взят из учебного пособия по Libigl 306: http://libigl.github.io/libigl/tutorial/

  ........
  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

1 ответ

Решение

Разные люди используют разные соглашения для лапласиана. libigl производит отрицательный полуопределенный лапласиан (см. примечания к документации). Следовательно, эта матрица имеет неположительные собственные значения. С другой стороны, libigl::eigs() требует положительной полуопределенной матрицы. Вот почему L отрицается (чтобы превратить отрицательную полуопределенную матрицу в положительную полуопределенную).

Другие вопросы по тегам