2016-11-14 14 views
2

Я пытаюсь написать небольшую развертку для сеток. Это использует метод конечных элементов для решения минимального линейного напряжения между сплющенной и необработанной поверхностью. На данный момент есть некоторые вершины, закрепленные для получения результата. Без этого треугольники вращаются и переводится случайным образом ...Решение сингулярной матрицы

Но поскольку это пиннинг не является необходимым для проблемы, лучшим решением было бы прямое решение сингулярной матрицы. Petsc действительно предоставляет некоторые методы для решения сингулярной системы, предоставляя некоторую информацию о nullspace. http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf#section.4.6 Интересно, есть ли альтернатива для этого в Eigen. Если нет, есть ли другие возможности для решения этой проблемы без фиксации/закрепления вершин.

спасибо, приятных пожелания

смотрите также эту ссылку на Дополнительную информацию: dev history

+0

Если нулевое пространство аналитический известно, то вы можете попробовать для написания специального предусловия, который будет проектором, предназначенным для устранения жестких движений. См. Http://stackoverflow.com/questions/39980074/how-to-use-custom-preconditioner-with-eigen и https://bitbucket.org/eigen/eigen/src/1a24287c6c133b46f8929cf5a4550e270ab66025/Eigen/src/IterativeLinearSolvers/BasicPreconditioners .h? at = default & fileviewer = file-view-default # BasicPreconditioners.h-185 Взгляните на http://scicomp.stackexchange.com/questions/7488/null-space-projection-for-singular-systems – francis

ответ

1

Эйген обеспечивает алгоритм разложения SVD: Jacobi SVD.

Разложение SVD дает пустое пространство. Следуя обозначениям wikipedia article, пусть M = U D V является разложением SVD М, где D является диагональной матрицей сингулярных значений. Тогда из Range, null space and rank:

правых сингулярных векторов [V], соответствующих исчезающий сингулярных значений M охватывают нулевое пространство M

+0

Я думаю SVD не подходит для больших матриц. Я хотел бы использовать решатель сопряженных градиентов. –

+0

SVD - довольно трудоемкое разложение, но реализация в Eigen очень надежна (относительно числовой точности). Какой размер матрицы вы нацеливаете? – billx

+0

Вы также можете посмотреть классы 'PartialPivLU' и' FullPivLU', которые могут дать вам ядро. http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html – billx