Вычисление собственных значений и сингулярных чисел
Во многих областях математики и прикладных наук большое значение имеют средства для вычисления собственных значений (собственных чисел, характеристических чисел, решений векового уравнения) матриц, принадлежащих им векторов
и сингулярных чисел. В новой версии 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.4630 0.8863