Ітеративний «вирішувач» для


9

Я не можу уявити, що я першим задумався над наступною проблемою, тому буду задоволений посиланням (але повна, детальна відповідь завжди цінується):

Скажіть, у вас є симетричний позитивний певний ΣRn×n. n вважається дуже великим, тому тримається Σв пам'яті неможливо. Однак можна оцінитиΣx, для будь-якого xRn. Враховуючи деякіxRn, ви хочете знайти xtΣ1x.

Перше рішення, яке спадає на думку, - це знайти Σ1xвикористовуючи (скажімо) сполучені градієнти. Однак це здається дещо марнотратним - ви шукаєте скаляра, і в процесі ви виявляєте гігантський векторRn. Здається, має більше сенсу придумати метод обчислення скаляра безпосередньо (тобто, не проходячи черезΣ1x). Я шукаю такий спосіб.


2
Чи виникає ваша матриця? Σ=ATA для деяких прямокутних «коротких і широких» A?
GeoMatt22

@ GeoMatt22, на жаль, ні. Але скажімо, що це так - що б ви запропонували в такому випадку?
Yair Daon

1
Яїре, я просто думав, чи є якась менша матриця, з якою можна працювати ... не впевнений, що це все одно допоможе. Ви пробували гуглінг "дистанція махаланобіса без матриці" чи подібне? Вибачте, що не допоможу більше!
GeoMatt22

Дякую @ GeoMatt22, я не зміг знайти нічого в Інтернеті.
Yair Daon

Відповіді:


2

Я не думаю, що я чув про будь-який метод, який робить те, що ви хочете, а не реально вирішувати y=Σ1x.

Єдиною альтернативою, яку я можу запропонувати, є те, якщо ви знали щось про власні вектори та значення Σ. Скажіть, ви знали, що вони єλi,vi, то ви можете представляти Σ=VTLV де стовпці V є vi, і Lє діагональною матрицею з власними значеннями по діагоналі. Отже, у вас це єΣ1=VTL1V і ти це отримуєш

xTΣ1x=xTVTL1Vx=iλi1(viTx)2.
Звичайно, це вимагає від вас збереження всіх власних значень, тобто повної матриціV. Але, якщо вам трапилось знати, що лише деякі власні значення РосіїΣ маленькі, скажімо перші m, а решта настільки велика, що можна нехтувати всіма термінами λi1 для i>m, то ви можете наблизитись
xTΣ1x=i=1nλi1(viTx)2i=1mλi1(viTx)2.
Це вимагає лише зберігання m вектори, а не всі n власних векторів.

Звичайно, на практиці часто обчислювати власні значення та власні вектори настільки ж рівномірно або складніше, порівняно з просто вирішенням y=Σ1x кілька разів.


Але тоді вам залишається завдання знайти mнайменші власні значення матриці, що непросте завдання ...
Yair Daon

Правильно. Але, можливо, варто того, якщо вам доведеться оцінитиxTΣ1xбагато разів.
Вольфганг Бангерт

Чи можете ви запропонувати метод тоді?
Yair Daon

Навколо є багато чи розріджених власних значущих рішень. ARPACK та SLEPc на основі PETSc, мабуть, найбільш широко використовуються.
Вольфганг Бангерт

Bangreth Дякую за довідку. Я перевірив SLEPc (хоча і не дуже ретельно) і, здається, спосіб пошуку власних пар здійснюється (можливо, модифікованою) ітерацією Ланцоса. Якщо хтось шукає найменшогоmeigenpairs, треба знайти і зберегти всі власні пари в пам'яті. Зазвичай це не можливо для проблем, що не мають матриць - це займає стільки пам'яті, скільки зберіганняn×nматриця. Якщо ви хочете скористатись зворотною ітерацією - жодна гарантія для порядку знайденого власного пара (-ів) не гарантується. Я щось пропускаю?
Yair Daon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.