У меня есть матрицы A и G . A является разреженным и имеет размер n × n с очень большим n (может быть порядка нескольких миллионов). G является матрицей высотой n × m с довольно небольшим m ( 1 < m < 1000 ), и в каждом столбце может быть только один 1 запись с остальным 0 «с, таким образом, что G T G = Я . А огромен, так что это действительно трудно инвертировать, и я могу решить линейную систему, такую как х
Я хочу решить систему вида: ( G T A - 1 G ) x = b , где x и b - векторы длины m . Один из способов сделать это - использовать итерационный алгоритм в итерационном алгоритме, чтобы найти для A - 1 для каждой итерации внешнего итерационного алгоритма. Это было бы чрезвычайно дорого в вычислительном отношении, однако. Мне было интересно, есть ли в вычислительном отношении более простой способ решения этой проблемы.
Ответы:
Введем вектор y : = - A - 1 G x и решим большую связанную систему A y + G x = 0 , G T y = - b для ( y , x ) одновременно, используя итерационный метод. Если A симметричен (как представляется вероятным, хотя вы не указали это явно), то система является симметричной (но неопределенной, хотя и квазиопределенной, если Ay:=−A−1Gx Ay+Gx=0 GTy=−b (y,x) A A положительно определен), что может помочь вам выбрать подходящий метод. (релевантные ключевые слова: матрица ККТ, квазиопределенная матрица).
Редактировать: Как A является сложной симметричной, так и расширенная матрица, но нет квазиопределенности. Однако вы можете использовать й подпрограмму для вычисления А * х = ¯ ¯ х ; поэтому вы можете адаптировать метод, такой как QMR, ftp://ftp.math.ucla.edu/pub/camreport/cam92-19.pdf (разработанный для реальных систем, но вы можете легко переписать его для сложных систем, используя сопряженный в место транспонирования), чтобы решить вашу проблему.A Ax A∗x=Ax¯¯¯¯¯¯¯¯¯¯
Edit2: На самом деле, (0,1) -структура G означает, что вы можете удалить x amd и компоненты G T y символически, таким образом получая меньшую систему для решения. Это значит возиться со структурой A и оплачивать только тогда, когда A задано явно в разреженном формате, а не как линейный оператор.G x GTy A A
источник
Following Arnold's reply, there is something you can do to simplify the problem. Specifically, rewrite the system as Ay+Gx=0,GTy=−bAy+Gx=0,GTy=−b . Then note that from the statement that GG is tall and narrow and each row has only one 1 and zeros otherwise, then the statement GTy=−bGTy=−b means that a subset of the elements of yy have a fixed value, namely the elements of −b−b .
Let us say that for simplicity that GG has mm columns and nn rows and that exactly the first mm rows have ones in them and that be reordering the elements of xx I can make it so that GG has the m×mm×m identity matrix at the top and a n−m×mn−m×m zero matrix at the bottom. Then
I can partition y=(yc,yf)y=(yc,yf) into mm "constrained" and n−mn−m "free" elements so that yc=−byc=−b . I can also partition AA so that A=(AccAcfAfcAff)A=(AccAfcAcfAff) . From the equation Ay+Gx=0Ay+Gx=0 I then get the following:
Accyc+Acfyf+x=0,Afcyc+Affyf=0
In other words, given the structure of GG , solving the linear system you have is really not more difficult than solving a single linear system with AA .
источник
But we know GG , GTGT and AA , so
GTA−1Gx=bGTA−1Gx=b
GGTA−1Gx=GbGGTA−1Gx=Gb
Since GTG=IGTG=I , then GT=G−1GT=G−1 , so GGT=IGGT=I :
A−1Gx=GbA−1Gx=Gb
AA−1Gx=AGbAA−1Gx=AGb
Gx=AGbGx=AGb
GTGx=GTAGbGTGx=GTAGb
x=GTAGbx=GTAGb
Unless I've missed something, you don't need any iteration, or any solver to calculate x given GG , AA and bb .
источник