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