![]() |
Комплексное число λ и комплексный вектор z называются собственной парой комплексной матрицы A, если они удовлетворяют следующему условию: Az = λz. В случае, если матрица A размером NxN эрмитова, у неё есть N собственных чисел (не обязательно различных) и N соответствующих им собственных векторов, образующих ортонормированный собственный базис (в общем случае собственные векторы не ортогональны, причем их может быть и меньше, чем N).
Для эрмитовой матрицы A может быть поставлена как задача поиска всех собственных чисел и векторов (называемых спектром матрицы A), так и задача поиска не всего спектра, а лишь его части. В последнем случае можно использовать метод бисекции, позволяющий найти собственные числа, лежащие в указанном интервале (или собственные числа с указанными номерами), после чего при помощи метода обратной итерации получить по собственным числам соответствующие им собственные векторы. Если ищется только малая часть полного спектра матрицы, то достигается значительная экономия скорости по сравнению с QL/QR алгоритмом. Более подробно см. описание аналогичной подпрограммы для вещественных симметричных матриц.
Для поиска собственных чисел (и соответствующих векторов), лежащих в указанном полуинтервале (A, B] можно использовать подпрограмму HMatrixEVDR. Подпрограмма HMatrixEVDI позволяет найти собственные пары с указанными порядковыми номерами (при этом спектр упорядочен в порядке возрастания собственных чисел).
Следует отметить, что алгоритм эффективен только при поиске малой части собственных пар. Если требуется найти все собственные числа (или значительное их число), то более эффективен именно QL/QR алгоритм.
Этот алгоритм перенесен из библиотеки LAPACK 3.0
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-2018. |