Вычисление собственных значений и сингулярных чисел
Во многих областях математики и прикладных наук большое значение имеют средства для вычисления собственных значений (собственных чисел, характеристических чисел, решений векового уравнения) матриц, принадлежащих им векторов и сингулярных чисел. В новой версии MATLAB собственные вектора нормализуются, иначе, чем в предыдущих. Основной критерий: либо V'V=I, либо V'BV=I, где V – собственный вектор, I – единичная матрица. Поэтому результаты вычислений в новой версии, как правило, отличаются. Ниже дан список средств решения векового уравнения, реализованных в системе MATLAB.
Несимметрические матрицы могут быть плохо обусловлены при вычислении их собственных значений. Малые изменения элементов матрицы, такие как ошибки округления, могут вызвать большие изменения в собственных значениях. Масштабирование – это попытка перевести каждую плохую обусловленность собственных векторов матрицы в диагональное масштабирование. Однако масштабирование обычно не может преобразовать несимметрическую матрицу в симметрическую, а только пытается сделать (векторную) норму каждой строки равной норме соответствующего столбца. Масштабирование значительно повышает стабильность собственных значений.
- [D.B] = balance(A) – возвращает диагональную матрицу D, элементы которой являются степенями основания 2, и масштабированную матрицу В, такую, что B=D\A*D, а норма каждого ряда масштабированной матрицы приближается к норме столбца с тем же номером;
- В = balance(A) – возвращает масштабированную матрицу В.
Пример использования функции balance:
>
>
A
=
[
1
1000
10000
:
0.0001
1
1000
:
0.000001
0.0001
1
]
A
=
1.0e
+
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.0e
+
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. Пример:
>
>
B
=
[
3
-
12
-
0.6
2
*
eps:
-
2
48
-
1
-
eps;
-
eps
/
8
eps
/
2
-
1
10
;
-
0.5
-
0.5.3
1
]
B
=
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