Eu tenho matrizes e . é escasso e é com muito grande (pode ser da ordem de vários milhões.) é uma matriz de altura com bastante pequeno ( ) e cada coluna pode só tem uma única entrada com o resto sendo 's, de tal modo que . é enorme, por isso é realmente difícil de inverter, e eu posso resolver um sistema linear como iterativamente usando um método de subespaço de Krylov como , mas não tenho explicitamente.
Eu quero resolver um sistema da forma: , onde e são vetores de comprimento . Uma maneira de fazer isso é usar um algoritmo iterativo dentro de um algoritmo iterativo para resolver para cada iteração do algoritmo iterativo externo. Isso seria extremamente caro computacionalmente, no entanto. Eu queria saber se existe uma maneira computacionalmente mais fácil de resolver esse problema.
Respostas:
Introduza o vetory:=−A−1Gx e resolva o sistema acoplado grande Ay+Gx=0 , GTy=−b para (y,x) simultaneamente, usando um método iterativo. Se A é simétrico (como parece provável, embora você não o indique explicitamente), o sistema é simétrico (mas indefinido, embora quase indefinido se A é definitivo positivo), o que pode ajudá-lo a escolher um método apropriado. (palavras-chave relevantes: matriz KKT, matriz quaseidefinida).
Edit: Como é simétrico complexo, o mesmo ocorre com a matriz aumentada, mas não há quasefinibilidade. No entanto, você pode usar a rotina A x para calcular A ∗ x = ¯ A ¯ x ; portanto, você pode adaptar um método como o QMR ftp://ftp.math.ucla.edu/pub/camreport/cam92-19.pdf (projetado para sistemas reais, mas você pode reescrevê-lo facilmente para sistemas complexos, usando o anexo em local da transposição) para resolver seu problema.A Ax A∗x=Ax¯¯¯¯¯¯¯¯¯¯
Edit2: Na verdade, a estrutura (0,1) de significa que você pode eliminar x e os componentes de G T y simbolicamente, terminando assim com um sistema menor para resolver. Isso significa mexer com a estrutura de A e paga apenas quando A é fornecido explicitamente em formato esparso, e não como um operador linear.G x GTy A A
fonte
Após a resposta de Arnold, há algo que você pode fazer para simplificar o problema. Reescreva especificamente o sistema como . Observe que, a partir da afirmação de que G é alto e estreito e cada linha tem apenas 1 e zeros, a instrução G T y = - b significa que um subconjunto dos elementos de y tem um valor fixo, a saber, os elementos de - b .Ay+Gx=0,GTy=−b G GTy=−b y −b
Digamos que, por simplicidade que tem m colunas e n linhas e que exatamente as primeiras m linhas têm mais neles e que seja reordenar os elementos de x que posso fazer com que G tem o m × m matriz identidade no topo e uma matriz n - m × m zero na parte inferior. Então eu posso particionar y = ( y c , y f ) em m "restrito" e n - m "livre" elementos para queG m n m x G m×m n−m×m y=(yc,yf) m n−m . Também posso particionar A para que A = ( A c c A c f A f c A f f ) . A partir da equação A y + G x = 0 , obtive o seguinte:
A c c y c + A c f y f + x = 0 ,yc=−b A A=(AccAfcAcfAff) Ay+Gx=0
e usando o que sabemos sobre y c , temos a partir da segunda dessas equações
A f f y f = A f c b
e consequentemente
x = A c c b - A c f A - 1 f f A f c b .
Em outras palavras, a única matriz que você deve inverter é o subconjunto de A
Em outras palavras, dada a estrutura de , resolvendo o sistema linear você tem não é realmente mais difícil do que a solução de um único sistema linear com A .G A
fonte
Unless I've missed something, you don't need any iteration, or any solver to calculate x givenG , A and b .
fonte