Діагональне оновлення симетричної позитивної визначеної матриці


19

- n × n симетрична позитивна певна (SPD) розріджена матриця. G - розріджена діагональна матриця. n велике ( n > 10000), а кількість ненулів у G зазвичай становить 100 ~ 1000.Ан×нГннГ

Були розкладено в Холецького формівигляді L D L T .АLDLТ

Як ефективно оновлювати і D, коли A стає A + G ?LDАА+Г


Чи має G лише позитивні елементи? Якщо так, то ось тривіальна верхня межа: переглянути оновлення діагоналі як суму оновлень першого рангу. Існують методи O (n ^ 2) для обчислення LDL ^ t факторизації оновлення першої позиції (пошук у Google пропонує приклади). Тоді ваше діагональне оновлення запуститься в O (rn ^ 2), де r - кількість ненульових елементів діагоналі G. Враховуючи специфіку цих оновлень, є ярлики для збереження деяких обчислень, але незрозуміло, чи можливо це зменшити порядок нижче O (rn ^ 2).

3
Я погоджуюсь - я не вірю, що немає ніякого способу зробити діагональне оновлення факторизації Чолеського швидше, ніж просто повторити факторизацію, але ранжирування одного оновлення можна зробити за час, і вам доведеться робити лише по одному для кожного відмінний від нуля на діагоналі G . О(м2)Г
Брайан Борчерс

10
Для і п п г ( G ) в сотні, це буде важко перевершити рефакторінга А . Якщо розмір A стане набагато більшим, а G дуже рідким, це може окупитися. У будь-якому випадку, можливі оновлення та наближення висвітлюються в глибині Чи може діагональ плюс фіксовані симетричні лінійні системи вирішуватись у квадратичному часі після попереднього обчислення? . н104ннz(Г)ААГ
Джед Браун

5
Джед, я думаю, ти повинен просувати свій коментар до відповіді тут.
Майкл Грант

Відповіді:


3

Остання версія пакету CHOLMOD SuiteSparse (бета-версія 4.4.5) підтримує зміну симетричного рядка / стовпця (оновлення rank2) для розкладання LDLТ , використовуючи API matlab (і C). Я успішно використовував це в одному зі своїх проектів.

Ви можете використовувати його для того, щоб робити ннz(Г) оновлення факторизації. Він заснований на цій роботі.

Тому складність буде О(ннz(Г)ннz(L)) . Де ннz(L) може бути значно зменшено при використанні наповнення, що зменшує перестановку для розрідженого А

Пакет можна завантажити тут

Нижче наведено кілька записок, які дав власник пакету (професор Тім Девіс):

API:

LD = ldlrowmod (LD, k) видаляє рядок / стовпець k, встановлюючи A (:, k) та A (k, :) до k-го рядка / стовпчика ідентичності.

LD = ldlrowmod (LD, k, C) замінює k-й рядок / стовпчик A (який повинен бути k-м рядком / стовпчиком тотожності) на рідкий стовпчик C.

Складність:

О(ннz(L))ннz(L)О(н)О(н)

Заповніть зменшення перестановки:

LDLТLDLТПАПТL

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.