Вычисление
собственных значений и сингулярных чисел
Во многих
областях математики и прикладных наук большое значение имеют средства для вычисления
собственных значений (собственных чисел, характеристических чисел, решений векового
уравнения) матриц, принадлежащих им векторов
и
сингулярных чисел. В новой версии MATLAB собственные вектора нормализуются,
иначе, чем в предыдущих. Основной критерий: либо V'V=I, либо V'BV=I, где V —
собственный вектор, I — единичная матрица. Поэтому результаты вычислений в новой
версии, как правило, отличаются. Ниже дан список средств решения векового уравнения,
реализованных в системе MATLAB.
Несимметрические
матрицы могут быть плохо обусловлены при вычислении их собственных значений.
Малые изменения элементов матрицы, такие как ошибки округления, могут вызвать
большие изменения в собственных значениях.
Масштабирование —
это попытка
перевести каждую плохую обусловленность собственных векторов матрицы в диагональное
масштабирование. Однако масштабирование обычно не может преобразовать несимметрическую
матрицу в симметрическую, а только пытается сделать (векторную) норму каждой
строки равной норме соответствующего столбца. Масштабирование значительно повышает
стабильность собственных значений.
[D.B]
= balance(A) — возвращает диагональную матрицу D, элементы которой являются
степенями основания 2, и масштабированную матрицу В, такую, что B=D\A*D,
а норма каждого ряда масштабированной матрицы приближается к норме столбца
с тем же номером;
В = balance(A)
— возвращает масштабированную матрицу В. Пример использования функции balance:
»
А=[1 1000 10000:0.0001 1 1000:0.000001 0.0001 1]
А =
1.0е+004
*
0.0001
0.1000 1.0000
0.0000
0.0001 0.1000
0.0000
0.0000 0.0001
» [F.G]=balance(A)
F =
1.0е+004 *
3.2768
0 0
0
0.0032 0
0
0 0.0000
G =
1.0000
0.9766 0.0095
0.1024
1.0000 0.9766
1.0486
0.1024 1.0000
Величина,
связывающая погрешность вычисления собственных значений с погрешностью исходных
данных, называется
числом обусловленности
(собственных значений) матрицы
и вычисляется следующим образом:
cond(V) =
norm(V)*norm(inv(V)) где [V.D]=eig(A).[B=D\A*D, а норма каждого ряда масштабированной
матрицы приближается к норме столбца с тем же номером;]
eig(A)
— возвращает вектор собственных значений квадратной полной или симметрической
разреженной матрицы А обычно после автоматического масштабирования, но для
больших разреженных матриц (в терминологии MATLAB —
это просто
полные матрицы со сравнительно большим [
Но небольшим по сравнению с числом
нулей разреженной матрицы. Эталонное число нулей разреженной матрицы данного
размера можно вычислить, применив к полной матрице этого же размера функцию
sparse. — Примеч. ред.
] числом нулей), а также во всех случаях, где помимо
собственных значений необходимо получать и собственные вектора разреженной матрицы,
вместо нее рекомендовано использовать eigs(A);
eig(A.B)
- возвращает вектор обобщенных собственных значений квадратных матриц А
и В;
[V.D]
= eig(A.B) — вычисляет диагональную матрицу обобщенных собственных значений
D и матрицу V, столбцы которой являются соответствующими собственными
векторами (правыми собственными векторами), таким образом что А V =
В V D;
[V.D]
= eig(A) — вычисляет диагональную матрицу собственных значений О матрицы
А и матрицу V, столбцы которой являются соответствующими собственными
векторами (правыми собственными векторами), таким образом что А V =
V D.
Нужно использовать
[W,D]=e1g(A'); W=W, чтобы вычислить
левые
собственные вектора, которые
соответствуют уравнению W*A=D*W.
[V.D]
= eig(A,'nobalance') — находит собственные векторы и собственные значения
без предварительного масштабирования. Иногда это улучшает обусловленность
входной матрицы, обеспечивая большую точность вычисления собственных векторов
для необычно масштабированных матриц;
eig(A.B.
'chol') — возвращает вектор, содержащий обобщенные собственные значения,
используя разложение матрицы В по методу Холецкого; если А - симметрическая
квадратная матрица и В — симметрическая положительно определенная квадратная
матрица, то eig(A.B) по умолчанию работает точно так же;
eig(A,B,
'qz') — не требует, чтобы матрицы были симметрическими и возвращает вектор,
содержащий обобщенные собственные значения, используя QZ-алгоритм; при явном
указании этого флага QZ-алгоритм используется вместо алгоритма Холецкого
даже для симметрической матрицы и симметрической положительно определенной
матрицы В, так как может давать более стабильные значения, чем предыдущий
метод. Для несимметрических матриц в MATLAB 6 всегда используется QZ-алгоритм
и параметр 'chol' или 'qz' игнорируется;
[V.D]
= eig(A.B) — возвращает диагональную матрицу обобщенных собственных значений
D и матрицу V, чьи столбцы являются соответствующими собственными векторами,
так чтобы A*V=B*V*D. Пример:
svd(X)
— возвращает вектор сингулярных чисел. Команда svd выполняет сингулярное
разложение матрицы X;
[U.S,
V] = svd(X) — вычисляет диагональную матрицу S тех же размеров, которые
имеет матрица X, с неотрицательными диагональными элементами в порядке их
убывания, и унитарные матрицы U и V, так что X=U*S*V ' ;
[U.S.V]
= svd(X.O) — выполняет экономичное сингулярное разложение. Пример: