Матрица, масштабирующаяся для улучшенного создания условий
[P,R,C] = equilibrate(A)
Уравновесьте матрицу большим номером условия, чтобы повысить эффективность и устойчивость решения для линейной системы с итеративным решателем gmres
.
Загрузите матрицу west0479
, которая является с действительным знаком 479 479 разреженная матрица. Используйте condest
, чтобы вычислить предполагаемое количество условия матрицы.
load west0479
A = west0479;
c1 = condest(A)
c1 = 1.4244e+12
Попытайтесь решить линейную систему использование 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
, можно повторно сформулировать проблему в , где и . В этой форме можно восстановить решение исходной системы с .
Используйте gmres
, чтобы решить для , и затем повторно постройте нормы невязки в каждой итерации. График показывает, что уравновешивание матрицы улучшает устойчивость проблемы с 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
.
Типы данных: single | double
Поддержка комплексного числа: Да
P
Матрица перестановокМатрица перестановок, возвращенная как разреженная матрица. P*A
является перестановкой A
, который максимизирует абсолютное значение продукта его диагональных элементов.
R
Масштабирование строкиМасштабирование строки, возвращенное как разреженная диагональная матрица. Диагональные элементы в R
и C
действительны и положительны.
C
Масштабирование столбцаМасштабирование столбца, возвращенное как разреженная диагональная матрица. Диагональные элементы в R
и C
действительны и положительны.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.