баланс

Диагональ, масштабирующаяся, чтобы улучшить точность собственного значения

Синтаксис

[T,B] = balance(A)
[S,P,B] = balance(A)
B = balance(A)
B = balance(A,'noperm')

Описание

[T,B] = balance(A) возвращает преобразование подобия T, таким образом, что B = T\A*T и B имеют, почти, приблизительно равные нормы строки и столбца. T является перестановкой диагональной матрицы, элементы которой являются целочисленными степенями двойки, чтобы предотвратить введение ошибки округления. Если A симметричен, то B == A и T являются единичной матрицей.

[S,P,B] = balance(A) возвращает масштабирующийся векторный S и вектор перестановки P отдельно. Преобразование T и сбалансированный матричный B получено из A, S и P T(:,P) = diag(S) и B(P,P) = diag(1./S)*A*diag(S).

B = balance(A) возвращает только сбалансированный матричный B.

B = balance(A,'noperm') шкалы A, не переставляя его строки и столбцы.

Примеры

Этот пример показывает основную идею. Матричный A имеет большие элементы в верхних правых и маленьких элементах в нижнем левом углу. Это далеко от того, чтобы быть симметричным.

A = [1  100  10000; .01  1  100; .0001  .01  1]
A =
   1.0e+04 *
    0.0001    0.0100    1.0000
    0.0000    0.0001    0.0100
    0.0000    0.0000    0.0001

Балансировка производит диагональный матричный T с элементами, которые являются степенями двойки и сбалансированным матричным B, который ближе к симметричному, чем A.

[T,B] = balance(A)
T =
   1.0e+03 *
    2.0480         0         0
         0    0.0320         0
         0         0    0.0003
B =
    1.0000    1.5625    1.2207
    0.6400    1.0000    0.7813
    0.8192    1.2800    1.0000

Чтобы видеть эффект на собственные вектора, сначала вычислите собственные вектора A, показанного здесь как столбцы V.

[V,E] = eig(A); V
V =
0.9999        -0.9999            -0.9999          
0.0100         0.0059 + 0.0085i   0.0059 - 0.0085i
0.0001         0.0000 - 0.0001i   0.0000 + 0.0001i

Обратите внимание на то, что все три вектора имеют первый компонент самое большое. Это указывает, что V плохо обусловливается; на самом деле cond(V) является 8.7766e+003. Затем, посмотрите на собственные вектора B.

[V,E] = eig(B); V
V =
0.6933        -0.6993            -0.6993          
0.4437         0.2619 + 0.3825i   0.2619 - 0.3825i
0.5679         0.2376 - 0.4896i   0.2376 + 0.4896i

Теперь собственные вектора хорошего поведения, и cond(V) является 1.4421. Плохое создание условий сконцентрировано в масштабирующейся матрице; cond(T) является 8192.

Этот пример является небольшим и не действительно плохо масштабируемый, таким образом, вычисленные собственные значения A и B соглашаются в ошибке округления; балансировка имеет мало эффекта на вычисленные результаты.

Ограничения

Балансировка может уничтожить свойства определенных матриц; используйте его с некоторой осторожностью. Если матрица содержит маленькие элементы, которые происходят из-за ошибки округления, балансировка может увеличить их, чтобы сделать их столь же значительными как другие элементы исходной матрицы.

Советы

  • Несимметричные матрицы могли плохо обусловить собственные значения. Небольшие возмущения в матрице, такие как ошибки округления, могут привести к большим возмущениям в собственных значениях. Количество условия матрицы собственного вектора,

    cond(V) = norm(V)*norm(inv(V))

    где

    [V,T] = eig(A)

    связывает размер матричного возмущения к размеру возмущения собственного значения. Обратите внимание на то, что количество условия самого A не важно задаче о собственных значениях.

    Балансировка является попыткой сконцентрировать любое плохое создание условий матрицы собственного вектора в диагональное масштабирование. Балансировка обычно не может превращать несимметричную матрицу в симметрическую матрицу; это только пытается сделать норму каждой строки равной норме соответствующего столбца.

    Примечание

    Функция собственного значения MATLAB®, eig(A), автоматически балансирует A прежде, чем вычислить его собственные значения. Выключите балансировку с eig(A,'nobalance').

Смотрите также

|