![]() |
Вещественное число λ и вектор z называются собственной парой матрицы A, если они удовлетворяют следующему условию: Az = λz. При этом для вещественной матрицы A может быть поставлена задача поиска только собственных чисел, или как собственных чисел, так и векторов. Возможен поиск как всех собственных пар, так и удовлетворяющих определенным условиям (скажем, поиск только наибольших по модулю собственных чисел).
В случае, если матрица A размером NxN симметрична, у неё есть N собственных чисел (не обязательно различных) и N соответствующих им собственных векторов, образующих ортонормированный собственный базис (в общем случае собственные векторы не ортогональны, причем их может быть и меньше, чем N).
Этот алгоритм находит собственные числа (и, опционально, собственные векторы) трехдиагональной симметричной матрицы. Также он используется при нахождении собственных пар произвольной симметричной матрицы, поскольку любая симметричная матрица может быть приведена к трехдиагональной ортогональным преобразованием подобия, не меняющим собственных чисел матрицы.
Подпрограмма SMatrixTDEVD находит собственные числа (и, если требуется, собственные векторы) трехдиагональной матрицы, заданной главной диагональю D и побочной диагональю E.
Параметр ZNeeded сообщает алгоритму, требуются ли собственные векторы, при этом возможно как получение собственных векторов трехдиагональной матрицы, так и передача в алгоритм матрицы преобразования, приводящей некоторую симметричную матрицу к трехдиагональной, и получение собственных векторов оригинальной симметричной матрицы.
Алгоритм является итеративным, и, теоретически, может не сойтись. В таком случае он вернет False. Однако, на практике подобный вариант развития событий очень маловероятен - сходимость алгоритма очень хорошая, он справляется с любой из тех матриц, которые обычно возникают в реальных задачах. Так что вопрос сходимости - это не тот вопрос, о котором следует беспокоиться.
Этот алгоритм перенесен из библиотеки LAPACK.
| C++ | evd subpackage | |
| C# | evd subpackage |
This article is intended for personal use only.
Исходный код на C#
Исходный код на C++
Исходный код на C++, использующий библиотеки MPFR/GMP.
Исходный код GMP доступен на сайте gmplib.org. Исходный код MPFR доступен на сайте www.mpfr.org.
Исходный код на Free Pascal.
Исходный код на Delphi.
Исходный код на VB.NET.
Исходный код на VBA.
Исходный код на Python (CPython и IronPython).
|
ALGLIB® - numerical analysis library, 1999-2012. |