exponenta event banner

уравновеситься

Матричное масштабирование для улучшения кондиционирования

Синтаксис

Описание

пример

[P,R,C] = equilibrate(A) перестановка и масштабирование матрицы A такой, что новая матрица B = R*P*A*C имеет диагональ со входами величиной 1, а его внедиагональные входы не больше 1 по величине.

Примеры

свернуть все

Уравновесить матрицу с большим числом условий для повышения эффективности и стабильности решения линейной системы с помощью итерационного решателя gmres.

Загрузить west0479 матрица, которая является вещественно-значной 479 на 479 разреженной матрицей. Использовать condest для вычисления расчетного номера условия матрицы.

load west0479
A = west0479;
c1 = condest(A)
c1 = 1.4244e+12

Попробуйте решить линейную систему Ax = b с помощьюgmres с 450 итерациями и допуском 1e-11. Укажите пять выходов так, чтобы gmres возвращает остаточные нормы решения при каждой итерации (используя ~ для подавления ненужных выходов). Постройте график остаточных норм на полулогом графике. Сюжет показывает, что gmres не может достичь разумной остаточной нормы, и поэтому вычисленное решение для x не является надежным.

b = ones(size(A,1),1);
tol = 1e-11;
maxit = 450;
[x,flx,~,~,rvx] = gmres(A,b,[],tol,maxit);
semilogy(rvx)
title('Residual Norm at Each Iteration')

Figure contains an axes. The axes with title Residual Norm at Each Iteration contains an object of type line.

Использовать equilibrate для перестановки и масштабирования A. Создание новой матрицы B = R*P*A*C, который имеет лучший номер условия и диагональные записи только 1 и -1.

[P,R,C] = equilibrate(A);
B = R*P*A*C;
c2 = condest(B)
c2 = 5.1036e+04

Использование выходных данных, возвращаемых equilibrate, можно переформулировать задачу Ax = b в By = d, где B = RPAC и d = RPb. В этой форме можно восстановить решение в исходной системе с x = Cy.

Использовать gmres чтобы решить By = d для y, а затем повторить остаточные нормы на каждой итерации. График показывает, что уравновешивание матрицы улучшает стабильность задачи, сgmres схождение к требуемому допуску 1e-11 менее чем за 200 итераций.

d = R*P*b;
[y,fly,~,~,rvy] = gmres(B,d,[],tol,maxit);
hold on
semilogy(rvy)
legend('Original', 'Equilibrated', 'Location', 'southeast')
title('Relative Residual Norms (No Preconditioner)')
hold off

Figure contains an axes. The axes with title Relative Residual Norms (No Preconditioner) contains 2 objects of type line. These objects represent Original, Equilibrated.

Улучшение решения с помощью средства предварительного кондиционирования

После получения матрицы B, вы можете еще больше улучшить стабильность проблемы, рассчитав предварительное условие для использования с gmres. Численные свойства B лучше, чем у исходной матрицы AПоэтому для вычисления предварительного условия следует использовать уравновешенную матрицу.

Рассчитайте два различных предварительных условия с помощью iluи использовать их в качестве входных данных для gmres чтобы снова решить проблему. Постройте график остаточных норм при каждой итерации на том же графике, что и равновесные нормы для сравнения. График показывает, что вычисление предварительных условий с уравновешенной матрицей значительно повышает стабильность задачи, с gmres достижение требуемого допуска менее чем за 30 итераций.

semilogy(rvy)
hold on

[L1,U1] = ilu(B,struct('type','ilutp','droptol',1e-1,'thresh',0));
[yp1,flyp1,~,~,rvyp1] = gmres(B,d,[],tol,maxit,L1,U1);
semilogy(rvyp1)

[L2,U2] = ilu(B,struct('type','ilutp','droptol',1e-2,'thresh',0));
[yp2,flyp2,~,~,rvyp2] = gmres(B,d,[],tol,maxit,L2,U2);
semilogy(rvyp2)

legend('No preconditioner', 'ILUTP(1e-1)', 'ILUTP(1e-2)')
title('Relative Residual Norms with ILU Preconditioner (Equilibrated)')
hold off

Figure contains an axes. The axes with title Relative Residual Norms with ILU Preconditioner (Equilibrated) contains 3 objects of type line. These objects represent No preconditioner, ILUTP(1e-1), ILUTP(1e-2).

Входные аргументы

свернуть все

Входная матрица, заданная как квадратная матрица. A может быть плотным или разреженным, но должен быть структурно несингулярным, как определено sprank.

Когда A разрежен, выходы разрежены P, R, и C также редки.

Типы данных: single | double
Поддержка комплексного номера: Да

Выходные аргументы

свернуть все

Матрица перестановки, возвращаемая как матрица. P*A - перестановка A что максимизирует абсолютное значение произведения его диагональных элементов.

Масштабирование строк, возвращаемое в виде диагональной матрицы. Диагональные элементы в R и C являются реальными и позитивными.

Масштабирование столбцов, возвращаемое в виде диагональной матрицы. Диагональные элементы в R и C являются реальными и позитивными.

Ссылки

[1] Дафф, И. С. и Дж. Костер. «О алгоритмах перестановки больших записей в диагональ разреженной матрицы». Журнал СИАМ по матричному анализу и приложениям 22, № 4 (январь 2001 года): 973-96.

См. также

| | | | |

Представлен в R2019a