В этом примере показано, как использовать неполную факторизацию Холесского в качестве предварительного формирователя, чтобы улучшить сходимость.
Создайте симметричную положительную определенную матрицу, A
.
Создайте неполную факторизацию Холесского как предварительный формирователь для pcg
. Используйте постоянный вектор в качестве правой стороны. Как базовая линия, выполните pcg
без предварительного формирователя.
Обратите внимание на то, что fl0 = 1
указание, что pcg
не управлял относительной невязкой к требуемому допуску в максимальных позволенных итерациях. Попробуйте неполную факторизацию Холесского без заливок как предварительный формирователь.
fl1 = 0
, указание, что pcg
сходившийся к требуемому допуску и сделал так в 59 итерациях (значение it1
). Поскольку этой матрицей является дискретизированный Лапласиан, однако, использование изменило неполный Холесский, может создать лучший предварительный формирователь. Модифицированная неполная факторизация Холесского создает аппроксимированную факторизацию, которая сохраняет действие оператора на постоянном векторе. Таким образом, norm(A*e-L*(L'*e))
будет приблизительно нуль для e = ones(size(A,2),1)
даже при том, что norm(A-L*L','fro')/norm(A,'fro')
не близко к нулю. Не необходимо задать тип для этого синтаксиса начиная с nofill
значение по умолчанию, но это - хорошая практика.
pcg
сходится (fl2 = 0
) но только в 38 итерациях. Графический вывод всех трех историй сходимости показывает сходимость.
График показывает, что модифицированный неполный предварительный формирователь Холесского создает намного более быструю сходимость.
Можно также попробовать неполные факторизации Холесского пороговым отбрасыванием. Следующий график показывает сходимость pcg
с предварительными формирователями, созданными с различными допусками отбрасывания.
L3 = ichol(A, struct('type','ict','droptol',1e-1));
[x3,fl3,rr3,it3,rv3] = pcg(A,b,tol,maxit,L3,L3');
L4 = ichol(A, struct('type','ict','droptol',1e-2));
[x4,fl4,rr4,it4,rv4] = pcg(A,b,tol,maxit,L4,L4');
L5 = ichol(A, struct('type','ict','droptol',1e-3));
[x5,fl5,rr5,it5,rv5] = pcg(A,b,tol,maxit,L5,L5');
figure
semilogy(0:maxit,rv0./norm(b),'b-','linewidth',2);
hold on
semilogy(0:it3,rv3./norm(b),'b-.','linewidth',2);
semilogy(0:it4,rv4./norm(b),'b--','linewidth',2);
semilogy(0:it5,rv5./norm(b),'b:','linewidth',2);
legend('No Preconditioner','ICT(1e-1)','ICT(1e-2)', ...
'ICT(1e-3)','Location','SouthEast');
Отметьте неполный предварительный формирователь Холесского, созданный с допуском отбрасывания 1e-2
обозначается как ICT(1e-2)
.
Как с заполнением нулями неполного Холесского, пороговая факторизация отбрасывания может извлечь выгоду из модификации (т.е. opts.michol = 'on'
) поскольку матрица является результатом эллиптического дифференциального уравнения с частными производными. Как с MIC(0)
, модифицированный пороговый понижающийся неполный Холесский сохранит действие предварительного формирователя на постоянных векторах, который является norm(A*e-L*(L'*e))
будет приблизительно нуль.