Розв’язування


22

У мене є матриці A і G . A є рідким і n×n з дуже великими (може бути порядком декількох мільйонів.) - матриця висоту з досить невеликою ( 1 \ lt m \ lt 1000 ), і кожен стовпець може лише є один 1 запис з іншим 0 «S, такими , що G ^ ТГ = I . A величезна, тому її реально важко перетворити, і я можу вирішити лінійну систему, таку як Ax = b, ітеративно, використовуючи метод підпростору Крилова, такий як \ mathrm {BiCGStab} (l)G n × m m 1 < m < 1000 1 0 G T G = I A A x = b B i C G S t a b ( l ) A - 1nGn×mm1<m<100010GTG=IAAx=bBiCGStab(l), але явно не маю .A1

Я хочу вирішити систему вигляду: , де і - вектори довжини . Один із способів зробити це - використовувати ітеративний алгоритм в рамках ітеративного алгоритму для вирішення для кожної ітерації зовнішнього ітераційного алгоритму. Однак це було б надзвичайно обчислювально дорого. Мені було цікаво, чи існує обчислювально простіший спосіб вирішити цю проблему.x b m A - 1(GTA1G)x=bxbmA1


Я щойно додав до своєї відповіді зауваження щодо експлуатації структури 0-1.
Арнольд Ноймаєр

Відповіді:


19

Введіть вектор і велику зв'язану систему , для одночасно, використовуючи ітераційний метод. Якщо симетричний (як здається, ймовірно, хоча ви не вказуєте це явно), то система симетрична (але невизначена, хоча квазідефінітна, якщо є позитивно визначеною), що може допомогти вам вибрати відповідний метод. (відповідні ключові слова: матриця KKT, квазідефінітна матриця).A y + G x = 0 G T y = - b ( y , x ) A Ay:=A1GxAy+Gx=0GTy=b(y,x)AA

Редагувати: Оскільки є складно симетричним, так є і доповнена матриця, але немає квазидефінітету. Однак ви можете використовувати процедуру для обчислення ; тому ви можете адаптувати такий метод, як QMR ftp://ftp.math.ucla.edu/pub/camreport/cam92-19.pdf (призначений для реальних систем, але ви можете легко переписати його для складних систем, використовуючи суміжну в місце транспонування) для вирішення вашої проблеми.A x A x = ¯ A ¯ xAAxAx=Ax¯¯

Edit2: Власне, (0,1) -структура означає, що ви можете усунути amd компоненти символічно, тим самим закінчившись меншою системою для вирішення. Це означає возитися зі структурою , і платить лише тоді, коли задається явно у розрідженому форматі, а не як лінійний оператор.x G T y A AGxGTyAA


Дякую! А - складна симетрична. Чи є причина очікувати, що стан доповненої матриці буде гіршим, ніж у вихідній матриці ? Якщо m невеликий, розширена матриця має лише незначні розміри за розміром, ніж A, тож я б підозрював, що розв’язання цієї доповненої системи ітеративно не повинно бути набагато складніше, ніж рішення системи з A? A
Кості

Кількість умов обох систем, як правило, досить непов'язане; це дуже сильно залежить від того, що є. - Я додав у свою відповідь інформацію про те, як використовувати складну симетрію. G
Арнольд Ноймаєр

Привіт, народ! Дякую за всі відповіді; це місце чудове! Розширення до початкового запитання: Припустимо, що у мене є , де G і A мають те саме значення, що і в оригінальному питанні, але B - a ранг з дефіцитною матрицею nxn (того ж розміру, що і A), і вся повна ранг. Як би ви йти про рішення нової системи, так як тепер зворотний B не існує , так що ви не можете мати . Я не думаю, що це буде просто працювати з псевдоінверсом B. (ГТА-НБА-1Г)х=бГТА-НБА-1ГAB1AH
Кості

1
Введіть і і продовжуйте аналогічно розробленому випадку. (Можливо, вам також потрібно розподілити коефіцієнт на матриці повного рангу та ввести додатковий проміжний вектор.)y:=A1Gxz:=AHByB
Арнольд Ноймаєр

Привіт Арнольде. Дякую, це справді працює! Я перевірив це на дуже маленьких прикладах тестування, і він чудово працює. Однак у мого ітеративного вирішувача виникають величезні проблеми з інвертуванням доповненої матриці. Хоча для вирішення системи вигляду з початковою матрицею A потрібно лише близько 80 ітерацій (кілька секунд) , система з розширеною матрицею (що становить 2n + mx 2n + m або 2n-mx 2n-m використання підходу @ wolfgang-bangerth) займає десятки тисяч ітерацій (кілька годин), щоб вирішити для одного РЗС. Чи є якісь стратегії для прискорення конвергенції? можливо, попередній кондиціонер? Ax=b
Кості

7

Після відповіді Арнольда ви можете щось зробити, щоб спростити проблему. Зокрема, перепишіть систему як . Потім зауважте, що із твердження, що G високий і вузький, і кожен рядок має лише один 1 і нулі в іншому випадку, тоді вислів G T y = - b означає, що підмножина елементів y має фіксоване значення, а саме елементи - б .Ay+Gx=0,GTy=bGGTy=byb

Скажімо, що для простоти у є m стовпців і n рядків, і що саме перші m рядків мають в них такі, що перепорядковують елементи x, я можу зробити так, що G має матрицю тотожності m × m у верхній частині і n - m × m нульової матриці внизу. Тоді я можу розділити y = ( y c , y f ) на m "обмежені" і n - m "вільні" елементи, так щоGmnmxGm×mnm×my=(yc,yf)mnm . Я також можу розділити A так, що A = ( A c c A c f A f c A f f ) . З рівняння A y + G x = 0 я отримую наступне: A c c y c + A c f y f + x = 0 ,yc=bAA=(AccAcfAfcAff)Ay+Gx=0 і використовуючи те, що ми знаємо про y c, ми маємо з другого з цих рівнянь A f f y f = A f c b і, отже, x = A c c b - A c f A - 1 f f A f c b . Іншими словами, єдина матриця, яку потрібно інвертувати, - це підмножина A

Accyc+Acfyf+x=0,Afcyc+Affyf=0
yc
Affyf=Afcb
x=AccbAcfAff1Afcb.
Aрядки та стовпці яких не згадуються в (нульовий простір G ). Це ви можете легко зробити: (i) обчислити z = A f c b ; (ii) використовуйте будь-який вирішувач, який у вас є, щоб вирішити A f f h = z ; (iii) обчислити x = A c c b - A c f h .GGz=AfcbAffh=zx=AccbAcfh

Іншими словами, з огляду на структуру , рішення лінійної системи у вас є насправді не складніше , ніж рішення одного лінійної системи з А .GA


0

Але ми знаємо , G T і A , такGGTA

GTA1Gx=b

GGTA1Gx=Gb

Оскільки , то G T = G - 1 , тому G G T = I :GTG=IGT=G1GGT=I

A1Gx=Gb

AA1Gx=AGb

Gx=AGb

GTGx=GTAGb

x=GTAGb

Якщо я щось не пропустив, для обчислення x, заданих , A і b , вам не потрібна ані ітерація, ані який-небудь розв'язувач .GAb


3
ГТГГ=е1ГТ=е1ТГГТ=е1е1ТЯ

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