Матрица, масштабирующаяся для улучшенного создания условий
Уравновесьте матрицу большим числом обусловленности, чтобы повысить эффективность и устойчивость решения для линейной системы с итеративным решателем 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
.
Когда A
разреженно, выходные параметры P
R
, и C
также разреженны.
Типы данных: single
| double
Поддержка комплексного числа: Да
P
— Матрица перестановокМатрица перестановок, возвращенная как матрица. P*A
сочетание A
это максимизирует абсолютное значение продукта его диагональных элементов.
R
— Масштабирование строкиМасштабирование строки, возвращенное как диагональная матрица. Диагональные элементы в R
и C
действительны и положительны.
C
— Масштабирование столбцаМасштабирование столбца, возвращенное как диагональная матрица. Диагональные элементы в R
и C
действительны и положительны.
[1] Подновите, я. S. и Дж. Костер. “На Алгоритмах Для Перестановки Больших Записей в Диагональ Разреженной матрицы”. SIAM Journal на Анализе матрицы и Приложения 22, № 4 (январь 2001): 973–96.
backgroundPool
или ускорьте код с Parallel Computing Toolbox™ ThreadPool
.Эта функция полностью поддерживает основанные на потоке среды. Для получения дополнительной информации смотрите функции MATLAB Запуска в Основанной на потоке Среде.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.