вторник, 16 февраля 2010 г.

ILU предобуславливатели.

ILU = incomplete LU preconditioner (оказывается, бывают и postconditioner-ы).

Неплохая дока по предобуславливателям этого класса - здесь.

Коротко:

1. incomplete - в смысле, произведение LU приблизительно равно матрице системы A. В отличие от обычного LU разложения, где A = LU.

LU - разложение -- хорошая штука, но если матрица A - разреженная, хранится в соответствующем формате, то хотелось бы, чтоб и произведение LU было бы разреженным. Т.е., мы раскладываем A в LU и начинаем выкидывать в L и U элементы в соответствие с некоторой стратегией. Равенство A = LU становится приближенным. Самый радикальный вариант - оставлять в LU элементы только в тех позициях (i,j), для которых a_ij не равен нулю (получим ILU(0)).

2. Предобусловленная система выглядит так: U^-1 L ^-1 A x= U^-1 L ^-1 b.

3. ILU(s). s - число уровней заполнения (levels of fill). Про ILU(0) см. в п. 1. А что такое уровни заполнения? Опять обратимся к LU-факторизации. Всем позициям, в которых a_ij не равен нулю, приписывается уровень нуль. Они считаются допустимыми. Вообще, допустимыми будут позиции с уровнем не больше s. Если позиция (при LU-факторизации) порождена двумя разрешенными позициями, то ей присваивается следующий уровень.

Прочитал я об этом в начале этой статьи (pdf).

4. MILU - modified ILU. Если в ILU стараются сохранить узор (zero pattern) A, т.е. {если a_ij<>0 => LU_ij = a_ij}, то в MILU это правило для i = j заменяют таким: {rowsum(LU) = rowsum(A)}

Бррр...

Комментариев нет: