Recent Changes - Search:

CV

Optimization

Musique

Judo

PmWiki

edit SideBar

ShermanWoodburyMorrison

On cherche à utiliser l'expression suivante pour calculer une matrice inverse:

(A + U.C.V)^-1 = A^-1 - A^-1.U.(C^-1 + V.A^-1.U)^-1.V.A^-1

Le problème: comment choisir U, V et C.

Prenons un exemple:

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]; B = [1 2 3 4; 6 7 8 9; 9 10 11 12; 15 16 17 18];

On cherche à calculer B^-1 en connaissant A^-1:

U.C.V devra être égale à B - A = [0 0 0 0; 1 1 1 1; 0 0 0 0; 2 2 2 2];

Le choix que l'on effectue pour U, C et V sera le suivant:

  • C: on choisit cette matrice égale à la matrice identité. La taille de cette matrice: le nombre de lignes non nulles de la matrice B - A.
  • V: on choisit de stocker dans cette matrice les lignes non nulles de la matrice B - A
  • U: on met une:
- ligne de 0 dans la ligne i si la ligne i correspondante de la matrice B - A contient une ligne de 0
- ligne de 0 dans la ligne i et un 1 dans la colonne j pour mettre la jieme ligne de la matrice V dans la matrice B - A.

Appliquons ces règles à notre matrice B - A. Notre matrice a 2 lignes non nulles. C sera une matrice identité carrée de dimension 2 (c'est notre choix).

La matrice V sera la suivante:

V = [1 1 1 1; 2 2 2 2];

La matrice U sera la suivante:

U = [0 0; 1 0; 0 0; 0 1];

Calculons maintenant le produit U.C.V:

U.C.V = [0 0; 1 0; 0 0; 0 1] . [1 0; 0 1] . [1 1 1 1; 2 2 2 2]; U.C.V = [0 0; 1 0; 0 0; 0 1] . [1 1 1 1; 2 2 2 2]; U.C.V = [0 0 0 0; 1 1 1 1; 0 0 0 0; 2 2 2 2];

On ajoute A:

A + U.C.V = [1 2 3 4; 6 7 8 9; 9 10 11 12; 15 16 17 18] == B

Quelques détails concernant le calcule de la formule de Woodbury:

(A + U.C.V)^-1 = A^-1 - A^-1.U.(C^-1 + V.A^-1.U)^-1.V.A^-1

On connait A^-1. On va stocker V.A^-1 dans la variable temporaire tmp:

tmp = V.A^-1;

La formule simplifiée s'écrit:

B^-1 = (A + U.C.V)^-1 = A^-1 - A^-1.U.(C^-1 + tmp.U)^-1.tmp;

On ajoute quelques parenthèses pour s'assurer de l'ordre des opérations matricielles:

B^-1 = (A + U.C.V)^-1 = A^-1 - (A^-1.U).((C^-1 + tmp.U)^-1.tmp);


This page may have a more recent version on pmwiki.org: PmWiki:ShermanWoodburyMorrison, and a talk page: PmWiki:ShermanWoodburyMorrison-Talk.

Edit - History - Print - Recent Changes - Search
Page last modified on April 14, 2009, at 09:36 AM