equilibrate

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

Синтаксис

Описание

пример

[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.

Улучшите решение с помощью Preconditioner

После того, как вы получите матрицу 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] Дафф, И. С., и Дж. Костер. «Об алгоритмах перестановки больших записей в диагональ разреженной матрицы». SIAM Journal по матричному анализу и применениям 22, № 4 (январь 2001 года): 973-96.

См. также

| | | | |

Введенный в R2019a