CATEGORII DOCUMENTE |
Astronomie | Biofizica | Biologie | Botanica | Carti | Chimie | Copii |
Educatie civica | Fabule ghicitori | Fizica | Gramatica | Joc | Literatura romana | Logica |
Matematica | Poezii | Psihologie psihiatrie | Sociologie |
Un caz particular de sisteme liniare este acela in care matricea A a sistemului este simetrica si pozitiv definita (adica toti determinantii de colt sunt strict pozitivi). Pentru astfel de sisteme putem folosi un caz particular al factorizarii LU: descompunem matricea A a sistemului intr-un produs L LT , unde
(2.14)
Coeficientii λij se obtin din definitia produsului a doua matrice.
Exercitiul. Sa se rezolve sistemul:
Rezolvare
Matricea sistemului este
Se observa ca aij = aji, adica matricea A este simetrica. Deoarece
1 > 0, , ,
matricea A este pozitiv definita. Aplicand factorizarea Cholesky avem:
Folosind definitia produsului a doua matrice, obtinem:
Se observa ca pentru gasirea elementelor λij , i = , j = , este suficient sa calculam dezvoltarile corespunzatoare elementelor aij , i = , j = .
B. Rezolvarea sistemelor triunghiulare
Pentru a determina solutia sistemului initial, avem de rezolvat doua sisteme triunghiulare:
cu solutia
si
cu solutia
A. Algoritm
Date de intrare: un sistem de ecuatii
Date de iesire: solutia sistemului
Algoritm
1. generarea matricei A a sistemului (simetrica si pozitiv definita) si a vectorului b
. n = numarul de ecuatii ale sistemului (numarul de linii ale matricei A)
2. factorizarea Cholesky
λ11 = a11
pentru i =
pentru j =
,
3. rezolvarea sistemelor triunghiulare
pentru i =
,
pentru i =
.
B. Programe MAPLE si rezultate
restart : with(linalg):
desccholesky := proc (A::matrix)
local a1, n, l, i, s, j, k;
n := rowdim(A);
a1 := A;
for i from 1 to n do
for j from 1 to n do
if a1[i, j] <> a1[j, i] then
ERROR('matricea nu este simetrica!')
fi;
od;
od;
if a1[1, 1] <= 0 then
ERROR('factorizarea Cholesky nu este aplicabila!');
fi;
for i from n by -1 to 2 do
if det (a1) > 0 then a1 := delrows (delcols (a1, i .. i), i .. i);
else ERROR ('factorizarea Cholesky nu este aplicabila!');
fi;
od;
l := matrix (n, n, 0);
l[1, 1] := A[1, 1];
for i from 2 to n do
for j from 1 to i-1 do
l[i, j] := 1/l[j, j]*(A[i, j] - sum (l[i, k]*l[j, k], k = 1 .. j-1));
od;
l[i, i] := sqrt (A[i, i] - sum(l[i, k]^2, k = 1 .. i - 1));
od;
RETURN(evalm(l));
end:
# returnarea necunoscutelor sistemului in ordinea in care apar in ecuatii
nedeterminate := proc (l::list(equation))
local n, i, j, ops, opst;
n := nops(l);
for i from 1 to n do
ops[i] := [seq (op (op (l[i])[1])[j]/coeff (op (l[i])[1], op (indets (op (op (l[i])[1])[j]))),
j = 1 .. nops (op(l[i])[1]))];
od;
opst := ops[1];
for i from 1 to n do
for j from 1 to nops (ops[i]) do
if not (ops[i][j] in opst) then
opst := [op (opst), ops[i][j]]
fi;
od;
od;
RETURN(opst);
end:
choleskysist := proc (l::list (equation))
local lst, eqm, A, b, n, lu, L, U, i, s, j, aux, rez, rfin;
lst := nedeterminate(l);
eqm := genmatrix (l, lst, flag);
n := nops (lst);
A := delcols (eqm, n+1 .. n+1);
b := col (eqm, n+1);
lu := desccholesky(A);
L := lu;
U := transpose (lu);
for i from 1 to n do
s := 0;
for j from 1 to i-1 do
s := s + L[i, j]*aux[j]
od;
aux[i] := 1/L[i, i]*(b[i] - s)
od;
for i from n by -1 to 1 do
s := 0;
for j from i+1 to n do
s := s + U[i, j]*rez[j]
od;
rez[i] := 1/U[i, i]*(aux[i] - s)
od;
RETURN (seq (lst[i] = rez[i], i = 1 .. n));
end:
debug(choleskysist):
choleskysist ([x + 2*y + z = 5, 2*x + 5*y + 2*z = 11, x + 2*y + 3*z = 7]);
x = 2, y = 1, z = 1
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 4247
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved