Résolution d'un système avec une mise à jour diagonale de petit rang

9

Supposons que j'ai le grand système linéaire clairsemé d'origine: . Maintenant, je n'ai pas A - 1 car A est trop grand pour factoriser ou toute sorte de décomposition de A , mais supposons que j'ai la solution x 0 trouvée avec une résolution itérative.Ax0=b0A1Ax0

Maintenant, je souhaite appliquer une petite mise à jour de rang à la diagonale de A (changer quelques entrées diagonales): D est une matrice diagonale avec principalement des 0 sur sa diagonale et quelques valeurs différentes de zéro. Si j'avais A - 1, je pourrais profiter de la formule de Woodbury pour appliquer une mise à jour à l'inverse. Cependant, je ne l'ai pas disponible. Y a-t-il quelque chose que je puisse faire à part simplement résoudre tout le système à nouveau? Existe-t-il un moyen de trouver un préconditionneur M qui soit facile \ plus facile à inverser, tel que M A 1(A+D)x1=b0DA1M , de sorte que tout ce que j'aurais à faire si j'ai x 0 est d'appliquer M - 1 et qu'une méthode itérative converge en quelques / quelques itérations?MA1A0x0M1

Costis
la source
Vous commencez avec un bon préconditionneur pour et vous voulez savoir comment le mettre à jour? Quel est le rang de la mise à jour? (Une mise à jour de rang 1000 est "petite" par rapport à une matrice de taille 10 9 mais pas petite en termes de nombre d'itérations.)A1000109
Jed Brown
est d'environ la taille 10 6 à 10 7 , et la mise à jour est <1000 (probablement <100) éléments. J'utilise un préconditionneur de type diagonal pour A qui fonctionne très bien, donc la mise à jour serait triviale, mais je me demandais s'il y avait mieux que je peux faire plutôt que de résoudre le nouveau système à partir de zéro. A106107
Costis
2
La solution d'un système ne vous en dit pas grand-chose. Si vous résolvez le même système plusieurs fois, la carte inverse sur ces vecteurs (et / ou les espaces Krylov associés) vous donne des informations qui peuvent être utilisées pour accélérer la convergence. Combien de systèmes résolvez-vous dans chaque cas?
Jed Brown
Actuellement , je ne fais que résous pour une RHS ( vecteur) avec chaque Une matrice avant de modifier A . bAA
Costis

Réponses:

4
  1. Enregistrez dans les colonnes de deux matrices et C tous les vecteurs b j auxquels vous avez appliqué la matrice dans les itérations précédentes et les résultats c j = A b j .BCbjcj=Abj

  2. Pour chaque nouveau système (ou A x = b , qui est le cas particulier D = 0 ), résoudre approximativement le système linéaire surdéterminé ( C + D B ) y b , par exemple , en sélectionnant un sous-ensemble des lignes (éventuellement toutes) et en utilisant une méthode dense des moindres carrés. Notez que seule la partie sélectionnée de C + D B doit être assemblée; c'est donc une opération rapide!(A+D)x=bAx=bD=0(C+DB)ybC+DB

  3. Mettez . Il s'agit d'une bonne approximation initiale avec laquelle commencer l'itération pour résoudre ( A + D ) x = b . Dans le cas où d'autres systèmes doivent être traités, utilisez les produits vectoriels matriciels dans cette nouvelle itération pour étendre les matrices B et C sur le sous-système résultant.x0=By(A+D)x=bBC

BCBBCx0B

Les lignes doivent être sélectionnées de manière à correspondre approximativement à une discrétisation grossière du problème complet. Prendre cinq fois plus de lignes que le nombre total de multiplications attendues des vecteurs matriciels devrait suffire.

BCC=ABBxxx=Byyx(C+DB)y=bx0=By=x

xBx

(k+1)k

Arnold Neumaier
la source
Merci, professeur Neumaier. Je vais essayer ça. Pourriez-vous peut-être m'expliquer brièvement comment cela fonctionne?
Costis
Ax0=b0Ax1=b1Ax2=b2
D=0
@Costis: J'ai ajouté un peu plus de détails à l'étape 2. - Si vous rédigez la demande, veuillez envoyer un préimpression à ma.
Arnold Neumaier
(C+DB)yb