Résolution numérique d'un système d'équations linéaires

En utilisant la méthode de la factorisation QR

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je cherche à résoudre le système d’équations linéaires suivant :

Ax2=b2\mathrm{Ax_2 = b_2}

A\mathrm{A} est une matrice (6, 4) et b2\mathrm{b_2} une matrice colonne, définies plus bas.

L’idée est de résoudre le système après avoir substitué la matrice A par sa factorisation QR réduite.
Or, en utilisant cette démarche, le résultat x2\mathrm{x_2} obtenu ne semble pas être la bonne solution, comme montré ici.


On est en analyse numérique, je peux comprendre une petite erreur sur le résultat de x2\mathrm{x_2}.
Mais ici, c’est carrément faux, le résidu Ax2b2\mathrm{Ax_2 - b_2} n’est pas du tout proche de zéro !

Comment l’expliquer ?

Les codes

A\mathrm A est la matrice (6, 4) obtenue avec les instructions :
A = round(inv(hilb(6))); A=A(:,1:4);

Et b2\mathrm{b_2} est la matrice colonne obtenue avec :
b2 = [1 1 1 1 1 1]';

Copier-coller des commandes introduites avec Octave
>> A = round(inv(hilb(6))); A=A(:,1:4);
>> b2 = [1 1 1 1 1 1]';
>>
>> [Q R] = qr(A, 0);
>> x2 = R\(Q'*b2);
>>
>> % En principe, matriciellement : Ax2 = b2
>> res = Ax2;
error: 'Ax2' undefined near line 2 column 7
>> res = A*x2;
>>
>> res
res =

   0.040504
  -0.040458
  -0.046672
  -0.021222
   0.017307
   0.060394

>> % On remarque que res est tres different de b2 !
>>
>> b2 - A*x2
ans =

   0.95950
   1.04046
   1.04667
   1.02122
   0.98269
   0.93961

>>

Ton système linéaire est sur-détérminé, et n’admet pas forcément de solution (tu as plus de contraintes que de degrés de liberté). Une des choses que tu peux faire pour approcher sa «résolution», c’est résoudre un problème aux moindres carrés, c’est à dire minimiser la norme du résidu Ax2b2Ax_2 - b_2. C’est en pratique ce que tu fais ici en passant par la factorisation QR (le même résultat est aussi donné plus explicitement par x2:=(AA)1Ab2x_2 := (A^\intercal A)^{-1}A^\intercal b_2 ; tu peux voir ici pour un peu plus d’informations). Le fait que tu ne trouves pas le vecteur nul pour le résidu signifie simplement que ton système n’admet pas de solution ; je ne pense pas que les erreurs numériques soient très significatives pour un système de cette taille là. ^^

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte