Масштабирование по диагонали для повышения точности собственных значений
[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').