J'ai des matrices et . est clairsemé et est avec très grand (peut être de l'ordre de plusieurs millions.) est une matrice haut avec plutôt petit ( ) et chaque colonne peut seulement un seul entrée avec le reste étant « s, de telle sorte que . est énorme, il est donc très difficile à inverser, et je peux résoudre un système linéaire tel que manière itérative en utilisant une méthode de sous-espace de Krylov telle que , mais je n'ai pas explicitement.
Je veux résoudre un système de la forme: , où et sont des vecteurs de longueur . Une façon de le faire est d'utiliser un algorithme itératif dans un algorithme itératif pour résoudre pour chaque itération de l'algorithme itératif externe. Ce serait cependant extrêmement coûteux en calcul. Je me demandais s'il y avait un moyen plus simple sur le plan informatique de résoudre ce problème.
Réponses:
Introduisez le vecteur et résolvez le grand système couplé A y + G x = 0 , G T y = - b pour ( y , x ) simultanément, en utilisant une méthode itérative. Si A est symétrique (comme il semble probable que vous ne le déclariez pas explicitement), alors le système est symétrique (mais indéfini, bien que quasi-défini si Ay:=−A−1Gx Ay+Gx=0 GTy=−b (y,x) A A est définie positive), ce qui pourrait vous aider à choisir une méthode appropriée. (mots clés pertinents: matrice KKT, matrice quasi-définie).
Edit: Comme est symétrique complexe, la matrice augmentée l'est aussi, mais il n'y a pas de quasi-infinité. Vous pouvez cependant utiliser la routine A x pour calculer A ∗ x = ¯ A ¯ x ; vous pouvez donc adapter une méthode telle que QMR ftp://ftp.math.ucla.edu/pub/camreport/cam92-19.pdf (conçue pour les systèmes réels, mais vous pouvez facilement la réécrire pour les systèmes complexes, en utilisant l'adjoint dans lieu de la transposition) pour résoudre votre problème.A Ax A∗x=Ax¯¯¯¯¯¯¯¯¯¯
Edit2: En fait, la structure (0,1) de signifie que vous pouvez éliminer x et les composants de G T y symboliquement, se retrouvant ainsi avec un système plus petit à résoudre. Cela signifie jouer avec la structure de A , et ne paie que lorsque A est donné explicitement dans un format clairsemé plutôt que comme un opérateur linéaire.G x GTy A A
la source
Après la réponse d'Arnold, vous pouvez faire quelque chose pour simplifier le problème. Plus précisément, réécrivez le système sous la forme . Notez ensuite que d'après l'énoncé que G est grand et étroit et que chaque ligne n'a qu'un 1 et des zéros sinon, l'énoncé G T y = - b signifie qu'un sous-ensemble des éléments de y a une valeur fixe, à savoir les éléments de - b .Ay+Gx=0,GTy=−b G GTy=−b y −b
Disons que pour simplifier que a m colonnes et n lignes et qu'exactement les m premières lignes en contiennent et que réorganiser les éléments de x je puisse faire en sorte que G ait la matrice d'identité m × m en haut et une matrice n - m × m zéro en bas. Ensuite, je peux partitionner y = ( y c , y f ) en m éléments "contraints" et n - m "libres" afin queG m n m x G m×m n−m×m y=(yc,yf) m n−m . Je peux également partitionner A pour que A = ( A c c A c f A f c A f f ) . De l'équation A y + G x = 0, j'obtiens alors:
A c c y c + A c f y f + x = 0 ,yc=−b A A=(AccAfcAcfAff) Ay+Gx=0
et en utilisant ce que nous savons sur y c, nous avons de la seconde de ces équations
A f f y f = A f c b
et par conséquent
x = A c c b - A c f A - 1 f f A f c b .
En d'autres termes, la seule matrice que vous devez inverser est le sous-ensemble de A
En d' autres termes, étant donné la structure de , la résolution du système linéaire que vous avez est vraiment pas plus difficile que la résolution d' un seul système linéaire avec A .G A
la source
Mais nous connaissons , G T et A , doncG GT A
Puisque , alors G T = G - 1 , donc G G T = I :GTG=I GT=G−1 GGT=I
Sauf si j'ai raté quelque chose, vous n'avez besoin d'aucune itération, ni d'aucun solveur pour calculer x étant donné , A et b .G A b
la source