
- •Проблема собственных значений Введение
- •1. Необходимые сведения из линейной алгебры
- •1.1 Обозначения
- •1.2 Основные определения
- •1.2.1 Матричные операции
- •1.2.2 Преобразование подобия
- •1.2.3 Матрицы со специальными свойствами
- •1.3 Проблема собственных значений
- •1.3.1 Собственные значения и векторы
- •1.3.2 Характеристическое уравнение
- •1.3.3 Собственные значения и собственные векторы диагональных матриц
- •1.3.4 Связь между собственными значениями и векторами подобных матриц
- •1.3.5 Матрицы простой структуры
- •2. Численные методы решения проблемы собственных значений
- •2.1 Классификация задач
- •2.2 Методы решения полной проблемы собственных значений
- •2.2.1 Метод Якоби
- •2.2.3 Приведение симметричной матрицы к трехдиагональной форме с помощью преобразований Хаусхолдера.
- •2.3 Методы решения частичной проблемы собственных значений
- •2.3.1 Прямые итерации
- •2.3.2 Обратные итерации
- •2.3.3 Последовательность Штурма и метод бисекции
2.3.2 Обратные итерации
Пусть как и прежде u0 – произвольный вектор; A – невырожденная матрица простой структуры. Обратными итерациями вектора u0 называется процесс получения последовательности векторов
. (34)
Иными словами, очередной вектор получается в результате решения системы линейных уравнений с матрицей A и предыдущим векторов в качестве правой части. Обратная итерация с матрицей A равносильна прямой итерации с матрицей A1. Предположим, что собственные значения A пронумерованы в порядке убывания. Так как собственные значения обратной матрицы равны обратным величинам собственных значений прямой матрицы, причем собственные векторы обеих матриц совпадают, то результат обратной итерации (при k=1) можно записать в виде:
Таким образом, обратная итерация позволяет определить наименьшее по абсолютной величине собственное значение и соответствующий собственный вектор.
Рассмотрим теперь обратную итерацию со сдвигом:
. (35)
Собственные значения матрицы (AE) равны i, а собственные векторы те же, что у матрицы A. Так как обратная итерация сходится к наименьшему собственному значению, то итерация по уравнению (35) позволяет найти собственное значение, наиболее близкое к выбранной величине сдвига, т. е. то, для которого разность i является наименьшей по абсолютной величине.
Часто обратную итерацию применяют для того, чтобы найти собственные векторы, отвечающие уже вычисленным собственным значениям. В этом случае процесс можно организовать следующим образом:
1. Возьмем произвольный пробный вектор u0 и вычислим для него нормировочный множитель 1. Обозначим нормированный вектор w0:
2. В качестве сдвига используем
приближенную величину
интересующего
собственного значения
,
где
– малая величина, отличная от
нуля, поскольку сдвиг не должен
совпасть с точным собственным
значением. В противном случае
det(AE)
окажется нулевым, и систему
уравнений (35) решить не удастся.
На практике, однако, роль
играет неизбежная
вычислительная погрешность,
и равенство определителя
системы нулю маловероятно.
3. Найдем вектор u1 путем решения системы (35) с w0 в качестве правой части. Вычислим нормировочный множитель 2 и получим нормированный вектор w1=2u1.
4. Повторим итерацию и найдем нормированный вектор w2. Сравним w2 с w1. Если различия между ними находятся в пределах желаемой точности, примем w2 в качестве искомого собственного вектора. В противном случае найдем w3, сравним его с w2 и т. д.
2.3.3 Последовательность Штурма и метод бисекции
Пусть A – произвольная квадратная матрица порядка N. Рассмотрим последовательность ведущих подматриц Ak (k=1,2,,N), т. е. квадратных блоков порядка k, начинающихся в верхнем левом углу и расположенных на главной диагонали A. Иными словами, A1=a11, а AN совпадает с A:
A1=a11,
,
, ,
.
Обозначим через Pk() характеристический многочлен подматрицы Ak:
. (36)
Определим дополнительно многочлен нулевой степени P0()1. Существует теорема*), которая утверждает, что корни соседних многочленов разделяют друг друга, т. е. между двумя смежными корнями многочлена Pk() находится один корень многочлена Pk+1() и наоборот. Последовательность многочленов, обладающих таким свойством, называют последовательностью Штурма.
Если вычислить значения многочленов, образующих последовательность Штурма, при произвольно взятом значении переменной и сравнить знаки величин Pk() (k=0,1,,N), то оказывается, что число перемен знака в рассматриваемой числовой последовательности равно числу собственных значений A, меньших, чем . Доказательство этого утверждения (слишком громоздкое, чтобы приводить его здесь) можно найти в книге Уилкинсона [Error: Reference source not found].
Обозначим s() число перемен знака в последовательности Штурма, вычисленной при значении переменной . Очевидно, разность s(2)s(1) равна числу собственных значений A в интервале от 1 до 2. Целочисленная функция s() по мере роста монотонно возрастает от 0 до N, причем ее значение увеличивается на 1 всякий раз, когда совпадает с очередным собственным значением. Таким образом, вычисляя s(), можно определить количество собственных значений на заданном отрезке и уточнить их положение с помощью процедуры деления отрезка пополам (бисекции).
Для матрицы общего вида вычисление многочленов Pk() требует больших вычислительных затрат, поскольку не существует простого соотношения, которое связывало бы многочлены разных степеней k. Ситуация значительно упрощается, если A – симметричная трехдиагональная матрица. В этом случае легко получить рекуррентное соотношение
, (37)
где di
– диагональные, а ei
– внедиагональные
элементы матрицы, т. е.
,
.
Таким образом, прежде, чем
находить собственные
значения с помощью
последовательности
Штурма, желательно привести
матрицу к трехдиагональной
форме, например, преобразованиями
Хаусхолдера.
Формулы (37) весьма устойчивы к ошибкам округления. Однако их непосредственному применению на практике мешает то обстоятельство, что величины Pk() при k, близких к N, часто оказываются очень малыми или очень большими по абсолютной величине и выходят за границиы диапазона представимых в машине вещественных чисел. В результате даже при не очень высоких порядках матриц возникают переполнения или появляются машинные нули.
Этой трудности можно избежать, если от последовательности многочленов Pk() перейти к последовательности их отношений Qk()=Pk()/Pk1(), k=1,2,,N. Так как корни Pk1() находятся между корнями Pk(), то оба многочлена ведут себя сходным образом, и их отношение не должно быть ни слишком большим, ни слишком малым (за исключением, быть может, окрестностей корней Pk1(), где знаменатель приближается к нулю). Величина s() равна количеству отрицательных значений среди Qk(), поскольку всякое изменение знака в последовательности Штурма означает, что при соответствующем k знаки Pk() и Pk1() противоположны.
Для вычисления Qk() можно воспользоваться рекуррентным соотношением
. (38)
Если
в знаменателе выражения
(38) окажется равным нулю, его
можно заменить некоторой
отличной от нуля малой величиной.
Как следует из приведенного
в [Error: Reference source not found] анализа
ошибок, подобная замена
практически не ухудшает
точности определения
собственных значений.
Процедура решения частичной проблемы собственных значений методом деления отрезка пополам, основанная на вычислениях функции s() с применением соотношения (38), содержится в файле EIGEN.PAS под названием Bisect.
2.3.4 QR-алгоритм для частичной проблемы собственных значений
Описанные в разделе 2.2.2 QR- или QL-алгоритмы со сдвигом можно использовать для решения не только полной, но и частичной проблемы собственных значений. Один шаг алгоритма приводит к определению наименьшего (с учетом выбранного сдвига) собственного значения. Многократное повторение таких шагов с последовательным понижением порядка матрицы позволяет найти m нижних собственных значений.
Поскольку в случае частичной проблемы собственных значений диагонализация матрицы не доводится до конца, собственные векторы в том же вычислительном процессе получить не удается. Их находят после, применяя, например, метод обратной итерации.
В обычном QR-алгоритме при разложении исходной матрицы на произведение ортогональной и треугольной применяется последовательность N1 вращений Гивенса (см. уравнение (26)), причем построение матрицы каждого элементарного поворота требует извлечения двух квадратных корней, т. е. 2(N1) корней на одну итерацию. Если собственные векторы не определяются, оказывается возможным построить более экономную схему вычислений, обходящуюся без извлечения квадратных корней и требующую меньшего числа арифметических операций. При этом величина сдвига получается по формуле Ньютона. Подробности можно найти в [Error: Reference source not found] и [Error: Reference source not found]. Вариант алгоритма без операций квадратного корня получил название рационального QR-алгоритма (процедура RatQR в файле EIGEN.PAS).
) В англоязычной литературе приняты термины “eigenvalue” и “eigenvector”, составленные из заимствованного немецкого слова “eigen” («собственный») и английских слов “value” и “vector” («значение» и «вектор», соответственно).
*) Теорема Коши о разделении корней (доказательство см., например, в [Error: Reference source not found])
1. В. В. Воеводин, Ю. А. Кузнецов. Матрицы и вычисления. М.: Наука, 1984.
2. Г. Корн, Т. Корн. Справочник по математике для научных работников и инженеров. М.: Наука, 1974.
3. Дж. Х. Уилкинсон. Алгебраическая проблема собственных значений. М.: Наука, 1970.
4. Б. Парлетт. Симметричная проблема собственных значений. Численные методы. М.: Мир, 1983.
5. Дж. Уилкинсон, К. Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. М.: Машиностроение, 1976.