Projet calcul num

Disponible uniquement sur Etudier
  • Pages : 8 (1883 mots )
  • Téléchargement(s) : 0
  • Publié le : 14 novembre 2011
Lire le document complet
Aperçu du document
INTRODUCTION

Cahier des charges:

On nous demande, à travers ce projet, de résoudre un système linéaire comportant plusieurs seconds membres, en utilisant la méthode de Householder.

La méthode de Householder est une méthode de résolution directe , c’est-à-dire qu’elle se termine en un nombre fini d’étapes.

Définitions :

( On appelle matrice élémentaire de Householder, une matriceH de la forme :
H=Im-2u u^t avec u un vecteur de norme 1.

( Une matrice de Householder se présente également sous la forme :
H(v)= I – (2 (vv*) / (v*v)) avec v= a +- ||a||2 e1

(Toute matrice élémentaire de Householder est symétrique et orthogonale.

( La méthode de Householder pour le résolution d’un système linéaire à un second membre ( Ax=b) équivaut à trouver (n-1) matrices deHouseholder H1,H2,….,Hn-1 telles que la matrice
Hn-1*Hn-2*….*H2*H1*A soit triangulaire supérieure.
Il reste ensuite à résoudre le nouveau système :

Hn-1*…H2*H1*A*x = Hn-1*….H2*H1*b

Chaque matrice Ak = Hk-1*….*H2*H1*A se présente sous la forme:

X X X X X X
X X X X X
X X X X
Ak= X X X
(0) X X
X

Ce système est plus simple à résoudre. En effet, on peututiliser la méthode de la remontée (résoudre « en cascade »).

Plusieurs seconds membres (explications détaillées après le code Fortran) :

Un système linaire avec plusieurs seconds membres se présente sous la forme suivante (exemple avec 3seconds membres)

Ax1x2x3 = b1b2b3

La méthode de résolution de ce système est similaire à celle pour un système linéaire à un seul second membre.
Lesétapes restent les mêmes, seuls les calculs sont plus longs.
On peut rassembler les valeurs des différents vecteurs xi dans une matrice X=(x1,x2,x3…,xn) et les vecteurs bi dans une matrice B=(b1,b2,b3,…,bn) .

Ce qui change vraiment, c’est que l’on applique la méthode de Householder à chaque colonne de la matrice B (second membre). On aura donc une boucle qui parcourra toutes les colonnes dusecond membre.

Analyse :

Dans notre, nous utiliserons la formule de H(v) sous la forme suivante :

H(v)c= c – (2 (v*c) / (v*v))v

avec c pour colonne de matrice A ou B

De plus, (2(v*c)/(v*v)) ( Z dans le code fortran

CODE FORTRAN

PROGRAM HOUSEHOLDER
INTEGER Ligne, Colonne, Etape, N, M, PAS, T, O, COL, VAL, LI,
&NL, NC
REAL*8 A(1000,1000), B(1000,1000),V(1000), X(1000,1000), Z ,
&Znom , Zden , Xnom, Norm

C Initialisation des constantes
PAS=1

C Lecture du fichier matriceA.txt
OPEN(UNIT=1, FILE='matriceA.txt',STATUS='OLD')
READ(1,*) N
DO Ligne=1, N*N, PAS
READ(1,*) LI, COL, VAL
A(LI, COL)=VAL
END DO

C Affichage de la matrice A
WRITE(*,*) 'Affichage de laMatrice A'
DO O=1,N,PAS
WRITE(*,*) (A(O,T), T=1, N)
END DO

C Lecture du fichier matriceB.txt
OPEN(UNIT=2, FILE='matriceB.txt',STATUS='OLD')
READ(2,*) NL , NC
DO Ligne=1, NL*NC
READ(2,*) LI, COL, VAL
B(LI, COL)=VAL
END DO

C Affichage de la matrice B
WRITE(*,*) 'Affichage de la Matrice B'
DO O=1,N,PASWRITE(*,*) (B(O,T), T=1, M)
END DO

C Méthode Householder
DO Etape=1,N-1,PAS
WRITE(*,*) ''
WRITE(*,*) 'Etape de la méthode d Householder',Etape
WRITE(*,*) ''

C Norm de a(Etape)
Norm=0
do Ligne=Etape,N,PAS
Norm=Norm + A(Ligne,Etape)*A(Ligne,Etape)
end do
Norm = dsqrt(Norm)IF(A(Etape,Etape).ge.0) THEN
V(Etape)=A(Etape,Etape) + Norm
ELSE
V(Etape)=A(Etape,Etape) - Norm
END IF
DO Ligne=Etape+1,N,PAS
V(Ligne)=A(Ligne,Etape)
END DO

C Calcul de V*V
Zden=0
DO Ligne=Etape,N,PAS
Zden=V(Ligne)*V(Ligne) + Zden
END DO

DO Colonne=Etape,N,PAS
C...
tracking img