Матричное масштабирование для улучшения кондиционирования
Уравновесить матрицу с большим числом условий для повышения эффективности и стабильности решения линейной системы с помощью итерационного решателя gmres.
Загрузить west0479 матрица, которая является вещественно-значной 479 на 479 разреженной матрицей. Использовать condest для вычисления расчетного номера условия матрицы.
load west0479
A = west0479;
c1 = condest(A)c1 = 1.4244e+12
Попробуйте решить линейную систему b с помощьюgmres с 450 итерациями и допуском 1e-11. Укажите пять выходов так, чтобы gmres возвращает остаточные нормы решения при каждой итерации (используя ~ для подавления ненужных выходов). Постройте график остаточных норм на полулогом графике. Сюжет показывает, что gmres не может достичь разумной остаточной нормы, и поэтому вычисленное решение для не является надежным.
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')
Использовать 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, можно переформулировать задачу b = d, = d = RPb. В этой форме можно восстановить решение в исходной с x = Cy.
Использовать gmres чтобы решить 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

Улучшение решения с помощью средства предварительного кондиционирования
После получения матрицы 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

A - Входная матрицаВходная матрица, заданная как квадратная матрица. A может быть плотным или разреженным, но должен быть структурно несингулярным, как определено sprank.
Когда A разрежен, выходы разрежены P, R, и C также редки.
Типы данных: single | double
Поддержка комплексного номера: Да
P - Матрица перестановокМатрица перестановки, возвращаемая как матрица. P*A - перестановка A что максимизирует абсолютное значение произведения его диагональных элементов.
R - Масштабирование строкМасштабирование строк, возвращаемое в виде диагональной матрицы. Диагональные элементы в R и C являются реальными и позитивными.
C - Масштабирование столбцовМасштабирование столбцов, возвращаемое в виде диагональной матрицы. Диагональные элементы в R и C являются реальными и позитивными.
[1] Дафф, И. С. и Дж. Костер. «О алгоритмах перестановки больших записей в диагональ разреженной матрицы». Журнал СИАМ по матричному анализу и приложениям 22, № 4 (январь 2001 года): 973-96.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.