Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AstronomieBiofizicaBiologieBotanicaCartiChimieCopii
Educatie civicaFabule ghicitoriFizicaGramaticaJocLiteratura romanaLogica
MatematicaPoeziiPsihologie psihiatrieSociologie


Factorizarea Householder

Matematica



+ Font mai mare | - Font mai mic



Factorizarea Householder

Breviar teoretic



Factorizarea Householder este o metoda de rezolvare numerica a sistemelor de tip Cramer simetrice, si consta in determinarea unei matrice simetrice nesingulare U , astfel incat UAU = T sa fie o matrice tridiagonala. Atunci solutia sistemului Ax = b este data de

x = Uy (2.15)

unde y este solutia sistemului

T y = Ub (2.16)

Factorizarea Householder se bazeaza pe urmatoarele rezultate.

Propozitia 1. Oricare ar fi A o matrice patratica de ordinul n si si-metrica, exista un vector v = (v1, v2, . . . , vn)T astfel incat vectorul coloana a1 = Ae1, e1 = (1, 0, . . . , 0)T (a1 este prima coloana a matricei A) are proprietatea

(2.17)

Pentru evitarea ambiguitatilor vom considera vectorul v dat de:

v = a1 + sign (a11) ||a1|| e1. (2.18)

Propozitia 2. Oricare ar fi matricea simetrica A, matricea P definita prin:

(2.19)

este simetrica si are proprietatea ca elementele 2, 3, . . . , n de pe prima coloana a matricei P A sunt nule, unde vectorul v este dat de relatia (2.18).

Definitia 1. Se numeste matrice Householder de ordin n−1 asociata matricei A si se noteaza cu Pn−1 o matrice de ordin n − 1 de forma:

unde: v = a1n−1 + sign(a21) ||a1n−1|| e1 este vectorul format cu componentele vectorului a1 care este prima coloana a matricei A, e1= ()T si I n −1 este matricea unitate de ordin n − 1.

Propozitia 3. Matricea Hauseholder Pn − 1 asociata unei matrice simetrice A este simetrica si are proprietatea ca matricea U1 definita prin:

(2.21)

este simetrica si verifica relatia:

(2.22)

Se considera vectorul coloana a2n−2 cu ultimele n − 2 elemente ale coloanei matrice A(1). Cu acest vector se construieste o matrice Householder de ordinul n − 2, Pn−2. Matricea U2 definita prin:

(2.23)

are proprietatea:

(2.24)

Matricea Pn−2 a condus la obtinerea unei noi linii si coloane a matricei tridiagonale la care vrem sa reducem matricea A.

Continuand astfel prin n −1 transformari, obtinem egalitatea: UAU = T in care T este matrice tridiagonala.

2 Problema rezolvata

Exercitiul. Sa se rezolve urmatorul sistem folosind factorizarea Householder:

Rezolvare

Sistemul se poate scrie sub forma Ax = b, unde:

si

Se observa ca matricea A este simetrica, deci factorizarea Householder este aplicabila.

Generarea matricei U

Calculam elementele vectorului

v = a1 + sign (a111) ||a1|| e1.

unde a1 = (2, 1)T , si e1 = (1, 0)T. De aici rezulta v = (0, 2 + )T si . Elementele matricei U sunt date de:

Dupa efectuarea calculelor, obtinem:

si ,

Solutia sistemului tridiagonal

T y = Ub

este

iar solutia sistemului initial este

, adica

Implementare

A. Algoritm

Date de intrare: un sistem de ecuatii

Date de iesire: solutia sistemului, obtinuta folosind factorizarea Householder

Algoritmul consta din urmatoarele etape:

generarea matricei tridiagonale pentru i = 1 . . . n − 2

pentru l = 1 . . . n

pentru m = 1 . . . n

daca m = l atunci uml = 1

daca ml atunci uml = 0

//Generam vectorul v

, ei

pentru j = i + 2 . . . n

ej

pentru j = i + 1 . . . n

vj = aij + sign(ai,i+1) norm a ej

//Generam matricea U

j = i +1 n

k = i + 1 n

ujk = ujk − 2 vj vk / norm v // D=AU

m = 1 n

l = 1 n

//A=UD=UAU

m = 1 n

l = 1 n

2. rezolvarea sistemului tridiagonal: Ty = Ub

3. gasirea solutiei sistemului initial: x = Uy

B. Programe MAPLE si rezultate

Observatie. Deoarece o conditie necesara pentru aplicarea factorizarii Householder este ca sistemul sa fie simetric, folosim procedura nedeterminate. De asemenea, pentru descompunerea matricei tridiagonale, am folosit procedura tridiagonal

householder := proc (l::list(equation))

local opst, eqm, A, b, n, i, ii, j, U, UD, e, v, norma, normv, k, lu, LL, UU, aux, rez;

n := nops(l);

opst := nedeterminate(l);

eqm := genmatrix(l, opst, flag);

A := delcols (eqm, n+1 .. n+1);

b := col (eqm, n+1);

for i from 1 to n do

for j from 1 to n do

if A[i, j] <> A[j, i] then

ERROR ('sistemul nu este simetric!');

fi;

od;

od;

rez := vector (n, 0);

UD := matrix(n, n, 0);

for ii from 1 to n do

UD[ii, ii] := 1;

od;

for i from 1 to n - 2 do

U := matrix (n, n, 0);

for ii from 1 to n do

U[ii, ii] := 1;

od;

e := vector (n, 0);

v := vector (n, 0);

norma := simplify (sqrt (sum (A[i, k1]^2, k1 = i+1 .. n)));

e[i + 1] := 1;

for j from i+1 to n do

v[j] := A[i, j] + signum (A[i, i+1])*norma*e[j]

od;

normv := simplify (sum (v[k1]^2, k1 = i+1 .. n));

for j from i + 1 to n do

for k from i +1 to n do

U[j,k] := simplify (U[j, k] - 2*v[j]*v[k]/normv);

od;

od;

evalm(U);

A := simplify (multiply (U, multiply (A,U)));

b := simplify (multiply (U, b));

UD := multiply (UD, U);

od;

lu := tridiagonal (A);

LL := simplify (lu[1]);

UU := simplify (lu[2]);

aux[1] := simplify (b[1]/LL[1,1]);

for i from 2 to n do

aux[i] := simplify (1/LL[i, i]*(b[i] - LL[i, i-1]*aux[i-1]))

od;

rez[n] := aux[n];

for i from n-1 by -1 to 1 do

rez[i] := simplify (aux[i] - UU[i, i+1]*rez[i+1]);

od;

rez := simplify (multiply (UD, rez));

RETURN (seq (opst[i] = rez[i], i = 1 .. n));

end:

debug (householder):

householder ([x-y+2*z+2*t=0, -x + y + 3*z = -1, 2*x + 3*y - z + 2*t = 2, 2*x + 2*z = 1]);

Pentru comparatie, am rezolvat acelasi sistem folosind procedura solve:

> solve (, );



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1683
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved