Иллюстрированный самоучитель по MatLab

Вычисление собственных значений и сингулярных чисел

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