Вычисление собственных значений и сингулярных чисел
Во многих областях математики и прикладных наук большое значение имеют средства для вычисления собственных значений (собственных чисел, характеристических чисел, решений векового уравнения) матриц, принадлежащих им векторов и сингулярных чисел. В новой версии 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.00000.0000 0.0001 0.10000.0000 0.0000 0.0001>> [F.G]=balance(A) F =1.0e+004 *3.2768 0 00 0.0032 00 0 0.0000G =1.0000 0.9766 0.00950.1024 1.0000 0.97661.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.19560.9670 0.0193-0.0388 0.0276-0.0015-0.6181-0.8575 0.9780-0.0075-0.2588-0.1694-0.0676H =48.5287 0 0 00 3.1873 0 00 0 0.9750 00 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 123 56 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.46300.4630 0.8863