Вычисление
собственных значений и сингулярных чисел
Во многих
областях математики и прикладных наук большое значение имеют средства для вычисления
собственных значений (собственных чисел, характеристических чисел, решений векового
уравнения) матриц, принадлежащих им векторов
и
сингулярных чисел. В новой версии 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. Пример:
»
В = [3 -12 -.6 2*eps:-2 48 -1 -eps;-eps/8 eps/2 -1 10;-.5 -.5 .3 1]
В =
3.0000
-12.0000 -0.60000.0000
-2.0000
48.0000-1.0000-0.0000
-0.0000
0.0000 -1.0000 10.0000
-0.5000
-0.5000 0.3000 1.0000
» [G.H]=eig(B)
G =
-0.2548
0.7420 -0.4842 0.1956
0.9670
0.0193 -0.0388
0.0276
-0.0015
-0.6181 -0.8575 0.9780
-0.0075
-0.2588 -0.1694 -0.0676
H =
48.5287
0 0 0
0
3.1873 0 0
0
0 0.9750 0
0
0 0 -1.6909
-
svd(X)
— возвращает вектор сингулярных чисел. Команда svd выполняет сингулярное
разложение матрицы X;
-
[U.S,
V] = svd(X) — вычисляет диагональную матрицу S тех же размеров, которые
имеет матрица X, с неотрицательными диагональными элементами в порядке их
убывания, и унитарные матрицы U и V, так что X=U*S*V ' ;
-
[U.S.V]
= svd(X.O) — выполняет экономичное сингулярное разложение. Пример:
»
F=[23 12;3 5:6 0]
F =
23
12
3
5
6
0
»
[k,l,m]=svd(F)
k=
|
|
|
|
|
|
0.9628
|
-0.0034
|
-0.2702
|
|
|
0.1846
|
0.7385
|
0.6485
|
|
|
0.1974
|
-0.6743
|
0.7116
|
|
|
l=
|
|
|
|
|
26.9448
|
0
|
|
|
|
0
|
4.1202
|
|
|
|
0
|
0
|
|
|
|
m=
|
|
|
|
0.8863
-0.4630
0.4630 0.8863
Содержание раздела