Этот пример показывает, как использовать неполную факторизацию Холесского в качестве предварительного формирователя, чтобы улучшить сходимость.
Создайте симметричную положительную определенную матрицу, 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))
, будет приблизительно нуль.