Sunteți pe pagina 1din 124

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA DE STAT DIN TIRASPOL


FACULTATEA FIZIC, MATEMATIC I TEHNOLOGII INFORMAIONALE
CATEDRA ALGEBR, GEOMETRIE I TOPOLOGIE

Domeniul general de studiu:


tiine ale Educaiei
Specialitatea:
Matematic i informatic

TEZ DE LICEN

Tema:

APLICAREA METODELOR NUMERICE LA REZOLVAREA


SISTEMELOR DE ECUAII LINIARE

Autor:
studentul ciclului I, Andrian Dascal
Conductor tiinific:
Aliona Gurdi, dr. conf. univ.
Andrei Braicov, dr. conf. univ.

Chiinu 2016

C U P R I N S:
INTRODUCERE

pag.
3

Capitolul I:
ASPECTE METODICE PRIVIND PREDAREA METODELOR NUMERICE
1.1 Introducere

1.2 Metodica elaborrii programelor

1.3 Creativitatea. Cunoaterea i dezvoltarea ei

10

1.4 Asigurarea caracterului interdisciplinar

13

1.5 Obiectivele instruirii disciplinei informatica

15

Capitolul II:
METODE DE REZOLVARE A SISTEMELOR DE ECUAII LINIARE
2.1 Noiuni fundamentale

19

2.2 Metode exacte directe


2.2.1 Metoda matriceal

25

2.2.2 Metoda lui Cramer

30

2.2.3 Metoda lui Gauss clasic

37

2.2.4 Factorizarea LU

41

2.2.5 Factorizarea Cholesky

46

2.3 Metode exacte indirecte


2.3.1 Metoda lui Jacobi

48

2.3.2 Metoda Gauss-Seidel

50

2.3.3 Metoda relaxrii

54

Capitolul III:
APLICAII UTILIZND LIMBAJUL PASCAL I BORLAND DELPHI 7.0
3.1 Metode exacte directe (Pascal)

56

3.2 Metode exacte indirecte (Pascal)

71

3.3 Aplicaii utiliznd softul Borland Delphi 7.0

73

CONCLUZII

74

BIBLIOGRAFIE

76

ANEXE

78-122
2

Introducere
Analiza numeric are o istorie lung i bogat: Arhimede, Newton, Gauss, etc. avnd contribuii
semnificative n acest domeniu. Calculul numeric reprezint din cele mai vechi timpuri o metod de
lucru important n matematic. Necesitatea aplicrii n practic a rezultatelor teoretice obinute la
un moment dat a artat c de multe ori metodele numerice sunt singurele care pot scoate din impas
o metod care teoretic este calculatorie, dar posibilitatea de a ajunge la un rezultat exact este
imposibil.
Metodele numerice moderne sunt caracterizate de sinergia dintre calculatoarele electronice
programabile, analiza matematic, precum i opurtunitatea i necesitatea de a rezolva probleme
complexe din diverse domenii, cum ar fi spre exemplu: inginerie, medicin, economie, tiine
fizico-matematice etc. Creterea utilizrii metodelor numerice a fost cauzat nu numai de creterea
performanelor calculatoarelor, dar i de mbuntirea algoritmilor.
Metodele numerice reprezint tehnici prin care problemele matematice sunt reformulate astfel
nct s fie rezolvate numai prin operaii aritmetice. Prin trecerea de la infinit la finit, diferenial la
algebric, neliniar la liniar .a.m.d. Problemele complicate sunt nlocuite de probleme mai simple
care au aceeai sau aproape aceeai soluie. Astfel soluiile obinute prin aplicarea metodelor
numerice reprezint doar aproximaii ale soluiilor problemelor originale, i deci implic careva
mici erori. Metodele numerice reprezint n prezent un domeniu destul de complex, fiind un
domeniu att teoretic, ct i practic.
Necesitatea implementrii unor algoritmi care conduc la rezolvarea sistemelor de ecuaii liniare
inclusiv la inversri de matrice au artat c este mai util s se foloseasc metodele numerice chiar i
atunci cnd exist soluii exacte furnizate de teorie. Se pot inversa matrici destul de mari, n
aplicaiile curente fiind mai util folosirea metodelor numerice i asta din dou motive importante:
1) implementarea unui algoritm numeric cere un efort de programare incomparabil, mai mic dect
construirea unei aplicaii n care sunt listate metodele standard de rezolvare exact. Un algoritm
numeric se reduce de cele mai multe ori la un efort de programare. Este adevrat c exist algoritmi
de calcul numeric care necesit cunotine mai aprofundate, dar exist un corp destul de important
de metode numerice foarte uor de programat.
2) multe tehnici matematice sunt mai util de programat prin calcule aproximative dect prin soluii
exacte. n memoria unui calculator, oricum valorile tuturor variabilelor sunt reinute prin
aproximaii ale lor, iar algoritmii pot produce aproximaii comparabile cu cele ale posibilitilor
calculatorului, moment din care nu mai prezint importan metoda folosit. n plus, unele din
metodele exacte pot degenera n memoria unui calculator n situaii care devin imposibil de stpnit.
3

Este cunoscut situaia n care ncercnd o soluie exact pentru un sistem de ecuaii cu patru sau
cinci ecuaii, metoda formulelor lui Cramer d numere care depesc orice posibilitate de
reprezentare n memorie.
Capitolele de algebr liniar sunt considerate de profesori i n general de elevi, ca unele mai
uor de nsuit i care nu creaz probleme deosebite n aplicaii. De fapt algebra liniar este mai
uor de nsuit din cauz c noiunile care trebuie nsuite par la prima vedere destul de simple i
pentru c are o anumit unitate de coninut i de idei matematice de la capitol la capitol, ceea ce
face ca trecerile de la o noiune la alta s se fac mai lin. Noile noiuni fiind de obicei construite pe
baza celor anterioare mai bine ca la alte capitole, dar nu de puine ori se constat c multe noiuni
sunt reinute mecanic. Elevii se bazeaz mult pe regulile mnemonice (de memorie) pe care
profesorii le ofer spre uurarea calculelor i care bineneles c sunt foarte utile atta timp ct nu i
mpiedic pe elevi s-i formeze pe ct posibil i imagini intuitive ale celor nvate.
Metodele numerice devin la acest capitol utile din dou puncte de vedere:
- ca metode n sine, de implementat pe calculator, care aa cum am spus sunt foarte indicate pentru
elevii care peste civa ani vor lucra efectiv pe calculator;
- ca posibilitate de a oferi o imagine ct de ct intuitiv a ceea ce se ntmpl n interiorul unui
algoritm n timp ce acesta lucreaz pentru o problem destul de banal cum ar fi inversarea unei
matrici sau rezolvarea unui sistem liniar. Acest lucru este deosebit de important avnd n vedere c
deseori suntem tentai cu toii, nu numai elevii, s reinem un algoritm aa cum a fost dat fr a intra
n prea multe detalii s le zicem intime ale metodei.
Scopul lucrrii: Lucrarea de fa i propune s prezinte cteva modaliti de mbuntire a
predrii unor metode de calcul matriceal insistnd pe aspectele metodice, dar i s contribuie la
sporirea interesului viitorilor informaticeni, matematiceni... n formarea unei gndiri algoritmice i
logico-matematice. Prin problematica abordat, lucrarea de fa reprezint modul de aplicare a
metodelor numerice la rezolvarea sistemelor de ecuaii liniare. Elaborarea programelor ntr-un
limbaj de programare bine cunoscut ( Pascal ), care implementeaz metodele de rezolvare a
sistemelor de ecuaii liniare i elaborarea unor aplicaii n mediul Borland Delphi 7.0, confer un
studiu mai complex lucrrii date.
Structura lucrrii: Teza de licen Aplicarea metodelor numerice la rezolvarea sistemelor de
ecuaii liniare, este constituit astfel: Introducere; Capitolul I Aspecte metodice privind predarea
metodelor numerice; Capitolul II Metode de rezolvare a sistemelor de ecuaii liniare;
Capitolul III Aplicaii utiliznd limbajul Pascal i Borland Delphi 7.0; Concluzii; Bibliografie i
Anexe.

Capitolul I conine cinci pri: Introducere; Metodica elaborrii programelor (Etapele necesare
rezolvrii unei probleme cu calculatorul; Cerine metodologice necesare realizrii programelor
informatice educaionale; Metodica realizrii programelor); Dezvoltarea creativitii prin
informatic; Asigurarea caracterului interdisciplinar; Obiectivele instruirii disciplinei informatica.
Capitolul II conine trei pri: Noiuni fundamentale; Metode exacte directe (metoda matriceal,
metoda lui Cramer, metoda lui Gauss, Factorizarea LU, Factorizarea Cholesky) i Metode exacte
indirecte (metoda Gauss-Seidel, metoda lui Jacobi, metoda relaxrii). Metodele sunt nsoite de
algoritmi de rezolvare i de 2 3 exemple concrete rezolvate conform fiecrei metode aparte.
Capitolul III conine trei pri: Metode directe (calculare determinant, metoda lui Cramer,
metoda lui Gauss, Factorizarea LU, Factorizarea QR); Metode indirecte (metoda Gauss-Seidel,
metoda lui Jacobi, metoda relaxrii) i Aplicaii utiliznd softul Embarcadero Delphi 7.0 (metoda
Gauss, metoda Cramer, factorizarea LU, etc.). Capitolul dat este dedicat elaborrii programelor n
Pascal, Aplicaiile n mediul Delphi 7.0, sunt prezentate n anexe (Anexele 3 5)
La finele lucrrii sunt prezentate Concluziile i Lista bibliografic pentru fiecare capitol aparte.
n Anexe sunt prezentate pe scurt contribuiile unor personaliti marcante care au fost reamintii n
aceast lucrare (Anexa 1), rezultatele pentru programele Pascal (Anexa 2), aplicaii n mediul
Borland Delphi 7.0 (Anexa 3), rezultatele finale n urma execuiei aplicaiilor n Embarcadero
Delphi 7.0 (Anexa 4) i Unit-ul UMnsistem care permite rezolvarea sistemelor de ecuaii liniare
liniare prin metode numerice, utiliznd mediul Embarcadero Delphi 7.0 (Anexa 5)
Lucrarea dat este destinat elevilor, studenilor i tuturor celor interesai de programare sau
algebr liniar, tuturor celor ce doresc s devin informaticeni i matematiceni cu iniiativ,
prosperi i cu realizrii frumoase n domeniu.

Capitolul I:
ASPECTE METODICE PRIVIND
PREDAREA METODELOR NUMERICE DE
CALCUL MATRICIAL

1.1 Introducere
Arta predrii este un meteug cu nenumrate artificii. Fiecare profesor ar trebui s in cont de
cteva "reguli de aur":
calea cea mai bun de a nva ceva este de a descoperi singur;
pune-te n locul elevilor;
ghicete dificultile lor;
transmite-le nu doar informaii ci i obinuina unei munci metodice;
f-i s "ghiceasc" dar i s demonstreze;
nu dezvlui dintr-o dat tot ci determin-i s descopere singuri ct mai mult posibil.
Ca i alte discipline, informatica are o contribuie mare la aspectul formativ, stimulnd subiectul s
participe la observaie, comparaie, clasificare, inducie, deducie, algoritmizare, obinuina de a nu
gndi prin fragmente i nelegerea faptului c orice fragment este parte dintr-un ntreg. Formarea
fiecrei noiuni necesit parcurgerea etapelor de elaborare, motivaie, formarea propriu-zis a
noiunii i de consolidare prin aplicarea noiunii respective.
O noiune poate fi considerat asimilat dac ea devine i instrument de dobndire a altor
cunotine i dac elevii pot opera cu aceast noiune n situaii noi. Este foarte important ca n
mintea elevilor s existe o ordonare a noiunilor, o corelare a acestora, o motivaie a nvrii
acestora (pentru c numai pe cunotine bine asimilate se pot aeza cunotine noi). De asemenea, ei
trebuie s neleag faptul c toate noiunile noi introduse i au locul lor precis n realiti fizice.
Pentru dezvoltarea gndirii logice la elevi, este necesar ca ei:
s-i nsueasc ct mai bine cunotinele teoretice i practice prevzute n program;
s opereze fr greutate cu conceptele asimilate n vederea unor noi descoperiri;
s stabileasc algoritmi de rezolvare a diferitelor tipuri de probleme;
s aplice algoritmul corect n cazul unei probleme noi;
6

s transpun algoritmul n limbajul de programare studiat;


s poat gsi cea mai rapid i cea mai potrivit metod de rezolvare a unei probleme sau a
unei situaii date.
Cnd elevilor li se prezint diferite metode de calcul numeric matriceal, ei sunt deja familiarizai cu
noiunile de matrice, determinant, invers i chiar cu cteva proprieti ale acestora. Procedurile de
triangularizare i factorizare sunt studiate n scopul aplicrii lor n rezolvarea sistemelor de ecuaii
liniare, calculul determinanilor i inversarea matricelor.
Calculatorul se poate folosi, n general, ca auxiliar al procesului de nvmnt, la toate
disciplinele colare care solicit tehnica de calcul sau de reprezentare. nvarea cu calculatorul are
un demers activ, sprijinit pe caracterul interactiv al dialogului om-main. Calculatorul permite o
mai bun intuire a fenomenului studiat, pe baza repetrii acestuia pn la nelegerea deplin.
Calculatorul poate fi folosit pentru simularea unor experiene dificile sau imposibil de realizat n
laboratoarele clasice. Spre exemplu, exist programe care simuleaz micarea corpurilor n spaiu,
pe baza legii atraciei universale, programe pentru studiul legilor dinamicii, a legilor lui Kepler, a
legilor frecrii, a micrii browniene, a micrii electronilor etc. n astfel de situaii, folosirea
graficii permite vizualizarea fenomenelor fizice i observarea acestora n micare. Folosirea
calculatorului i a tehnicii de animaie este de mare efect pedagogic n studiul transformrilor, al
deplasrilor, n studiul locurilor geomerice i al seciunii corpurilor geometrice.
Necesitatea realizrii algoritmului i programului de rezolvare a problemei studiate solicit
cunoaterea aproape perfect a teoriei. Conceptul de nvare i aplicare capt, n acest context, o
noua calitate cu accent pe activitatea formativ, participativ i anticipativ a elevului. Folosirea
calculatorului permite o dilatare a sferei de cuprindere a fenomenului studiat, i n acelai timp, o
comprimare a timpului folosit pentru studiu. Informatica i calculatorul dezvolt spiritul algoritmic,
programatic, operaional i organizatoric, rigoare n raionament i exprimare precis, caracterul
intensiv al muncii i spiritul aplicativ. Calculatorul ca mijloc de nvmnt, permite o nou form
de prezentare a leciilor, ilustrarea lor practic i integrarea cu cercetarea.
Programarea este dispunerea cronologic a unor micri, operaii, aciuni sau activiti astfel
nct n finalul perioadei s se realizeze o stare posibil a unui sistem.
Programarea este cunoscut ca activitate uman dar semnalmente pot exista forme de programare
naturale, fr intervenia omului cum sunt dispunerile proceselor genetice sau comportamentele
dirijate instinctual la animale. Programarea informatic este o activitate de elaborare a produselor
program,

programelor (software) necesare activitilor realizate cu ajutorul calculatorului.

Programarea

informatic

conine

urmtoarele

subactiviti:

specificarea,

proiectarea,

implementarea, documentarea i ntreinerea produsului program. [1]


7

1.2 Metodica elaborrii programelor


1.2.1 Etapele necesare rezolvrii unei probleme cu calculatorul
n rezolvarea unei probleme cu calculatorul este necesar parcurgerea urmtoarelor etape:
Enunarea problemei, evideniind ceea ce se d i ceea ce se cere.
Analizarea problemei cu scopul de a decide dac este rezolvabil cu calculatorulul. n
aceast etap se studiaz suficiena datelor, alegerea sau gsirea unei metode eficiente
pentru obinerea soluiei, alegerea unui limbaj de programare convenabil.
Elaborarea unui algoritm de rezolvare a problemei, a crui structur trebuie s fie n strns
legatur cu modul de funcionare a calculatorului.
Scrierea programului de rezolvare a problemei n limbajul de programare ales. Programul
prezint descrierea algoritmului ntr-un limbaj de programare. El const dintr-o succesiune
de instruciuni care indic calculatorului ce operaii trebuie s realizeze, n ce ordine i
asupra cror date.
Testarea i verificarea programului n vederea nlturrii eventualelor erori de sintax sau la
execuie.
1.2.2 Cerine metodologice necesare realizrii programelor informatice educaionale
Pentru realizarea unui program bun trebuie respectate urmtoarele cerine obligatorii:
Orice program bun trebuie bine fundamentat teoretic i pedagogic, s aib un titlu care s
semnifice semantic coninutul su i s fie uor manevrabil n procesul de nvare sau de
predare.
S se indice disciplina creia i aparine programul, instituia, autorul i data realizrii i
validrii sale ca program didactic.
Realizarea unui program bun este, n general, rodul unei munci de echip: profesori,
informaticieni, ingineri, psihologi, pedagogi, sociologi etc. Nu este lipsit de importan dac
la realizarea programului particip i elevi, deoarece lor li se adreseaz acest program.
Programul trebuie realizat n ideea unei interfee prietenoase, care s solicite atenia i
concentrarea ntr-o ambian optimist, de mobilizare la lucru. Pe ct posibil este mai bine
ca programul s aib un puternic caracter interactiv, conversaional, s permit funcia de
help a calculatorului, atunci cnd este cazul i s realizeze corect aprecierea prin
calificative a celui ce nva.

Cuprinsul unei teme poate ncepe cu o pagin de opiuni (meniu) n care s fie date:
instruciuni de utilizare a programului, comenzi necesare n exploatarea programului,
posibilitatea ntreruperii i realizrii sale n timp, date de intrare i funcii utilizate, precum i
posibilitatea revenirii n pagina de opiuni.
Organizarea prezentrii noiunilor nu trebuie s oboseasc pe utilizator. Pentru aceasta se
folosesc cu succes: sunetul, imaginea, culoarea i animaia.
1.2.3 Metodica realizrii programelor
Noiunea de date semnific totalitatea valorilor numerice care pot participa la execuia unui
program. Exist date de intrare, date de ieire i date de lucru.n calculator datele sunt memorate
codificat, n spaii de memorie numite locaii.
Variabila este o cantitate care poate lua mai multe valori pe parcursul execuiei unui program i
creia i este ataat un nume simbolic. Unei variabile simple i este ataat o singur locaie de
memorie. Numele unei variabile poate fi format din mai multe litere i cifre primul caracter fiind
obligatoriu o liter. Constantele sunt valori fixe care nu se modific pe parcursul execuiei unui
program. Cu ajutorul variabilelor i al constantelor se pot alctui expresii aritmetice, folosind
operaii de adunare, scdere, nmulire, mprire, ridicare la putere etc. De asemenea se pot alctui
i expresii logice, acestea coninnd expresii aritmetice, constante i variabile logice, operatori
logici.
Prin operaia de citire, datele sunt transferate de pe mediul extern n locaiile rezervate de
memorie prin intermediul dispozitivelor periferice de intrare: tastatura, unitatea de floppy disk,
scanner-ul. Prin operaia de scriere datele (rezultate) sunt preluate din locaiile de memorie i afiate
pe mediul extern prin intermediul dispozitivelor periferice de ieire: monitorul (display-ul),
imprimanta, unitatea de floppy disk.
Trebuie postulat ideea c n munca cu elevii subiectele care solicit alctuirea de programe
trebuie mai nti discutate cu acetia, stabilindu-se, pe cale oral, demersurile necesare realizrii
acestora. n acest mod, elevii se vor obinui s aprofundeze subiectul cercetat, s gndeasc
algoritmul problemei i s-i elaboreze prin studiu propriu programul pentru calculator.
nainte de a trece la elaborarea programului, elevii trebuie s cunoasc formulele matematice
necesare rezolvrii problemei. De asemenea, elevii trebuie s tie c exist mai multe variante de
rezolvare a unei probleme cu ajutorul calculatorului i s fie capabili s gseasc varianta optim,
algoritmul cel mai simplu, clar i concis.
Programele corespunztoare fiecrei metode descrise au fost rulate pe exemplele care se
regsesc i n prezentarea metodelor numerice de calcul matriceal. La realizarea lor s-a ncercat
9

gsirea unor soluii care s necesite un timp de rezolvare ct mai scurt prin reducerea numrului de
operaii efectuate de calculator i o ocupare eficient a memoriei prin folosirea a unui numr ct mai
mic de variabile prin realizarea calculelor n locaii de memorie deja utilizate. [4]

1.3 Creativitatea. Cunoaterea i dezvoltarea ei


Creativitatea este o capacitate complex i fundamental a personalitii, care, sprijinind-se pe
date sau produse anterioare, n mbinarea cu investigaii i date noi, produce ceva nou, original, de
valoare i eficien tiinific i social-util, ca rezultat al influenelor i relaiilor factorilor
subiectivi i obiectivi - adic a posibilitilor (i calitilor) persoanei i a condiiilor ambientale, ale
mediului socio-cultural.
Ea poate fi considerat i ca aptitudine, dispoziie a intelectului de a elabora idei, teorii, modele
noi, originale. Gndirea este procesul cognitiv cel mai important, fiind apreciat ndeosebi prin
creativitate. "Gndirea, ca o capacitate de prim ordin a personalitii - exist ca gndire uman
numai prin creativitate" (I. Kant).
Activitatea de rezolvare si compunere a problemelor ofer terenul cel mai fertil din domeniul
activitilor matematice pentru cultivarea si educarea creativitii si a inventivitii. Progresul
omenirii nu este posibil fr activitatea creatoare, teoretic sau practic a oamenilor. Capacitatea de
a fi creativ este esenial pentru supraveuire.
Elementele eseniale prin care se poate constata existena creativitii sunt: flexibilitatea;
noutatea i originalitatea; fluena, senzitivitatea (sensibilitatea senzorial) i ingeniozitatea. n afar
de faptul c este o capacitate i aptitudine (dispoziie) a personalitii, a intelectului este, n acelai
timp, un produs i un proces. Este un produs pentru c se dobndete ca abilitate de a realiza ceva
nou (idee, teorie, model, metod, tehnologie etc.) prin activitate, prin experien, necesitnd foarte
mult munc. Edison spunea c m creaie este nevoie de 99% transpiraie i 1% inspiraie. Este
totodat i un proces, fiindc necesit evoluie n timp, dezvoltri i, uneori, retrageri a factorilor i
elementelor noi, necesit nvingerea unor obstacole etc.
. considera c creativitatea gndirii e legat de 4 particulariti care domin:

Originalitatea, lucruri netriviale, necesitatea expunerii ideilor, o tendin extrem de


puternic spre nouti intelectuale. Omul creativ aproape ntotdeauna i pretutindeni
avnd eul su, a gsit o rezolvare distinct de altele.

Capacitatea de a vedea obiectul prin prisma viziunii noi, depistarea aplicrii noi,
lrgirea aplicaiilor funcionale n practic.
10

Capacitatea de a schimba viziunea asupra obiectului n aa mod, de a-l vedea nou,


prile ascunse de observare.

apacitatea de a produce variate idei n situaii nedeterminate, n particular ntr-aa,


care nu conine repere spre aceste idei.

Mai apoi au fost i alte tentative de a da o definiie a gndirii critice, ns ele au adus practic
nimic nou sau prea puin n cele expuse de . .
Aa cum arat publicaiile de specialitate, gndirea este un fenomen psihic legat de aciune i
derivat din aciune. Astfel, rspunznd unor trebuine, aciunea se ntlnete cu situaii incerte, cnd
este nevoie de reflectare i de cercetare a realitii n vederea reducerii riscului i a incertului.
Gndirea intervine atunci cnd apar dificulti n activiti, cnd apar probleme. Problema creaz
situaia fa de care numrul de reacii de care dispune subiectul se relev insuficient sau neadecvat.
Etimologic, pro-ballein nseamn s i se pun n fa o barier, un obstacol: prin extensie, ceea
ce conine o dificultate teoretic sau practic a crei nlturare este pus sub semnul ntrebrii.
Deoarece dificultatea se prezint ca o lacun a cunoaterii, ea nu const dintr-o singur ntrebare, ci
dintr-o necunoscut, astfel nct problema const ntr-un sistem de ntrebri asupra unei
necunoscute.
Problemele apar atunci cnd ateptrile noastre au fost nelate, cnd teoriile noastre conduc la
dificulti, la contradicii, iar acestea pot surveni nuntrul unei teorii, ntre dou teorii diferite sau
ca urmare a ciocnirii dintre teoriile i observaiile noastre. Problema este aceea care ne provoac s
nvm, s mpingem mai departe cunoaterea, s experimentm i s observm.
Se spune c o ntrebare devine problem atunci cnd genereaz o stare psihic de curiozitate, de
nedumerire, de uimire sau incertitudine, de nelinite n faa unui obstacol ce trebuie nvins, a unor
dificulti teoretice sau practice de depit, de rezolvat n faa noutii, a necunoscutului.
n adevratul ei sens, o situaie-problem are un caracter de ipotez, iar rezolvarea ei, n sine,
este tocmai drumul contient strbtut de la elaborarea ipotezei la verificarea i adaptarea ei.
O mare descoperire tiinific sau o mare oper de art este, desigur, rezultatul unei activiti de
elaborare i rezolvare de probleme. Soluia la o problem i vine gnditorului n mod frecvent sub
forma unei sclipiri de intuiie, dei, poate un timp, el a ntors problema pe toate feele. Actele
creatoare se bazeaz pe un volum mare de cunotine nsuite anterior. Orice descoperire presupune
un salt inductiv, o combinare a ideilor din sisteme de cunotine diferite, o folosire ndrznea a
analogiilor, presupune un mare volum de deprinderi intelectuale, capaciti ce nu pot fi dobndite
dect prin elaborri i rezolvri de probleme ct mai variate.
Distincia ntre creativitate i inteligen (dup M. Wallach, N. Kogan)
Caracteristicile psihologice ale copiilor in de patru grupe :
11

I.

Creativitate puternic - inteligen puternic: aceti copii dau dovad att de

autocontrol ct i de libertate.
II. Creativitate puternic - inteligen slab: astfel de copii snt ntr-un conflict cu ei nii
i cu mediul colar. Ei ncearc un sentiment de inferioritate i de inadaptare. Totui, ntr-un context
destins, facultile lor cognitive se pot dezvolta liber.
III. Creativitate slab - inteligen puternic: asemenea copii au o reuit colar nalt. Un
eec n acest domeniu le-ar prea catastrofal; ei trebuie s caute permanent i activ succesul, pentru
a evita orice posibilitate de suferin.
IV. Creativitate slab - inteligen slab: profund perturbai, aceti copii ncearc diverse
manevre defensive, de la o adaptare pozitiv pn la regresie.
Rezolvnd un mare numr de probleme n condiii relativ constante, gndirea ajunge la structuri
rigide i are posibilitatea de a opera numai n cadrul limitat al acestor condiii. Dac aplicaiile se
extind la operaii n condiii variate, gndirea dobndete mai mult suplee i capacitate de
adaptare.
Lrgirea domeniului de aplicabilitate formeaz capaciti cum ar fi:
capacitatea de transfer;
capacitatea de a deriva idei noi dintr-o idee principal;
capacitatea de a explica i interpreta fenomenele noi prin prisma noiunilor nvate;
capacitatea de a concretiza ideile i de a le raporta la cazuri particulare sau generale.
ntr-un cuvnt se dezvolt nsuirile fundamentale ale creativitii, adic flexibilitatea gndirii.
Gndirea creatoare este, dup cum afirma G. Polya, aceea care creaz, elaboreaz mijloace
(procedee, metode) pentru rezolvarea unor tipuri de probleme. Cu ct numrul i varietatea
problemelor la care pot fi aplicate mijloacele nou create sunt mai mari, cu att creativitatea este mai
mare.
Gndirea creatoare particip la elaborarea instrumentelor de cunoatere, a mijloacelor de
rezolvare a problemelor teoretice i practice, n timp ce gndirea productiv se folosete de aceste
mijloace n funcionalitatea ei. Cnd vorbim de creativitate n procesul de nvare trebuie s ne
gndim la crearea propriului sistem de cunotine ntr-un domeniu.
Cultivarea creativitii presupune lupta cu stereotipurile. Problemele pe care le rezolv elevii
trebuie s fie diverse ca mod de prezentare, dar ncadrabile n algoritmi de rezolvare de anumite
tipuri. n faa oricrei probleme, elevul trebuie pus n situaia de a gndi ca n faa unei probleme noi
i numai dup acest act de gndire (cunoaterea, eventual recunoaterea problemei pe baza
elementelor eseniale) se poate trece la ncadrarea problemei individuale n categoria sau tipul de
probleme cruia i aparine.
12

Un rol deosebit de important n activitatea pedagogic o are problema dezvoltrii capacitilor


creatoare ale elevilor. Creativitatea gndirii, micarea ei liber se poate dezvolta doar pe baza unor
deprinderi corect formate. Predarea i nvarea creativ este, n general, neglijat n procesul
nvmntului de baz. Cadrele didactice activeaz n circumstane variate, au elevi cu diverse
tipuri de inteligen i niveluri de pregtire teoretic, de aceea le revine un rol important n sporirea
capacitii creative a acestora.
Pentru a forma la elevi o gndire creatoare, ei trebuie pui n situaii variate, mereu noi. n acest
scop se folosesc o mulime de procedee: dezvoltarea i complementarea treptat a unei probleme
cunoscute, rezolvarea problemei prin mai multe procedee (metode) i alegerea celei mai
economicoase,

reformularea problemei prin

introducerea necunoscutei drept

cunoscut.

Important este gradul de independen ce se acord elevilor i rezolvarea problemei ca o activitate


unitar care conduce la gndirea creatoare concentrat. Din ansamblul elementelor sale specifice,
informatica opereaz cu un subset de categorii i concepte aplicabile cercetrii pedagogice. Nu toate
laturile pedagogiei pot fi gndite strict cibernetic fr a fora interpretarea unora dintre ele.
Pedagogia cibernetic i orienteaz cercetrile spre determinarea modurilor de aplicare a structurii,
modelrii, algoritmizrii i programrii n domeniul instruciei i educaiei.
Un salt calitativ adus n planul instruirii de ctre pedagogia cibernetic l constituie
respectndu-se cerinele unei baze de principii psihopedagogice riguros organizate contientizarea
subiectului, corelarea mai profund ntre ce are de nvat acesta i cum anume s nvee. Se poate
vorbi din acest moment de o individualizare a actului educaional, ceea ce reprezint, n definitiv,
problema fundamental a oricrei tehnologii de instruire.
Unealta direct a pedagogiei cibernetice o constituie instruirea programat ca form de
organizare a procesului de nvare, n care subiectul se pregtete independent, parcurgnd ntr-un
ritm propriu i n mod activ o program. Programa cuprinde materia de nvat i prevede
modalitile explicite de nsuire a ei, organizate ntr-o form specific, urmnd cerinele logicii,
psihologiei, pedagogiei i ciberneticii. [5]

1.4 Asigurarea caracterului interdisciplinar


Conceptul de asistare cu calculatorul a procesului de nvmnt const n utilizarea
calculatorului n una sau mai multe din situaiile urmtoare:
Predarea unei lecii, a unui grup de lecii sau prezentarea unei secvene dintr-o lecie n
scopul optimizrii procesului argumentrii, al evidenierii micrii cu ajutorul desenului de
13

animaie, al obinerii imediate a unor rezultate sau efecte ateptate, al accelerrii procesului
nvrii i al dezvoltrii spiritului aplicativ.
Verificarea cu calculatorul a unei lecii sau a unor secvene din lecie, a unui capitol, a unei
discipline de nvmnt sau chiar a unei programe colare n cazul examenelor.
nvarea cu calculatorul pe baza unor programe informatice educaionale adecvate,
efectuarea unor exerciii pentru a nva anumite operaii sau pentru a forma anumite
deprinderi.
Dezvoltarea i accelerarea muncii de creaie folosind informatica i calculatorul.
O mare parte din programele didactice sunt prevzute cu exerciii de control, rspunsurile fiind
uneori alese dintr-o list de variante afiate pe display. n cazul unor rspunsuri eronate, cel ce
nva este dirijat printr-un sistem de help-uri, s reia studiul prin explicaii mai detaliate ale
problemelor.
Pentru cei mai muli, calculatorul n nvmnt i educaie nseamn ns activitatea individual a
unui elev care asist i completeaz pentru un timp dat activitatea profesorului.
Dezvoltarea deosebit n domeniul instruirii asistate de calculator implic utilizarea calculatorului
ntr-o mare varietate de moduri noi, dintre care putem enumera:
procesor de texte pentru pregtirea rapoartelor, proiectelor sau materialelor didactice;
sistem de nmagazinare i gestiune a datelor;
sistem multimedia pentru prelucrarea de text, imagini, grafice, sunet;
instrument-asistent pentru o gam larg de activiti: calcule tiinifice, analiza statistic,
prelucrare de tabele, proiectare automat etc.;
instrument pentru comunicarea i informarea la distan prin reeaua mondial Web;
instrument pentru nvarea la distan utiliznd noi sisteme de operare i noi pachete de
programe;
sistem pentru conducerea activitilor experimentale sau pentru simularea unor experiene i
legi ale naturii foarte greu sau imposibil de reprodus n laboratorul colii.
Toate acestea sunt argumente care pledeaz att pentru predarea despre calculatoare ct i pentru
predarea cu ajutorul calculatorului.
Avnd n vedere progresele realizate att n ceea ce privete construcia echipamentelor ct i
realizarea de programe, este facilitat introducerea pe scar larg i eficient a calculatoarelor n
ntreaga sfer a proceselor de predare-nvare. [2]

14

1.5 Obiectivele instruirii disciplinei informatica


Literatura pedagogic evideniaz patru timpi ai tehnicii de elaborare ai unui obiectiv, redai n
figura urmtoare:
Aciunea
observabil prin
care se va
exterioriza
comportamentul

Obiectul

+ +

(coninutul
aciunii)

Precizeaz comportamentul dorit a se forma


prin nvare

Condiiile
n care elevul
va putea proba
formarea
comportamentului

+ Criteriile
dup care
se vor
aprecia
performanele

Precizeaz modalitile n care se va


proba i evalua nivelul de formare a
comportamentului

Pentru evitarea unor greeli de formulare a obiectivelor operaionale trebuie inut cont de
urmtoarele:
fiecare obiectiv trebuie s exprime formarea unui comportament care se poate manifesta ca
o aciune unitar;
obiectivele operaionale s acopere n ntregime prevederile programei colare;
prin formularea obiectivelor s se evite orice suprapuneri privind coninutul lor;
formularea obiectivelor s permit nelegerea fr echivoc de ctre orice alt persoan care
le-ar citi comportamentul dorit a se forma;
n formularea obiectivelor operaionale ale unei teme s fie respectate obiectivele generale
ale disciplinei.
Pentru a se descrie cu claritate un comportament, trebuie s se aleag un verb care s exprime cu
claritate o aciune.
n continuare prezint modalitile n care pot fi formulate obiectivele operaionale, innd cont de
tipul specific de activitate ce urmeaz a fi realizat:
Pentru cunoatere : a defini, a distinge, a identifica, a cunoate, a ti, a aminti, a
redescoperi, a cuta.
Pentru nelegere : a nelege, a transforma, a ilustra, a diferenia, a explica, a estima, a
extinde.
15

Pentru aplicare : a aplica, a generaliza, a alege, a dezvolta, a utiliza, a organiza, a clasifica,


a transforma.
Pentru analiz : a distinge, a detecta, a identifica, a recunoate, a clasifica, a deosebi, a
analiza, a compara.
Pentru sintez : a relata, a produce, a transmite, a modifica, a crea, a asambla, a generaliza,
a se documenta, a organiza, a construi.
Pentru evaluare : a argumenta, a evalua, a decide, a propune, a arta, a considera, a msura,
a aprecia, a valida.
Obiectivele generale pentru clasele de liceu, profilul matematic-informatic , cu referin la
disciplinele de informatic :
stimularea gndirii independente a elevilor;
nsuirea de ctre elevi a fondului de cunotine teoretice i formarea deprinderilor practice
pentru a utiliza un calculator;
formarea gndirii algoritmice, nsuirea deprinderilor i tehnicilor necesare practicrii
programrii structurate;
nsuirea programrii n limbaje de larg circulaie, astfel nct absolventul de liceu s poat
proiecta, depana i ntreine produse program;
formarea gndirii logice, care s permit elevului s aprecieze corect situaiile concrete
specifice, cu scopul de a desprinde soluii optim;
formarea deprinderilor de aplicare corect a soluiilor alese.
Voi prezenta n continuare cteva din obiectivele specifice disciplinelor de informatic,
sistematizate n conformitate cu programa colar i exprimate prin performanele comportamentale
ale elevului.
a) Obiective cognitive
nsuirea limbajului algoritmic specific domeniului informatic;
formarea gndirii algoritmice proprie dialogului om-calculator;
aprofundarea structurilor de control fundamentale i, pe aceast baz, deprinderea
programrii structurate;
nsuirea corect i folosirea cu exactitate a principalelor noiuni, definiii, concepte, legi,
principii, care stau la baza programrii structurate;
nvarea i utilizarea unor metode de reprezentare a algoritmilor (scheme logice,
pseudocod), cu evidenierea avantajelor i dezavantajelor fiecrei metode;
utilizarea modularizrii n realizarea aplicaiilor;

16

exploatarea eficient a facilitilor de programare n Turbo Pascal i C, utiliznd permanent


programarea structurat - predarea noiunilor de programare prin structuri, nu prin
instruciuni;
nsuirea modului de lucru conversaional;
asimilarea noiunilor fundamentale, referitoare la structura limbajelor de programare, cu
exemplificri din diverse implementri ale limbajelor Turbo Pascal sau C;
proiectarea structurat a aplicaiilor, cu exemplificri din celelalte discipline colare;
posibilitatea de a transfera cunotinele dobndite la alte discipline (fizic, matematic,
desen tehnic, studiul materialelor, electrotehnic i electronic aplicat, msurri electrice i
electronice, etc.) pentru a gsi explicaia anumitor fenomene sau pentru construirea soluiilor
unor probleme de ordin teoretic sau practic din cadrul disciplinelor de informatic;
formarea capacitii de a analiza, a nelege i a explica, algoritmii pe care se bazeaz
rezolvarea problemelor i de a le transpune n limbaj verbal, grafic, matematic;
cunoaterea, memorarea, reproducerea corect a definiiilor i algoritmilor de calcul i
posibilitatea de a transfera cunotinele n condiii schimbate precum i de a extrapola
cunotinele la rezolvarea problemelor matematice, fizice sau ale altor domenii de instruire;
formarea deprinderilor de utilizare corect a tabelelor, standardelor, caracteristicilor,
ecuaiilor i de a le aplica n rezolvri de probleme, respectiv de a alege soluii optime,
justificnd alegerea fcut;
formarea capacitii de nelegere, explicare, interpretare corect a algoritmilor utilizai;
asimilarea unor metode i tehnici de programare, metode menite s optimizeze soluiile.
b) Obiective psihomotorii
deprinderea lucrului practic la calculatoarele I.B.M.;
formarea deprinderilor de a instala i ntreine sisteme de operare i aplicaii utilitare;
formarea deprinderilor de exploatare corect i raional a echipamentelor de calcul, de
sesizare a regimurilor anormale de lucru;
nsuirea celor mai uzuale tehnici de depanare, punere la punct i utilizare a programelor;
formarea deprinderilor de calcul a parametrilor corespunztori unor regimuri impuse;
formarea deprinderilor de execuie (construcie) a unor lucrri simple de ntreinere sau
reparaii;
formarea capacitilor de testare a sistemelor de calcul, pe baza crora s se poat trage
concluzii asupra fiabilitii i randamentului, etc.;
c) Obiective afective

17

formarea convingerii c utilizarea echipamentelor de calcul este o condiie important a


modernizrii proceselor de lucru, cu toate implicaiile economice i sociale ce deriv de aici:
creterea productivitii, a standardului de via etc.;
formarea convingerii c studiul aprofundat, temeinic al acestei discipline, este de larg
utilitate, putnduse aplica ntro serie de alte domenii;
formarea unei atitudini pozitive fa de munc i fa de productorii de bunuri materiale, de
grij i respect fa de baza material a colii, a laboratoarelor de informatic;
formarea convingerii c asimilarea i respectarea regulilor de protecia muncii este o
condiie sine qua non a pstrrii integritii corporale, a vieii chiar;
cunoaterea realizrilor romneti i pe plan mondial n ceea ce privete construcia de
echipamente de calcul, a preocuprilor, perspectivelor i a unor personaliti i firme de
prestigiu din acest domeniu;
formarea unor nclinaii de angajare voluntar a elevilor n investigarea fenomenelor i
legilor specifice disciplinei, element ce poate furniza satisfacii, siguran n pregtirea
viitoarei profesii i, n final, un ataament mai accentuat fa de aceasta. [2]

18

Capitolul II:
METODE DE REZOLVARE A
SISTEMELOR DE ECUAII LINIARE
2.1 Noiuni fundamentale
A. Matrici i determinani. Generaliti.
Definiia 1:
Fie K unul din corpurile

, . Prin matrice cu n linii i m coloane, cu elemente din K , se nelege

o aplicaie de forma: A : 1, 2,..., n *1, 2,..., m K : i, j aij descris uzual cu ajutorul

a11 a12

a21 a22
tabloului: A
... ...

an1 an 2

... a1m

... a2 m
, care conine valorile funciei.
... ...

... anm

Vom nota matricea cu M n*m ( K ) mulimea tuturor matricelor cu n linii i m coloane, cu elemente
din K.
Definiia 2:

Fie K unul din corpurile

a11 a12

a21 a22
, . Fie matricea ptratic A
... ...

am1 am 2

i j

... a1m

... a2 m
M m*m ( K ).
... ...

... amm

i j

Atunci det A 1 aij det Aij 1 aij det Aij , unde Aij este matricea care se obine din A
i 1

j 1

eliminnd linia i i coloana j.


Definiia 3:

a11 a12

a21 a22
Fie matricea ptratic A
... ...

am1 am 2

... a1m

... a2 m
M m*m ( K ).
... ...

... amm
19

a11
Numrul det A

a12

... a1m

a21 a22 ... a2 m


a1 1 a2 2 ...am m , unde Sm este mulimea tuturor
... ... ... ... Sm
am1 am 2 ... amm

permutrilor de grad m se numete determinantul matricei Am*m .


Definiia 4:
Prin permutare de grad n se nelege o funcie bijectiv : 1, 2,..., n 1, 2,..., n.
Prin

signatura

i j
i j

1i j n

: 1, 2,..., n 1, 2,..., n se

permutrii

nelege

numrul:

Corolar 1:
Oricare ar fi i, k 1, 2,..., m avem:

a 1
j 1

k j

ij

dac i k
0,
det Akj
, notaiile fiind cele
det A, dac i k

din definiia 4.
Demonstraie: n cazul i = k, afirmaia rezult din remarca anterioara, iar n cazul cnd i k , relaia
rezult dezvoltnd dup linia k determinantul cu dou linii identice:

a11

a12

...

... a1m
... ...

...

...

... a1m
... ...

ai1

ai 2

...

aim

ai1

ai 2

...

...

...

...

...

...

ai1

ai 2

...

...

...
...

... , rezultat nlocuind n ...


ak 1
aim
...
...

a11

a12

...

ak 2
...

aim

... linia k cu linia i.


... akm
... ...

am1 am 2 ... amm

am1 am 2 ... amm


Corolar 2:
Fie K unul din corpurile

, .

a11 a12

a21 a22
Fie matricea ptratic A
... ...

am1 am 2
Pentru m=2, numrul det A

a11

a12

a21 a22

... a1m

... a2 m
M m*m ( K ).
... ...

... amm
a11a22 a12 a21 se numete determinantul matricei.

20

Pentru

m=3,

numrul

a11

a12

a13

det A a21

a22

a23

a31

a32

a33

a11a22 a33 a12 a23a31 a13a21a32

(a13a22 a31 a11a23a32 a12a21a33 ) se numete determinantul matricei.

Corolar 3:
Detreminantul unei matrici ptratice este nul dac:

exist dou linii (sau coloane) identice;

toate elementele unei linii (sau coloane) sunt nule;

elementele a dou linii (sau coloane) sun proporionale;

o linie (sau coloan) este o combinaie liniar cu celelalte linii (sau coloane);

Corolar 4:

a11
Din definiia 1.3, cazul b rezult c: a21
a31

a12
a22

a13 a11
a23 a12

a21
a22

a32

a33

a23

a13

a31
a32 , adic putem spune c
a33

determinantul unei matrici coincide cu determinantul transpusei. Se poate demonstra c o astfel de


relaie are loc pentru orice matrice ptratic. Deci dac A M m*m K , atunci este adevrat
egalitatea: det A det t A sau det A TA .
Corolar 5:
Dac ntr-o matrice ptratic se schimb ntre ele dou linii (sau dou coloane), atunci se obine o
matrice care are determinantul egal cu opusul determinantului matricei iniiale.
Definiia 5:
O matrice ptratic Am*m ( K ) este inversabil, dac putem gsi o matrice Bm*m astfel nct A B I m
i B A I m . O matrice B cu proprietatea dat se numete invers pentru matricea A.
Se noteaz: A1 - matricea inversa matricii A.
Teorema 1: (Invesabilitatea unei matrici ptratice)

a11 a12

a21 a22
Fie matricea A
... ...

am1 am 2

... a1m

... a2 m
M m*m ( K ).
... ...

... amm

21

Matricea

este

inversabil

111 A11

1 2
1 1 A12
1
A

det A
...
1 1 m A
1m

dac

1 A21
2 2
1 A22
2 1

...

2 m

A2 m

...
...

numai

dac

1 Am1
m 2
1 Am 2 ,

det A 0

inversa

ei

este:

m 1

...
...

m m
... 1
Amm

unde

A* este matricea adjunct a

matricei A i se obine nlocuind fiecare element al matricii transpuse a lui A cu complementul su


algebric. [10]
B. Sisteme de ecuaii liniare. Generaliti.
Definiia 6:
O ecuaie liniar E cu necunoscutele x1 , x2 , x3 , x4 ,..., xm are forma :
E : ax1 bx2 cx3 ... kxm w , unde a, b, c,..., k , w sunt numere. Numerele a, b, c,..., k se numesc

coeficienii ecuaiei E, iar w se numete termenul liber al ecuaiei E.


Definiia 7:
Ecuaie nul cu necunoscutele x1 , x2 , x3 , x4 ,..., xm este ecuaia cu toi coeficienii egali cu zero,
inclusiv i termenul liber, avnd urmtoarea form: 0 x1 0 x2 0 x3 ... 0 xm 0 .
Definiia 8:
Dou ecuaii E i F snt identice (egale) dac au aceleai necunoscute scrise n aceeai ordine,
aceiai coeficieni i acelai termen liber. Notare: E F .
Definiia 9:
Fie E : ax1 bx2 cx3 ... kxm w este o ecuaie liniar cu necunoscutele x1 , x2 , x3 , x4 ,..., xm . O
soluie a ecuaiei E este un ansamblu ordonat x10 , x20 , x30 , x40 ,..., xm0 de m numere cu proprietatea: dac
n E nlocuim x1 prin x10 , x2 prin x20 , . . . , xm prin xm0 atunci vom obine o egalitate adevrat.
Definiia 10:
Un sistem liniar S de n ecuaii cu m necunoscute x1 , x2 , x3 , x4 ,..., xm este un sistem de forma:

a11 x1 a12 x2 ... a1m xm b1


a x a x ... a x b
21 1 22 2
2m m
2

.......................................
an1 x1 an 2 x2 ... anm xm bn

(1.1)

Aceast scriere a sistemului este numit forma analitic sau forma dezvoltat.
Corolar 6:
Matricea sistemului S (1.1) o vom nota cu M S , cea transpus cu TS i cea extins - cu ES .

22

a11 a12

a
a22
M S 21
... ...

an1 an 2

... a1m
a11

a12
... a2 m
, TS
...
... ...

... anm
a1m

a21
a22
...
a2 m

... an1
a11 a12

... an 2
a
a22
i ES 21
... ...
... ...

... anm
an1 an 2

... a1m
... a2 m
... ...
... anm

b1

b2
.
...

bn

Corolar 7:
Liniile matricii transpuse sunt reprezentate prin coloanele matricii. Astfel putem spune c pentru a
scrie matricea transpus, trecem n coloana 1 elementele din linia 1 a matricii sistemului S, n
coloana 2 elementele din linia 2 a matricii sistemului S, ... repetm aa pn ce finism liniile
matricii sistemului nostru S. [13]
C. Soluii, sisteme echivalente
Definiia 11:
Se numete soluie a sistemului (1.1) grupul (s1 , s2 , s3 ,..., sm ) care este soluie pentru fiecare din
ecuaiile sistemului S.
Definiia 12:
Dou sisteme liniare S1 i S2 cu necunoscutele x1 , x2 , x3 , x4 ,..., xm sunt echivalente, dac sunt ambele
incompatibile sau ambele compatibile i au aceleai soluii.
Teorema 2: (Reguli de obinere a sistemelor echivalente)
Fie S un sistem liniar de n ecuaii cu m necunoscute, atunci:
1. Permutnd ntre ele ecuaiile sistemului S obinem un sistem S1 echivalent cu S;
2. nlocuind o ecuaie E a sistemului S printr-o combinaie liniar E F G ... M ,
unde , , ,..., snt numere oarecare, dar 0 i E, F , G,..., M snt

ecuaii ale

sistemului altele dect E, vom obine un sistem S1 echivalent cu S;


3. nmulind sau mprind o ecuaie a sistemului S la un numr nenul, obinem un sistem S1
echivalent cu S;
4. Alegnd dou ecuaii E, F ale sistemului S i nlocuind E cu ecuaia E+F sau E-F, obinem
un sistem S1 echivalent cu S;
5. ndeprtnd din S o ecuaie sau mai multe ecuaii nule, obinem un sistem S1 echivalent cu S;
6. Suprimnd din sistemul S o ecuaie E care este dependent de celelalte ecuaii din S sau
numai de o parte din celelalte ecuaii, obinem un sistem S1 echivalent cu S.
D. Clasificarea sistemelor
Definiia 13: (clasificarea sistemelor dup soluii)
Un sistem liniar S este sau se numete:

Incompatibil, dac nu are soluii;


23

Compatibil, dac are soluii;

Compatibil determinat, dac are o singur soluie;

Compatibil nedeterminat, dac are o infinitate de soluii.

Corolar 8:
A discuta un sistem liniar nseamn a stabili dac ( i cnd) este incompatibil, compatibil, iar n caz
de compatibilitate a stabili tipul de compatibilitate.
Definiia 14: (clasificarea sistemelor dup numrul ecuaiilor i necunoscutelor)
Un sistem linear de n ecuaii cu m necunoscute este:

Determinat, dac numrul ecuaiilor este egal cu numrul necunoscutelor ( i ecuaiile


sistemului snt independente);

Subdeterminat, dac are mai puine ecuaii dect necunoscute ( i ecuaiile sistemului snt
independente);

Supradeterminat, dac numrul ecuaiilor depete numrul necunoscutelor ( dar numrul


ecuaiilor independente este egal cu numrul necunoscutelor);

Definiia 15: (clasificarea sistemelor n funcie de termenii liberi)


Un sistem linear este:

Omogen, dac toi termenii lui liberi snt zero;4

Neomogen, dac cel puin un termen liber al su este nenul. [3]

E. Rezolvarea sistemelor de ecuaii liniare


Rezolvarea sistemelor de ecuaii algebrice liniare este una din cele mai frecvente aplicaii care
apar n calculul numeric. La rezolvarea acestor sisteme pot fi aplicate metode directe, ct i indirecte
(iterative) care ne-ar putea conduce la obinerea unui rezultat. n dependen de gradul de
complexitate, se aplic metoda cea mai optim de rezolvare.
Metodele directe permit obinerea soluiei exacte a sistemului considerat, fcnd abstracie de
erorile de rotunjire, folosind un numr finit de operaii. Eroarea care se introduce prin rotunjirea
calculelor devine destul de larg pentru sisteme unde ordinul n este destul de mare. Aceste metode
constau n transformarea sistemului de ecuaii liniare ntr-un sistem triunghiular echivalent, care se
rezolv uor. Metodele directe permit determinarea soluiilor sistemului n cazul ideal, cnd nu
avem erori de rotunjire. Numrul operaiilor efectuate este de ordinul n3 . Pentru sisteme cu un
numr de ecuaii mai mare de 100, metodele directe devin inutilizabile datorit acumulrii erorilor
de rotunjire care altereaz soluia.
Metodele iterative se caracterizeaz prin faptul c soluia sistemului considerat se obine ca o
limit a unui ir de vectori ce reprezint soluia pentru diversele iteraii efectuate. n cadrul acestor
24

metode se pune problema de alegere a acelei metode care e convenabil din punct de vedere al
vitezei de convergen. n cazul n care procedeul converge suficient de rapid procedeul de calcul a
sfrit foarte repede i se obine o aproximaie foarte bun. Unul din avantajele principale ale
metodelor iterative este faptul c eroarea de rotunjire poate fi eliminat.
Metodele de rezolvare a sistemelor de ecuaii liniare studiate n liceu snt metoda lui Gauss i
metoda lui Cramer. Pe lng aceste metode mai exist i alte metode eficiente care ne permit
rezolvarea sistemelor de ecuaii liniare, unele dintre aceste metode vor fi prezentate n acest capitol.

2.2 Metode exacte directe de rezolvare a sistemelor de ecuaii


liniare
2.2.1 Metoda matriceal
Ne amintim!

Se numete minor de ordinal m-1 al elementului ai , j al matricei A de rang m(m>1),


determinantul matricei de rang m-1, obinut din matricea A prin extinderea rndului i si a
coloanei j. Vom nota minorul elementului ai , j prin Ai , j , unde i indic rndul, iar j coloana
la intersecia crora se afl elemental ai , j* .

Regula de consisten:
1. Exist un caz elementar: matricea ce corespunde minorului curent are ordinul 1.
2. La nivelul k se fac k apeluri pentru calculul determinanilor de ordinul k-1. Prin
urmare procesul converge spre un caz elementar.

a11 x1 a12 x2 ... a1m xm b1


a x a x ... a x b
21 1 22 2
2m m
2
Sistemul de m ecuaii liniare cu m necunoscute:
.......................................
am1 x1 am 2 x2 ... amm xm bm

(2.1.1)

se poate scrie sub forma: Ax b ,

(2.1.2)

care este forma matricial, numai dac se utilizeaz notaiile:

25

a11 a12

a
a22
A 21
... ...

am1 am 2

... a1m
x1
b1

b2
x2
... a2 m
, x i b .
...
...
... ...



... amm
xm
bm

(2.1.3)

Teorem:
Dac matricea A ptratic a sistemului de ecuaii liniare este inversabil, atunci sistemul are o
soluie unic:
x A1b .

(2.1.4)

Observaie: daca detA = 0, atunci sistemul poate fi compatibil nedeterminat sau incompatibil.
Algoritmul de rezolvare:
1. Scriem matricea A a sistemului de ecuaii liniare;
2. Calculm determinantul matricei A (det A), comparm det A cu 0 (zero);
3. Dac det A 0, atunci A- inversabil, altfel A- nu este inversabil;
4. Aflm inversa matricei A ( A1 );
5. Aflm soluia sistemului dup formula: x A1b . [14]
Exemplul 1:
S se rezolve sistemul de ecuaii liniare, utiliznd metoda matriceal:

x y 2 z 1

2 x y 2 z 4 .
4 x y 4 z 2

Rezolvare:
Scriem sistemul dat astfel:

1 1 2
1 1 2 x 1


1
2 1 2 . y 4 , deci det A 2 1 2 4 4 8 (8 8 2) 8 2 6 0, A .
4 1 4 z 2
4 1 4

1 2 4
a11

*
Scriem matricea transpus: A 1 1 1 , deci trebuie s aflm A a21
2 2 4
a

31
T

a11 (1)11.

1 1
6 ;
2 4

a21 (1)21.

2 4
0;
2 4

a31 (1)31.

a12 (1)1 2 .

1 1
2 ;
2 4

a22 (1) 2 2 .

1 4
4 ;
2 4

a32 (1)3 2 .

a12
a22
a32

a13

a23 .
a33

2 4
6;
1 1

1 4
3;
1 1

26

a13 (1)13 .

1 1
4;
2 2

a23 (1)23 .

1 2
2;
2 2

a33 (1)33 .

1 2
3 .
1 1

Obinem :

6 2 4
6 2 4
1

1
A 0 4 2 A . 0 4 2 ,
6
6 3 3
6 3 3

x
1 x 1


1
y A . 4 y 2 ;
z
2 z 2

x 1;

Deci am obinut: y 2;
z 2.

Rspuns: Soluia sistemului nostru este S {(1, 2, 2)} .


Exemplul 2:

x 2y z 1

Se d sistemul: 2 x my z 2 , m R .
x 2 y 2z 3

a) S se determine m pentru ca sistemul s aib o soluie unic.


b) Pentru m = 10, rezolvai sistemul.
Rezolvare:

1 2 1
a) det A 2 m 1 2m 4 2 (m 8 2) m 8 .
1 2 2
Dac det A 0 m 8 0 m 8, dac m 8 det A 0 , deci pentru m R \{8}, sistemul este
compatibil determinat, adic are o soluie unic.

a11
1 2 1

*
Scriem matricea transpus: TA 2 m 2 , deci trebuie s aflm A a21
a
1 1 2
31

a11 (1)11.

m 2
2m 2;
1 2

a21 (1)21.

2 1
3;
1 2

a31 (1)31.

2 1
4 m;
m 2

a12
a22
a32

a13

a23 .
a33

2 2
6;
1 2

a13 (1)13.

2 m
2 m;
1 1

a22 (1)2 2 .

1 1
1;
1 2

a23 (1) 23 .

1 2
1;
1 1

a32 (1)3 2 .

1 4
3;
1 1

a33 (1)33.

1 2
m 4.
2 m

a12 (1)1 2 .

Obinem :

27

6
2m
2m 2
m 8 m 8 m 8
2m 2 6 2 m
2m 2 6 2 m

1
3
1
1

*
1
1

A 3
1
1 A
3
1
1 A
m 8 m 8 m 8
m

8
4 m 3 m 4
4 m 3 m 4

3
m4
4 m

m 8 m 8 m 8
6
2m
2m 2
2m 2 12 6 3m
m 8 m 8 m 8
m 8 m 8 m 8
x
1 x
1 x

3
1
1 3
2
3

, y A . 2 y
2 y

m 8 m 8 m 8 m 8 m 8 m 8
z
3 z
3 z

m
3
m

4 m 6 3m 12
m 8 m 8 m 8
m 8 m 8 m 8
8 m

x m 8
2

, deci soluia sistemului pentru cazul cand este det A 0 , adic pentru
y
m 8
z


2m 10
m 8
m R \{8} este: S {(

8 m 2 2m 10
,
,
)} . Dac m=8, atunci det A 0 , deci sistemul nostru
m 8 m 8 m 8

nu are soluii.

x 2y z 1

b) Pentru m = 10, obinem urmtorul sistem de ecuaii liniare: 2 x 10 y z 2 .


x 2 y 2z 3

1 2 1
det A 2 10 1 20 4 2 (10 8 2) 10 8 2 .
1 2 2
1 2 1
a11

Scriem matricea transpus: TA 2 10 2 , deci trebuie s aflm A* a21


1 1 2
a

31

a11 (1)11.

10 2
18;
1 2

a21 (1) 21.


a31 (1)31.

2
1

a12 (1)1 2 .

2 2
6;
1 2

1
1 1
3; a22 (1) 2 2 .
1;
2
1 2

2 1
14;
10 2

a32 (1)3 2 .

1 4
3;
1 1

a13 (1)13 .

a12
a22
a32

a13

a23 .
a33

2 10
8;
1 1

a23 (1) 23 .
a33 (1)33 .

1 2
1
1 1

1 2
6
2 10

Obinem :
28

9 3 4
18 6 8
18 6 8

1
3 1 1

*
1
1

A 3 1 1 A 3 1 1 A
,
2
2
2 2
14 3 6

14 3 6
3
7
3


9 3 4
x
1
x
1
x


9

3
1
1

2 y 1 ,

y A . 2 y 2
2 2
z
3 z
3
z
5



3

7
3
2

5
deci soluia sistemului pentru cazul cand m=10, adic pentru m R este: S {(9,1, )} .
2

Rspuns:
a) S {(

8 m 2 2m 10
,
,
)} , pentru m R \{8} i det A 0 ;
m 8 m 8 m 8

S {} , pentru m=8 obinem det A 0 , sistemul nostru nu are soluii.


5
b) S {(9,1, )} pentru m=10, det A 0
2

29

2.2.2 Metoda lui Cramer


Ne amintim!

Matricea ptratic A se numete nesingular, dac determinantul ei este diferit de 0, (zero).

Matricea invers matricei A matricea care, fiind nmulit la A, d ca rezultat matricea


unitate, I.

Capacitatea de a calcula determinanii numerici de ordinul m, permite rezolvarea unei game largi
de problem din diverse domenii. Una dintre aplicaiile practice ale calculului determinanilor este
rezolvarea sistemelor de ecuaii liniare.
Fie dat sistemul n forma ptratic (2.1.1), pe care-l vom scrie n forma (2.1.2) cu notaiile
(2.1.3). n cazul cnd determinant A este diferit de zero, exist matricea invers, n urma nmulirii
ambelor pri ale egalitii (2.1.2) la matricea invers vom obine n rezultat o egalitate de forma
(2.1.4). Formula (2.1.4 ) ne permite calcularea soluiilor sistemului (2.1.1) n cazul cnd matricea A
a sistemului este nesingular. Formula detaliat care va fi utilizat pentru calcularea componentelor
vectorului soluiei rezult nemijlocit din (2.1.4) i proprietile matricei inverse:

xi

a1,1 ... a1, j 1


a2,1 ... a2, j 1

b1
b2

i
, i 1, n , unde i
... ...
...
...

am,1 ... am, j 1 bm

a1, j 1 ... a1,m


a2, j 1 ... a2,m
...
am, j 1

... ...
... am,m

(2.2.1)

i este determinantul matricei formate din matricea A, n care coloana i este nlocuit prin vertorul
termenilor liberi.
Formulele (2.2.1) se numesc formulele Cramer.
Metoda lui Cramer permite rezolvarea sistemelor liniare de m ecuaii cu m necunoscute
avnd determinantul asociat matricei sistemului nenul.
Definiie:

Un sistem liniar de m ecuaii cu m necunoscute se numete sistem Cramer, dac

determinantul matricei coeficienilor sistemului este diferit de zero.


Teorem: (Regula lui Cramer)
Un sistem liniar S, format din n ecuaii liniare cu n necunoscute, pentru care = det(A) 0 este
compatibil determinat, cu soluia dat de formulele lui Cramer:

x1

, x2 2 ,..., xi i ,

(2.2.2)

unde i se obine nlocuind n , coloana coeficienilor necunoscutei i, i 1,3 , prin coloana


termenilor liberi. [1]
30

Demonstraie:
A. Presupunem c sistemul S este compatibil determinat. Mulimea soluiilor lui S are deci un
singur element. Aplicnd teorema despre soluia particular a unui sistem S,din care rezult
expresia: S x0 S0 x0 y y S0 , unde S sistem de ecuaii liniare, S 0 - sistem
omogen obinut prin nlocuirea coloanei b cu coloana 0, i x0 - o soluie particular a lui S si

S 0 . n consecin, mulimea S 0 nu poate avea dect un singur element. Dar, S 0 fiind un Ksubspaiu a lui K n , nu poate fi egal dect cu {0}. Conform ipotezei c un sistem omogen are
doar soluia {0,...,0}, dac i numai dac rang(A) = n, deci det(A) 0.
B. Presupunem c det(A) 0. Sistemul omogen ataat S 0 are deci doar solutia banal, adic

S 0 = {0}. Conform teoremei aplicate recent la aceast demonstraie, mulimea S are cel
mult un elemet. Nu ne rmne s demonstrm, dect existena unei soluii particulare a
sistemului S.
Considerm scalarii xi K , definii astfel: xi (det( A))1 det[c1A ,..., ciA1 , bt , ciA1 ,..., cnA ] , unde

i {1,..., n} . Pentru a ajunge la concluzia x0 {x1 ,..., xn } este o soluie a lui S, e suficient
s artm c Ax0t bt x0t A1bt x0t (det( A))1 A*bt , unde A* este adjuncta matricii

b1
n
A. Avem deci Ax b xi (det( A)) (1i , 2i ,..., ni ) ... (det( A)) 1 b j ji , unde ji
j 1
bn
t
0

sunt complemenii algebrici corespunztori. Dar,

b
j 1

ji

nu reprezint altceva dect

dezvoltarea dup coloana a i-a a determinantului det[c1A ,..., ciA1 , bt , ciA1 ,..., cnA ], i {1,..., n} .
Aadar, x0 reprezint unica soluie a sistemului S. [12]
Algoritmul Cramer de rezolvare:
1. Calculm determinantul matricei A (det A);
2. Calculm determinanii i , nlocuind coloana i cu coloana termenilor liberi;
3. Exprimm necunoscutele astfel: xi

i
.

Rezolvarea sistemelor liniare de n ecuatii cu n necunoscute, cu parametru


Fie A matricea ataat a sistemului.
Pasul 1: Calculm det (A) i rezolvm ecuaia det(A)= 0.

31

Pasul 2: Pentru valorile parametrilor pentru care det(A) 0, sistemul este compatibil determinat,
adica are soluie unic i l rezolvm.
Pasul 3: Pentru valorile parametrilor pentru care det(A) = 0 continum rezolvarea sistemului
pentru fiecare caz n parte astfel:
A. determinam rangul lui A cutnd un minor al lui A diferit de 0 (determinantul principal);
B. calculm determinanii caracteristici (minorii), dac exist (determinanii obinui prin
abordarea determinantului principal cu o linie i termenii liberi). Determinm valorile
parametrilor care anuleaz determinanii caracteristici dac este cazul;
C. Pentru cazurile n care toi determinanii caracteristici sunt nuli sistemul este compatibil
nedeterminat i se rezolv sistemul. Dac exist cel puin un determinant caracteristic nenul
atunci sistemul este incompatibil.
Observatie: Punctele A, B, C din pasul 3 se pot repeta de mai multe ori pe parcursul rezolvrii.
Exemplul 1:

x y 2 z 1

S se rezolve sistemul de ecuaii liniare, utiliznd metoda lui Cramer: 2 x y 2 z 4 .


4 x y 4 z 2

Rezolvare:

1 1 2
Calculm detreminantul matricei: det A 2 1 2 4 4 8 (8 8 2) 6 ;
4 1 4
Calculm determinanii xi , nlocuind coloana i cu coloana termenilor liberi:

1 1 2
1 4 1 2 6 ;
2

1 1 2
2 2 4 2 12 ;

3 2 1 4 12 ;

4 2 4

Exprimm necunoscutele astfel:


x

1 6
1 ;
6

2 12

2;

3 12

2 .

x 1;

Deci am obinut: y 2;
z 2.

Rspuns: Soluia sistemului este S {(1, 2, 2)} .

32

Exemplul 2:
S se studieze compatibilitatea acestui sistem n R, n funcie de parametrul k i h, apoi s se
determine soluiile acestui sistem n cazul n care acestea exist.

kx y z 4

x 2 y 3z 6, unde k , h R
3x y 2 z h

Rezolvare:

k 1 1
k 1 1

Pas.1 A 1 2 3 , 1 2 3 4k 9 1 (6 3k 2) k 4;
3 1 2
3 1 2

Dac determinantul 0 k 4 0 k 4.
Dac k 4 0 , deci pentru k R \ 4 , sistemul este compatibil determinat, adic are o
soluie unic.
Pas.2 Determinm aceast soluie utiliznd metoda lui Cramer, deci urmeaz s calculm urmtorii
determinani: x , y , z .

4
x 6

1
2

1
3 16 3h 6 (2h 12 12) k 2;

h 1 2
k 4
y 1 6

1
3 12k 36 h (18 3kh 8) 26 12k 3kh h;

3 h 2

k
z 1

1
2

4
6 2kh 18 4 (24 6k h) 6k h 2kh 10;

3 1 h
x

y 26 12k 3kh h
x k 2

6k h 2kh 10

; z z

; y
;

4k
4k

4k

Am obinut soluia: S {(

k 2 26 12k 3kh h 6k h 2kh 10


,
,
)} .
4k
4k
4k

4x y z 4

Pas.3 Dac k 4 , atunci sistemul devine astfel: x 2 y 3z 6, h R .


3x y 2 z h

Sistemul dat depinde numai de parametrul h i 0.


S determinm rangul matricei sistemului:
33

4 1
8 1 7 0 rangul matricei sistemului este 2, sistemul are dou ecuaii principale i
1 2

una secundar.

4 1 4
Avem nevoie de un determinant caracteristic: dc 1 2 6 8h 18 4 (24 24 h) 7 h 14 ,
3 1 h
dc 0 7h 14 0 h 2 .

Dac h 2 , atunci sistemul este incompatibil S .


Dac h 2 , atunci sistemul este compatibil nedeterminat. Notm z w i rezolvm sistemul

4x y w 4
4x y 4 w

x 2 y 3w 6 x 2 y 6 3w

zw
zw

4w 1

w 2
8 2w (6 3w) w 2 , x x
;
6 3w 2

4 4w
20 11w
24 12w (4 w) 11w 20 , y y
;
1 6 3w

Deci S {(

w 2 20 11w
,
, w)} , unde w R , oricare.
7
7

Pas.4 Concluzie:
1) Dac k R \{4} i h R , sistemul este compatibil determinat i are soluia unic
S {(

2) Dac
S {(

k 2 26 12k 3kh h 6k h 2kh 10


,
,
)} .
4k
4k
4k

k 4

h 2 , sistemul este compatibil nedeterminat i are soluiile

w 2 20 11w
,
, w)} , unde w R , oricare.
7
7

3) Dac k 4 i h R \{2} , sistemul este incompatibil i S .


Exemplul 3:
S se studieze compatibilitatea acestui sistem n R, n funcie de a i b. S se determine
soluiile acestui sistem n cazul n care acestea exist.

x yz 0

ax y z a 1, a, b
x y bz 1

Rezolvare:
34

1 1 1
1 1 1

Pasul 1: A a 1 1 , det( A) a 1 1 b 1 a 1 1 ab (1 a)(b 1).


1 1 b
1 1 b

Revolvm det A 0 a 1 sau b 1.


Pasul 2: Daca a 1 si b 1 det( A) 0. Deci sistemul este compatibil determinat, adic are
soluie unic. Determinm aceast soluie:

0 1 1
1
0
1
1 1 0
dx a 1 1 1 (a 1)(1 b), dy a a 1 1 (a 1)(b 2), dz a 1 a 1 a 1,
1

1 b

Prin urmare obinem: x 1, y

1 1

b2
1
b2 1
, z
, deci soluia este: S (1,
,
) .
1 b
1 b
1 b 1 b

Pasul 3: Aici avem mai multe cazuri:


1) a 1, b 1 ;

2)

a 1, b 1 ;

3)

a 1, b 1

Deci vom parcurge paii A, B, C pentru fiecare caz n parte.


Cazul I

x yz 0

Obinem sistemul: x y z 0 , det( A) 0.


x y z 1

Determinm rangul lui A:


Minorii de ordinul II ai lui A sunt de forma

1 1
0 rang A<2. Avem dp =1 rang A=1, avem
1 1

un sistem format dintr-o ecuaie principal i dou ecuaii secundare.


Calculm determinanii caracteristici. Acetia vor avea forma:

1 0
1 0

0 sau

1 0
1
1 1

Determinantul caracteristic

1 0
0 sistemul este incompatibil.
1 1

Cazul II

x yz 0

Obinem sistemul: x y z 0 , det( A) 0.


x y bz 1

Determinm rangul lui A:


35

dp =

1 1
b 1 0 rang A=2. Avem un sistem format din dou ecuaii principale i o ecuaie
1 b

secundar.

1 1 0
Calculm determinanii caracteristici. Vom avea un determinant caracteristic: dc = 1 1 0 0
1 b 1
sistemul este compatibil nedeterminat. Notm:

xq

i avem de rezolvat

sistemul:

xq
xq

q y z 0 y z q .
q y bz 1 y bz 1 q

dy

1 q
q
1
bq 1 q q(1 b) 1 , unde dz
1 q q 1 .
1 q b
1 1 q

1
q(1 b) 1
Deci soluia sistemului dat este: S (q,
,
) , q
b 1
b 1

Cazul III

x yz 0

Obinem sistemul: ax y z a 1, det( A) 0.


x y z 1

Determinm rangul lui A:


dp =

1 1
1 a 0 rang A=2. Avem un sistem format din dou ecuaii principale i o ecuaie
a 1

secundar.

1 1 0
Vom avea un determinant caracteristic: dc = a 1 a 1 a 1 0 sistemul este incompatibil.
1 1 1
Concluzie:

Dac a, b

\{1} , atunci sistemul este compatibil determinat i are soluie unic.

b2 1
S (1,
,
)
1 b 1 b

Dac a 1, b

\{1} , atunci sistemul este compatibil nedeterminat i are soluiile:

1
q(1 b) 1
S (q,
,
) , q
b 1
b 1

Dac b 1, a , atunci sistemul este incompatibil i S .


36

2.2.3 Metoda lui Gauss clasic


Ne amintim!

Matricea extins a unui sistem de m ecuaii cu m necunoscute se va numi matricea format


din m linii si m+1 coloane, format din coeficienii sistemului i vectorul termenilor liberi,
amplasai dup cum urmeaz. ( vezi Corolar 6)

Una dintre metodele eficiente de determinare a soluiei unui sistem de ecuaii liniare este metoda
excluderii consecutive a necunoscutelor, aceast metod este cunoscut sub numele de metoda lui
Gauss. Ea poate fi utilizat n cazul cnd sistemul cercetat are o soluie unic sau o infinitate de
soliii. Metoda transformrilor elementare este de fapt procedeul de reducere a necunoscutelor, scris
eventual sub form matriceal. n cazul sistemelor de dou ecuaii cu dou necunoscute, aceast
metod este de fapt metoda reducerii. [1]
Fie sistemul S m de m ecuaii liniare cu m necunoscute:

i : ai1 x1 ai 2 x2 ... aim xm wi , unde i 1, m

(2.3.1)

unde am notat cu i ecuaia i din sistemul considerat. Este cunoscut faptul c sistemul S poate fi
scris folosind notaiile matriciale, sub forma: S : Ax w , unde x este vectorul de componente

x1 , x2 , x3 ,..., xm i A (aik ), unde i, k 1, m este matricea sistemului, iar w este de asemenea un


vector avnd componentele w1 , w2 , w3 ,..., wm . Dac eliminm din acest sistem una din necunoscute,
spre exemplu pe x1 , obinem primul sistem intermediar de m-1 ecuaii cu m-1 necunoscute
(1)
(1)
(1)
(1)
(1)
(1)
(1)
j : a j 2 x2 a j 3 x3 ... a jm xm w j , j 2, m sau mai concis ar fi Sm1 : A x w , unde prima

coloan a lui A(1) are numai elemente nule, iar sistemul intermediar Sm1 conine urmtoarele m-1
necunoscute: x2 , x3 ,..., xm . Ecuaia (1)
j 2, m , s-a obinut nmulind una din ecuaiiile
j ,
sistemului S m , de exemplu 1 , cu facorul
obinem relaiile: (1)
j j

a j1
a11

a j1
a11

i adunnd ecuaia obinut la ecuaia j ,

1 , j 2, m

(2.3.2)

unde a11 0. n acest mod sistemul S m este transformat ntr-un sistem echivalent, format din Sm1
i ecuaia 1 . Cu sistemul Sm1 procedm la fel, eliminnd de exemplu pe x2 , obinem astfel un al
doilea

sistem

intermediar

de

m-2

ecuaii

cu

m-2

necunoscute

(2)
k(2) : ak(2)3 x3 ak(2)4 x4 ... akm
xm wk(2) , k 3, m , sau mai concis ar fi Sm2 : A(2) x w(2) , unde n

37

matricea A(2) primele dou coloane sunt formate numai din elemente nule, iar sistemul Sm 2 are
urmtoarele m-2 necunoscute: x3 , x4 ,..., xm . Astfel sistemul S m s-a transformat ntr-un sistem
echivalent alctuit din sistemul Sm 2 , din ecuaia 2(1) a sistemului Sm1 i din ecuaia 1 aparinnd
sistemului S m . Procedm analog pn ajungem la ultimul sistem intermediar format de o ecuaie cu
( m1)
o singur necunoscut: m( m1) : amm
xm wm( m1) sau S1 : A( m1) x w( m1) . Astfel sistemul S m s-a

transformat n sistemul echivalent S m , format din cte o ecuaie a sistemelor Sm , Sm1 , Sm2 ,..., S2 , S1
anume:

1 :
2(1) :
3(2) :

a11 x1

...

...

a12 x2
(1)
a22
x2
...

a13 x3 ...
(1)
a23
x3 ...
(2)
a33
x3 ...
...

...

n( n 1) :

a1m xm w1 ,
a2(1)m xm w2(1) ,
(2)
a3(2)
m xm w2 ,

(2.3.3)

...
( m 1)
amm
xm w2( m1) .

Este esenial de remarcat c sistemul S m are o matrice triunghiular superioar i c elementele


(1)
( m1)
snt presupuse diferite de zero. Formarea sistemului (2.3.3) constituie faza direct a
a11 , a22
,..., amm

metodei de eliminare. n consecin, sistemul S m se rezolv uor. Pentru aceasta aflm din ultima
ecuaie necunoscuta xm , apoi valoarea gsit o substituim n penultima ecuaie. Din aceast ecuaie
aflm pe xm1 .a.m.d. pn ce aflm toate necunoscutele sistemului. Rezolvarea sistemului (2.3.3)
formeaz faza indirect a acestei metode. [5]
Observaie:
Procesul de calcul al soluiei unui sistem de ecuaii liniare utiliznd metoda lui Gauss se divide n
dou etape:
1. direct transformarea sistemului de ecuaii liniare iniial S m n sistemul echivalent S m prin
transformri elementare a matricii extinse.
2. indirect calculul componentelor soluiei sistemului S m , adic rezolvarea sistemului
(2.3.3)
Pentru prelucrarea treptat a sistemului, se utilizeaz urmatoarele transformri elementare, care
conduc la sisteme echivalente:

Reaezarea ecuaiilor n alt ordine;

Reaezarea necunoscutelor n alt ordine;

nmulirea unei ecuaii cu un numr nenul;

Adunarea ecuaiilor membru cu membru.


38

Aplicnd n mod convenabil astfel de transformari, se ajunge la una din situatiile:


1. Sistemul final are forma triunghiular, soluia sa fiind unic (compatibil determinat);
2. Sistemul final are forma trapezoidal, cu mai multe soluii (compatibil nedeterminat);
3. Sistemul final contine o contradictie, fr soluii (incompatibil).
Algoritmul Gauss de rezolvare:
1. Scriem matricea extins a sistemului (adic matricea sistemului, creia i anexm coloana
termenilor liberi);
2. Aplicm transformari elementare (ca i cum am lucra cu ecuaiile) asupra acestei matrice,
pn cnd aceasta ia forma triunghiular sau trapezoidal;
3. Consideram sistemul liniar caruia i corespunde aceast matrice extins (el este echivalent
cu cel dat!);
4. Dac n acest sistem apare o contradicie, atunci sistemul este incompatibil;
5. Dac nu apare nici o contradicie, atunci sistemul este compatibil sau compatibil
nedeterminat, dupa cum el are forma triunghiulara sau trapezoidala;
6. Solutia sistemului (cnd aceasta exista!) se afla usor, parcurgand drumul napoi, de la ultima
ecuaie (cu cele mai puine necunoscute), ctre prima (cu cele mai multe necunoscute). [10]
Exemplul 1:

x y 2 z 1

S se rezolve sistemul de ecuaii liniare, utiliznd metoda lui Gauss: 2 x y 2 z 4 .


4 x y 4 z 2

Rezolvare:
Pentru a rezolva sistemul dat, este necesar s folosim matricea extins, efectund transformrile
necesare, obinem spre final o matrice extins de forma triunghiular, de unde vom afla uor soluia
final a sistemului nostru. Deci vom obine:
1 1 2 1 1 1
2 1 1 1
2 1 1 1
2 1 x y 2 z 1;





2 1 2 4 0 3 2 2 0 3 2 2 0 3 2 2 3 y 2 z 2;
4 1 4 2 4 1
4 2 0 3 4 2 0 0 2 4
2 z 4.

x y 4 1; x y 4 1; x y 3;
x 2 3; x 1;

3 y 4 2; 3 y 4 2; 3 y 6; y 2; y 2;
z 2.
z 2.
z 2.
z 2.
z 2.

Rspuns: Soluia sistemului nostru este S {(1, 2, 2)} .

39

Exemplul 2:
S se studieze compatibilitatea acestui sistem n R, n funcie de parametrul s i t, apoi s se
determine soluiile acestui sistem n cazul n care acestea exist.

x yz 0

sx y z s 1, unde s, t R
x y tz 1

Rezolvare:
Pentru a rezolva sistemul dat, este necesar s folosim matricea extins, efectund transformrile
necesare, obinem spre final o matrice extins de forma triunghiular, de unde vom afla uor soluia
final a sistemului nostru. Deci vom obine:
1 1 1 0

s 1 1 s 1
1 1 t 1

1
1
1 0

0 1 s 1 s s 1
1
1
t 1

1
1
1
0

0 (1 s)(t 1) 0 st t 2s 2
0

0
t 1
1

1
1
1 0

0 1 s 1 s s 1
0
0
t 1 1

(t 1)
(t 1)
0
1

(1 s)(t 1) 0 st t 2s 2
0
0

0
t 1
1

(1 s)(t 1)
0
0 st t s 1
(1 s)(t 1) x st t s 1

0
(1 s)(t 1) 0 s(t 2) t 2 (1 s)(t 1) y st t 2s 2

0
0
t 1
1
(t 1) z 1

st t s 1
(1 s)(t 1)
st t 2s 2
st t s 1 st t 2s 2 1
S {(
,
,
)}
(1 s)(t 1)
(1 s)(t 1) (1 s)(t 1) t 1
1
z
t 1

Rspuns: Soluia sistemului nostru este S {(

st t s 1 st t 2s 2 1
,
,
)} .
(1 s)(t 1) (1 s)(t 1) t 1

40

2.2.4 Factorizarea LU (Crout & Doolittle)


Fie sistemul compatibil determinat: Ax b .

(2.4.1)

Factorizarea LU presupune descompunerea matricei A intr-un produs de matrice LU , unde:

11 0

22
L 21
... ...

n1 n 2

0
11

0
... 0
i U
...
... ...

... nn
0

12 ... 1n
22 ... 2 n
.

...

...
0

(2.4.2)

... ...

... nn

Aceast descompunere este posibil dac toi determinanii de col ai matricei A sunt nenuli. Pentru
a asigura unicitatea descompunerii, trebuie precizate n elemente ale matricei L sau U. n mod
tradiional, se specific ii sau ii , adic ii =1, atunci factorizarea LU se numete factorizare
Doolittle, iar dac ii =1, atunci factorizarea LU se numete factorizare Crout.
Astfel dar rezolvarea sistemului (2.4.1)se reduce la rezolvarea sistemelor triunghiulare:
Ly b

(2.4.3)

y1 1

11

cu soluia:
i 1
y b y 1 , i 2, n
ij j
i 1
j 1
ii

(2.4.4)

i Ux=y

(2.4.5)

xn n

nn

cu soluia:
n
1
x y
ij x j , i 2, n

i
i

j i 1

ii

(2.4.6)

Algoritmul LU de rezolvare:
1) Generm matricea A a sistemului i a vectorului coloan b. Numrul de ecuaii (linii) ale
sistemului le vom nota cu n.
2) Folosim cele dou factorizri: Crout i Doolittle.
a) Factorizarea Crout:
pentru i 1, n avem ii 1
j 1

pentru i 1, n i pentru j 1, i avem ij aij ik kj


k 1

pentru j i 1, n avem ij

i 1
1

ik kj .

ij

ii
k 1

41

b) Factorizarea Doolittle:
pentru i 1, n avem ii 1
pentru i 1, n i pentru j 1, i 1 avem ij

i
1

ik kj

ij

jj
k 1

i 1

pentru j i, n avem ij aij ik kj .


k 1

3) Rezolvarea celor dou sisteme triunghiulare:


y1

i 1

1
, pentru i 2, n atunci yi bi ij y j
.
11
j 1

ii

xn

1
, pentru i 2, n atunci xi yi ij x j
. [8]
nn
j i 1

ii

b1

yn

Exemplul 1:
S se determine soluia sistemului urmtor, folosind factorizarea LU:

30 x1 x2 x3 10a

x1 30 x2 2 x3 10a 1
2 x x 30 x 27
3
1 2

30 1 1 30

1 30 2 29
2 1 30 27

Rezolvare:
Pentru a vedea dac se poate aplica factorizarea LU, trebuie ca determinanii de col s fie diferii de
zero. Vom calcula aceti determinani astfel:

1 | 30 | 30 0;
30 1
3 1 30
2

30 1
30 30 11 900 1 899 0;
1 30

1
2 30 30 30 111 11 2 (1 30 2 11 30 1 2 30) 27003 150 26853 0;
30

Vom aplica factorizarea Doolittle:

0
30 1 1 1


A L U , unde ii 1 , adic 1 30 2 21 1
2 1 30

31 32

0 11

0 0
1 0

12
22
0

13
23 .
33

Efectund nmulirea a dou matrici, vom afla necunoscutele i .

42

11 30; 12 1;

13 1;

21 11 1 21

1
;
30

1
1 899
22 30 22 30

;
30
30 30
1
2
1 59
1
21 13 23 2 23 2 23 2 ; 31 11 2 30 31 2 31 ;
30
30 15
30 30
1 899
899
1
14 30
28
31 12 32 22 1
32 1
32 1 32

;
15 30
30
15
15 899 899

21 12 22 30

31 13 32 23 33 30

1 28 59
1 28 59 805650

33 30 33 30

;
15 899 30
15 899 30 26970

Am obinut n rezultat astfel:

1
30 1 1

1
1
30
2

30
2 1 30

1
15


0 30 1

899
1 0 0

30

28
1 0
0
899

0

1
30 1 1

unde A 1 30 2 , L
30
2 1 30
1

15

59
30
805650
26970
1

30 1
0

889
1 0 i U 0

30

28
0
0
1
899

59
30
80565
2697
1

n continuare vom rezolva dou sisteme:

1
L y B
30
1

15

0
y1 30
y1 30
y
30

1

1 0 y2 29
y2 29 30
y2 28

30

y3 27
26855

28
1
28

3
1
y3 27 30
28
899
899
15
899

30 1

899
U x y 0

30

0
0

30 1 1

x1

1
30
x1 1
x1 30

59
59 30

x2 28 x2 (28 )
x2 1
30
30 899

x3
26855

x3 1
80565
26855 2697

899 x3
2697
899 80565

Rspuns: Soluia sistemului este: S {(1;1; 1)}

43

Exemplul 2:
S se determine soluia sistemului urmtor, folosind factorizarea LU:

x yz 2

2x y z 1 .
x 3y 2z 5

Rezolvare:

1 1 1
m
2



Scriem sistemul dat n forma matricial: Ax b , unde A 2 1 1 , x n , b 1 .
1 3 2
k
5



Verificm determinanii de col ai acestui sistem:

1 0,

2 1

1 1 1
3 0, 2 1 1 3 0. Rezult ca matricea A este nesingular.
1

Rezolvare utiliznd factorizarea Crout.

1 1 1 11 0


Presupunem c A 2 1 1 21 22
1 3 2

31 32

1 12

0 1
33 0 0
0
0

12
12 . Ne propunem s determinm
1

coeficienii lij , u jk . Pentru aceasta, folosim definiia inmulirii matricilor. Astfel obinem:
a11 11 1

11 1

a12 11 12

12 1

a13 11 13

13 1

a21 21 1

21 2

a22 21 12 21 1

22 3 . Deoarece A L U obinem:

a23 21 13 22 23

23 1

a31 31 1

31 1

a32 31 12 32 1

32 2

a33 31 13 32 23 33 1

33 1

L 2
1

U 0
0

0 0

3 0
2 1
.
1 1

1 1
0 1

Urmeaz s rezolvm sistemele triunghiulare. Pentru rezolvarea sistemului iniial, avem de rezolvat

1 0 0 s1 2
1 1 1 m s1


dou sisteme triunghiulare: 2 3 0 s2 1 & 0 1 1 n s2 . Rezolvnd primul
1 2 1 s 5
0 0 1 k s

3
s1 2
m 1


sistem obinem soluia: S s2 1 . Substituind n al doilea sistem obinem: x n 2 .
s 1
k 1
3

44

Rezolvare utiliznd factorizarea Doolittle.

0
1 1 1 1


Presupunem c A 2 1 1 21 1
1 3 2

31 32

0 11

0 0
1 0

12
22
0

12
12 .
33

Ne propunem s determinm coeficienii lij , u jk . Pentru aceasta, folosim definiia inmulirii


matricilor. Astfel obinem:
a11 1 11

11 1

a12 1 12

12 1

a13 1 13

13 1

a21 21 11

21 2

a22 21 12 1 22

22 3 . Deoarece A L U obinem:

a23 21 13 1 23

23 3

a31 31 11

31 1

a32 31 12 32 22

32

a33 31 13 32 23 1 23

33 1

2
3

1 0 0

L 2 1 0

2
1 .
1
3

1 1 1

U 0 3 3
0 0 1

Urmeaz s rezolvm sistemele triunghiulare. Pentru rezolvarea sistemului iniial, avem de rezolvat

1 0 0 s1 2
1 1 1 m s1


dou sisteme triunghiulare: 2 1 0 s2 1 & 0 3 3 n s2 .
0 0 1 k s

s 5
2

3
1 3
1
3

s1 2

Rezolvnd primul sistem obinem soluia: S s2 3 . Substituind n al doilea sistem obinem:
s 1
3
m 1

x n 2 .
k 1

Rspuns: Soluia sistemului nostru este S {(1, 2,1)} .

45

2.2.5 Factorizarea Cholesky


Un caz particular de sisteme liniare este acela n care matricea A a sistemului este simetric i
pozitiv definit (adic toi determinanii de col sunt strict pozitivi). Pentru astfel de sisteme putem
folosi un caz particular al factorizrii LU:

11 0

21 22
T
descompunem matricea A a sistemului ntr-un produs L L , unde L
... ...

m1 m 2

... 0
.
... ...

... mm
...

Coeficienii ij se obin din definiia produsului a dou matrice. [7]


Exemplul 1:
S

se

rezolve

sistemul

de

ecuaii

liniare,

utiliznd

factorizarea

Cholesky:

x1 4 x 2 5 x 3 10

4 x1 20 x 2 32 x 3 56

5 x1 32 x 2 70 x 3 107
Rezolvare:

1 4 5
10

Matricea sistemului i vectorul termenilor liberi snt: A 4 20 32 i b 56 .


5 32 70
107

Calculm elementele b i1 i c1 j astfel: b11 a11 1, b21 a 21 4, b31 a 31 5 , apoi calculnd


obinem: c12

1
1
a12 4 , c13 a13 5 . Aplicn datele vom gsi: b22 a 22 b21 c12 4 ,
b11
b11

b32 a 32 b31 c12 12, b33 a 33 ( b31 c13 b32 c 23 ) 9, apoi calculnd obinem:

1 0 0
1 4 5
1
12

c 23
a 23 b 21 c13 3 . Obinem, deci: B 4 4 0 i C 0 1 3
b 22
4
0 0 1
5 12 9

Rezolvnd sistemul B y b se obine:

y1

b1
b11

10 , y 2

1
1
b 2 b 21 y1 4 , y 3

b3 ( b31 y1 b32 y 2 ) 1.
b 22
b33

Din sistemul C x y obinem succesiv valorile necunoscutelor ncepnd cu ultima:

46

x 3 y 3 1, x 2 y 2 c 23 x 3 1, x1 y1 ( c12 x 2 c13 x 3 ) 1. Deci

vectorul

soluie

este:

1

x 1 .
1

Exemplul 2:

x 2y z 5

S se rezolve sistemul de ecuaii liniare, utiliznd factorizarea Cholesky: 2 x 5 y 2 z 11 .


x 2 y 3z 7

Rezolvare:

1 2 1

Matricea sistemului este: A 2 5 2 . Se observ c matricea este simetric. Vom calcula


1 2 3

1 2 1
determinantul matricei A astfel: det A 2 5 2 15 4 4 (5 12 4) 23 21 2 , deoarece
1 2 3
det A=2>0, nelegem c matricea A este pozitiv definit. Aplicnd factorizarea Cholesky obinem
egalitatea:

1 2 1 11 0


A 2 5 2 21 22
1 2 3

31 32

11 21

. 0 22
33 0
0
0
0

31
32 .
33

Folosind definiia produsului a dou matrice, obinem relaiile:


a11 112 ; a12 11.21 ; a13 11.31 ; a22 212 222 ; a23 21.31 22 .32 ; a33 312 322 .332 ;

Deci vom obine urmtoarele valori: 11 1; 21 2; 31 1; 22 1; 32 0; 33 2;


Pentru a determina soluia sistemului iniial, avem nevoie de rezolvat dou sisteme triunghiulare:

1 0

2 1
1 0

0 y1 5 1 2

0 . y2 11 i 0 1

2 y3 7 0 0

1 x 5

0 . y 1 .

2 z 2

y1 5 x 2

Rezolvnd aceste dou sisteme obinem soluiile respective: y2 1 i y 1 .
y z 1
3 2
Rspuns: Soluia sistemului nostru este S {(2,1,1)} .

47

2.3 Metode exacte iterative de rezolvare a sistemelor de ecuaii


liniare
2.3.1 Metoda iterativ Jacobi
Metoda Jacobi este o metod iterativ de rezolvare a sistemelor liniare de forma
Ax = b.

(3.1.1)

Matricea A se descompune n suma L + D + U , unde


0

a21
L a31

...
a
m1

0
0

0
0

a32
...
am 2

0
...
am3

... 0
a11

... 0
a21
... 0 , D 0

... ...
...
0
... 0

0
a22

0
0

0
...
0

a33
...
0

0
0 a12

0
0 0
... 0 , U ... ...

... ...
0 0
0 0
... amm

...
...

a13 ...
a23 ...
... ...
0
0

...
...

a1m

a2 m
...

am 1,m
0

Se definete traiectoria Jacobi a vectorului x (0) ca fiind vectorul


x( k 1) D1[b ( L U ) x( k ) ], k 0,1, 2,...

(3.1.2)

Folosind teorema de convergen se studiaz dac traiectoria Jacobi converge la soluia x (*) a
sistemului (3.1.1).
Traiectoria Jacobi converge la soluia x (*) a sistemului (3.1.1), dac i numai dac raza spectral a
matricei M D1 ( L U )

(3.1.3)

este strict subunitar, adic max{ det(M I n ) 0} 1

(3.1.4)

n caz de convergen, componentele x1( k 1) , x2( k 1) ,..., xn( k 1) ale vectorului x( k 1) , situat pe traiectoria
Jacobi a vectorului x (0) , sunt date de relaiile:
n

xi( k 1) (bi aij x (jk ) )


j 1
j i

1
, i 1, n; k 0,1, 2,... [11]
aii

(3.1.5)

Algoritmul Jacobi de rezolvare:


1. generarea matricei A a sistemului i a vectorului b, unde n - numrul de necunoscute (numrul de
linii ale matricei A)
2. generarea matricelor L, D, U i vericarea convergenei metodei:

D1 L U

3. construirea traiectoriei Jacobi


48

repet xi( k 1) (bi aij x (jk ) )


j 1
j i

1
, i 1, n; pn cnd
aii

(x
i 1

( k 1)
i

xi( k ) ) n . [2]

Exemplu :
Calculai primii trei termeni ai traiectoriei Jacobi asociate vectorului (0, 0, 0) pentru sistemul:

5 x 2 y 3z 1

3x 9 y z 2 .
2x y 7z 3

Rezolvare:

5 2 3

Sistemul nostru l scriem sub forma (3.1.1), astfel obinem: A 3 9 1 ,


2 1 7

1

b 2 .
3

Matricea A se descompune n suma L+D+U cu

0 0 0
5 0 0
0 2 3

L 3 0 0 , D 0 9 0 , U 0 0 1 .
2 1 0
0 0 7
0 0 0

Vericarea condiiei de convergen a algoritmului presupune calculul valorilor proprii ale matricei
(3.1.3)

1
1
M D (L U )
3

2
7

1
7

3
5

1
.
9

Calculnd

modul

maximul

2
5
0

al

valorilor

proprii

ale

matricei

M,

obinem

(M ) 0.2673998083 1, i deci algoritmul converge.


Aplicnd formulele (3.1.5), plecnd de la tripletul x(0) 0, y (0) 0, z (0) 0, obinem succesiv:

x (1) -0.2000000000
(1)
y 0.2222222222,
z (1) -0.4285714286

x (2) 0.1460317460
(2)
y 0.2031746032 ,
z (2) -0.5174603174

x (3) 0.1917460316
(3)
y 0.3283950617 .
z (3) -0.4158730159

49

2.3.2 Metoda iterativ Gauss-Seidel


Metoda Gauss-Seidel este o metod de rezolvare numeric a sistemelor de tip Cramer, prin
Aproximaii succesive. Matricea A a sistemului se descompune n suma L + D + U , unde L este
matrice triunghiular subdiagonal, D matrice diagonal i U matrice triunghiular supradiagonal.
Pentru un vector x(0)

, irul de vectori x ( k ) definit prin:

x( k 1) ( L D)1 (b Ux( k ) )

(3.2.1)

se numete traiectoria Gauss-Seidel a vectorului x (0) .


Traiectoria Gauss-Seidel a vectorului x (0) converge dac i numai dac raza spectral
a matricei este strict subunitar.

( L D)1U

(3.2.2)

n caz de convergen, componentele: x1( k 1) , x2( k 1) ,..., xn( k 1) ale vectorului x ( k 1) , situat pe traiectoria
Gauss-Seidel a vectorului x (0) , sunt date relaiile:
n

x1( k 1) (b1 a1 j x(jk ) )


j 2

i 1

1
a11

xi( k 1) (bi aij x(jk 1)


j 1

(3.2.3)

j i 1

ij

x (jk ) )

1
, i 2, n
aii

[4]

(3.2.4)

Algoritmul Gauss-Seidel de rezolvare:


Deoarece metoda Gauss-Seidel este o metod iterativ, trebuie specicat o condiie de oprire a
algoritmului. n continuare vom folosi urmtoarea condiie de oprire a algoritmului:
n

(x
i 1

( k 1)
i

xi( k ) ) n .

(3.2.5)

Etapele algoritmului:
1. generarea matricei A a sistemului i a vectorului b, unde n - numrul de necunoscute (numrul de
linii ale matricei A)
2. generarea matricelor L, D, U i vericarea convergenei metodei:

L D 1 U 1
3. construcia traiectoriei Gauss-Seidel, repet (3.2.3) i (3.2.4) pn cnd are loc (3.2.5)
Metodei Gauss-Seidel i se mai zice metoda iteraiilor succesive, pentru c la un pas careva

k 0 , de ndat ce o coordonat a soluiei este calculat, ea se utilizeaz n ecuaiile pentru


coordonatele urmtoare xi( k 1) , i j. [9]

50

Exemplul :
S se rezolve sistemul de ecuaii liniare prin metoda Seidel:
9ax1 x2 x3 x4 9a 1
x 10ax x 2 x 10a 2
1
2
3
4

2 x1 x2 11ax3 x4 11a 2
x1 2 x2 x3 12ax4 12a 2

Rezolvare:
Fie a=3, vom obine sistemul:

27 x1 x2 x3 x4 26
25 x1 26 2 x1 x2 x3 x4
x 30 x x 2 x 28
25 x 28 x 5 x x 2 x
1

2
3
4
1
2
3
4
2

2
x

33
x

31
35
x

31

2
x

2
x

x
1
2
3
4
3
1
2
3
4

x1 2 x2 x3 36 x4 38
35 x4 38 x1 2 x2 x3 x4
26 2
1
1
1

x1 25 25 x1 25 x2 25 x3 25 x4

1,0400 0,0800 0,0400 0,0400 0,0400


x 28 1 x 5 x 1 x 2 x

2
1
2
3
4
1,1200 0,0400 0,2000 0,0400 0,0800

25 25
25
25
25

.
0,8858 0,0571 0,0286
0,0571 0,0286
x 31 2 x 1 x 2 x 1 x

3 35 35 1 35 2 35 3 35 4
-1,0858 0,0286
0,0571 0,0286 0,0286

38 1
2
1
1
x4 x1 x2 x3 x4
35 35
35
35
35

Vom calcula norma dup formulele: 1 max aij 1 i


j 1

1
1
1
2
25 25 25 25

5
1
2
1

25
25
25 25

, de unde:
2
1
2
1


35
35
35
35
1
2
1
1


35
35
35
35

max aij 1
i 1

3 4 3
5
; ; ;
1
25 35 35
25
54
2
10
16
max
;
;
;
1
350 350
350
350

1 max

Deci procesul iterativ converge.


Calculm prima iteraie, vom lua n calitate de aproximaie iniial:
x(0) x1(0) , x2(0) , x3(0) , x4(0) 0, 0, 0, 0 .

51

26
26

(1) 26
x1(1)
x1(1)

x1 25
25
25

28 1 26
28 26
(1)
(1)

x (1) 674
x2
x2

2
25 25 25
25 625
625

31
2
26
1
674
31
52
674
20001

x (1)
x3(1)
x3(1)

3
35 35 25 35 625
35 875 21875
21875

38 1 26 2 674 1 20001
38 26 1348
20001
835679
x4(1)
x4(1)
x4(1)

35 35 25 35 625 35 21875
35 875 21875 765625
765625

26 674 20001 835679


Am obinut prima iteraie: x(1) x1(1) , x2(1) , x3(1) , x4(1) ,
,
,
.
25 625 21875 765625

Verificm condiia: x(1) x(0) , 0.1


x1(1) x1(0)

26
0 , 0.1
25

x2(1) x2(0)

674
0 , 0.1
625

x3(1) x3(0)

20001
0 , 0.1
21875

x4(1) x4(0)

835679
0 , 0.1
765625

Calculm a doua iteraie, vom lua n calitate de aproximaie:


26 674 20001 835679
x(1) x1(1) , x2(1) , x3(1) , x4(1) ,
,
,
.
25 625 21875 765625

26 2 26 1 674 1 20001 1 835679

x1(2)


25 25 25 25 625 25 21875 25 765625

28 1 17603686 5 674 1 20001 2 835679

x2(2)


25 25 19140625 25 625 25 21875 25 765625

31 2 17603686 1 74957614
2 20001 1 835679
(2)

x3


35 35 19140625 35 478515625 35 21875 35 765625

38 1 17603686 2 74957614
1 16141870664 1 835679
x4(2)



35 35 19140625 35 478515625 35 16748046875 35 765625

17603686

(2)
x1 19140625

x1(2) 0,9197027787755102
x (2) 74957614
(2)
2
x 0,1566461157877551
478515625

2 (2)
x (2) 16141870664
x3 0,963806155098309
3
x4(2) 1,270953238149129
16748046875

617914130481
x4(2)
586181640625

Am obinut prima iteraie:


74957614 16141870664 617914130481
17603686
x(2) x1(2) , x2(2) , x3(2) , x4(2)
,
,
,
.
19140625 478515625 16748046875 586181640625

Verificm condiia: x(2) x(1) , 0.1


52

x1(2) x1(1)

17603686 26
2302564

, 0.1
19140625 25
19140625

x2(1) x2(0)
x3(2) x3(1)

74957614 674 441073636

, 0.1
478515625 625 478515625

16141870664 20001
828605039

, 0.1
16748046875 21875 16748046875

x4(1) x4(0)

617914130481 835679
1257730864856

, 0.1
586181640625 765625
586181640625

Observaie:
Celelalte iteraii se calculeaz asemnator celor anterioare. Rezolvarea sistemului dat cuprinde 3
iteraii pentru 0.1 , iar pentru 0.001 rezolvarea sistemului cuprinde 5 iteraii.

53

2.3.3 Metoda relaxrii successive


Metoda relaxrii succesive este o metod de rezolvare numeric a sistemelor de tip
Cramer, prin aproximaii succesive. Aceast metod se deosebete de metoda GaussSeidel prin aceea c se introduc corecile:
x( k ) x( k 1) x( k ) , k 0,1, 2,...

(3.3.1)

Matricea A a sistemului se descompune n suma L + D + U, unde L este matrice


triunghiular subdiagonal, D - matrice diagonal i U - matrice triunghiular supradiagonal.
Pentru

un

x( k 1) ( L

x(0)

vector

irul

de

vectori

1
D)1 {b [(1 ) D U] x( k ) }, k 0,1, 2,...

x (k) definit

prin:
(3.3.2)

se numete traiectoria vectorului x (0) obinut prin relaxri succesive.


Traiectoria vectorului x (0) obinut prin relaxri succesive converge dac i numai dac raza
spectral a matricei este strict subunitar

( L

1
D)1 [(1 ) D U]

(3.3.3)

n caz de convergen, componentele x1( k 1) , x2( k 1) ,..., xn( k 1) ale vectorului x ( k 1) situat pe traiectoria
vectorului x (0) obinut prin relaxri succesive sunt date relaiile:
n

j 2

a11

i 1

x1( k 1) (1 ) x1( k ) [(b1 a1 j x(jk ) )]


xi( k 1) (1 ) xi( k ) [(bi aij x(jk 1)
j 1

(3.3.4)

j i 1

ij

x(jk ) )]

aii

, i 2, n

[10]

(3.3.5)

Observaie:
Metoda Gauss-Seidel este un caz particular al metodei relaxrii succesive, pentru care 1 .
Algoritmul metodei:
Deoarece metoda relaxrii succesive este o metod iterativ, trebuie specificat o condiie de oprire
a algoritmului. Aceast condiie este similar cu cea folosit n paragraful anterioar, i anume:
n

(x
i 1

( k 1)
i

xi( k ) ) n .

(3.3.6)

Etapele algoritmului:
1. generarea matricei A a sistemului i a vectorului b, unde n - numrul de necunoscute (numrul de
linii ale matricei A)
2. generarea matricelor L, D, U i vericarea convergenei metodei:
54

1

1
1
L D [(1 ) D U ]

1 i (0, 2) .

3. construcia traiectoriei relaxrilor succesive, repet (3.3.4) i (3.3.5) pn cnd are loc (3.3.6)

Exemplul :
S se rezolve sistemul de ecuaii liniare prin metoda relaxrii successive:
S se gseasc primele 3 elemente ale traiectoriei vectorului (0, 0)T , utiliznd metoda relaxrii
succesive cu 0.5 , pentru sistemul:

4 x y 1

4 x 3 y 2
Rezolvare:

4 1
1
Sistemul se poate scrie sub forma Ax = b, unde: A
, b .
4 3
2
0 0
4 0
0 1
Matricea A se descompune n suma L + D + U, cu: L
, D
, U
.
4 0
0 3
0 0
Algoritmul converge dac raza spectral a matricei:
1
1
0.500 0.125

1
M L D 1 D U
,

0.333 0.583

este strict subunitar. Efectund calculele, obinem c (M ) 0.75 1 , deci algoritmul este
convergent.
n continuare, aplicm formulele (3.3.4) i (3.3.5), plecnd de la punctele x(0) = 0, y(0) = 0
obinem:
x(1) = 0.1250000000

y(1) = 0.5000000000

x(2) = 0.1250000000

y(2) = 0.7500000000

x(3) = 0.0937500000

y(3) = 0.9166666667

Pentru comparaie, am determinat soluia exact a sistemului considerat:


x = 0.125;

y = 0.5;

55

Capitolul III:
APLICAII UTILIZND LIMBAJUL PASCAL
I BORLAND DELPHI 7.0
3.1 Metode exacte directe de rezolvare a sistemelor de ecuaii
liniare
Rezultatele obinute n urma compilrii programelor sunt prezentate n Anexa 2
PROBLEMA 1 (PASCAL)
S se alctuiasc un program Pascal pentru a calcula urmtoarele operaii pentru matrici ptratice:
A B;

A B;

k A;

A2 ;

AT ;

A B;

B A;

k B;

B2;

BT ;

det ( A);
det ( B).

REZOLVARE:
Program P1;
uses crt;
type matrice=array[1..20,1..20] of real;
vector=array[1..20] of real;
var a,b,c,e,sum,dif,ta,tb,prod1,prod2,
prod3,prod4,scalar1,scalar2:matrice;
n,i,j:byte;
determ:real;
Procedure Int_Matrice_A(var k:matrice);
var IntM:matrice;i,j:integer;
begin
writeln('Introducerea elementelor matricei A: ');
For i:=1 to n do
For j:=1 to n do
begin
write('a[',i,',',j,']=');
readln(intM[i,j]);
end;
k:=intm;
end;
Procedure Int_Matrice_B(var k:matrice);
var IntM:matrice;i,j:integer;
begin
writeln('Introducerea elementelor matricei B: ');

56

For i:=1 to n do
For j:=1 to n do
begin
write('b[',i,',',j,']=');
readln(intM[i,j]);
end;
k:=intm;
end;
Procedure Afisare_Matrice(h:matrice);
var i,j:integer;
begin
For i:=1 to n do
begin
For j:=1 to n do
write(h[i,j]:8:2);
writeln;
end;
end;
Procedure Sum_Matrice(var l,m,c:matrice);
var i,j:integer;
begin
For i:=1 to n do
For j:=1 to n do
c[i,j]:=l[i,j]+m[i,j];
end;
Procedure Dif_matrice(var l,m,c:matrice);
var i,j:integer;
begin
For i:=1 to n do
For j:=1 to n do
c[i,j]:=l[i,j]-m[i,j];
end;
Procedure Prod_matr_k(var m,c:matrice);
var k1:real;i,j:integer;
begin
writeln('Introducerea scalarului k');
readln(k1);
For i:=1 to n do
begin
For j:=1 to n do
c[i,j]:=k1*m[i,j];
end;
end;
Procedure Produs_matrice(var q,m,c:matrice);
var l:real;k:byte; i,j:integer;
begin
For i:=1 to n do
For j:=1 to n do
begin
l:=0;
For k:=1 to n do
l:=l+q[i,k]*m[k,j];
c[i,j]:=l;
end;
end;
Procedure Transpusa(var m,l:matrice);
var i,j:integer;

57

begin
For i:=1 to n do
For j:=1 to n do
l[i,j]:=m[j,i];
end;
Procedure Determinant(var h:matrice; det:real);
var temp:real;t:boolean;iv,x,f:byte;i,j:integer;
begin
det:=1;
for j:=1 to n-1 do
begin
iv:=j;
t:=true;
while (iv<=n) and t do
if h[iv,j]=0 then iv:=iv+1 else t:=false;
if t then begin det:=0;exit;end;
{daca toate elementele de pe coloana iv, de la j la n sunt 0,
atunci determinantul este 0}
if j<> iv then
begin
det:=-det;
for x:=j to n do
begin
temp:=h[j,x];
h[j,x]:=h[iv,x];
h[iv,x]:=temp;
end;
end;
for f:=j+1 to n do
for x:=j+1 to n do
h[f,x]:=h[f,x]-h[j,x]*h[f,j]/h[j,j];
end;
for j:=1 to n do det:=det*h[j,j];
writeln('Valoarea determinantului este:',det:10:2);
end;
BEGIN
clrscr;
writeln('Introducerea dimensiunii matricelor: n= ');
readln(n);
int_matrice_A(a);
int_matrice_B(b);
Sum_matrice(a,b,sum);
Dif_matrice(a,b,dif);
Produs_matrice(a,b,prod1);
Produs_matrice(b,a,prod2);
Prod_matr_k(a,scalar1);
Prod_matr_k(b,scalar2);
Produs_matrice(a,a,prod3);
Produs_matrice(b,b,prod4);
Transpusa(a,ta);
Transpusa(b,tb);
writeln('Matricea A');
afisare_matrice(a);
readkey;writeln;
writeln('Matrica B');
afisare_matrice(b);
readkey;writeln;
writeln('Suma matricelor: A+B');
afisare_matrice(sum);
readkey;writeln;

58

writeln('Diferenta matricelor: A-B');


afisare_matrice(dif);
readkey;writeln;
writeln('Produsul matricelor: A*B');
afisare_matrice(prod1);
readkey;writeln;
writeln('Produsul matricelor: B*A');
afisare_matrice(prod2);
readkey;writeln;
writeln('Inmultirea cu un scalar: s1*A');
afisare_matrice(scalar1); readkey;writeln;
writeln('Inmultirea cu un scalar: s2*B');
afisare_matrice(scalar2); readkey;writeln;
writeln('Patratul matricei A: A*A');
afisare_matrice(prod3);
readkey;writeln;
writeln('Patratul matricei B: B*B');
afisare_matrice(prod4);
readkey;writeln;
writeln('Transpusa matricei A');
afisare_matrice(ta);
readkey;writeln;
writeln('Transpusa matricei B');
afisare_matrice(tb);
readkey;writeln;
writeln('Determinantul matricei A:');
Determinant(a,determ);
readkey;writeln;
writeln('Determinantul matricei B:');
Determinant(b,determ);
readkey;writeln;
writeln('Sfarsitul programului');
readkey;
end.

PROBLEMA 2 (PASCAL)
Calcularea soluiilor sistemului de ecuaii liniare utiliznd metoda lui Cramer i metoda lui Gauss.
Rezultatul se va afia n documentul Cramer_Gauss.txt
REZOLVARE:
Program P2;
uses crt;
type matrice=array[1..20,1..20] of real;
vector=array[1..20] of real;
var a,c:matrice;
w:text;
n,i,j,k,l,iv,i1,j1,q1,q2:integer;
determ,temp:real;
d,x,b:vector;
t: boolean;
Procedure Int_Matrice(var k:matrice);
var IntM:matrice;
i,j:integer;
begin
writeln('Introducerea elementelor matricei: ');
For i:=1 to n do
For j:=1 to n do
begin
write('a[',i,',',j,']=');readln(IntM[i,j]);
end;
k:=IntM;
end;
Procedure Afisare_Matrice(h:matrice);

59

var i,j:integer;
begin
For i:=1 to n do
begin
For j:=1 to n do
write(w,h[i,j]:2:0); writeln(w);
end;
end;
Procedure Afisare_sistem(a:matrice;b:vector;n:integer);
var i,j:integer;
begin
for i:=1 to n do
begin
write(w,a[i,1]:5:2,' x',1);
for j:=2 to n do
write(w,' + ',a[i,j]:5:2,' x',j);
writeln(w,' = ',b[i]:5:2);
end;
end;
Function Determinant(h:matrice):real;
var temp,det:real;
t:boolean;
iv,x,f:byte;
i,j:integer;
begin
det:=1;
for j:=1 to n-1 do
begin
iv:=j; t:=true;
while (iv<=n) and t do
if h[iv,j]=0 then iv:=iv+1 else t:=false;
if t then
begin
det:=0;exit;
end;
if j<> iv then
begin
det:=-det;
for x:=j to n do
begin
temp:=h[j,x];
h[j,x]:=h[iv,x]; h[iv,x]:=temp;
end;
end;
for f:=j+1 to n do
for x:=j+1 to n do
h[f,x]:=h[f,x]-h[j,x]*h[f,j]/h[j,j];
end;
for j:=1 to n do det:=det*h[j,j];
determinant:=det;
end;
BEGIN
clrscr;
assign(w,'Cramer_Gauss.txt'); rewrite(w);
writeln('Introduceti dimensiunea matricii, n= ');
readln(n);
writeln('Introduceti matricea extinsa a sistemului ');

60

for i:=1 to n do
begin
for j:=1 to n do
begin
write('a[',i,',',j,']='); readln(a[i,j]);
end;
write('b[',i,']='); readln(b[i]);
end;
writeln(w,'');
writeln(w,'Sistemul initial este: ');
Afisare_sistem(a,b,n);
writeln(w,'');
writeln(w,'Matricea A este:');
Afisare_matrice(a);
writeln(w,'');
writeln(w,'Metoda lui Cramer: ');
writeln(w,'');
Determ:=determinant(a);
writeln(w,'Determinantul matricii sistemului este: ');
writeln(w,determ:10:2);
writeln(w,'');
writeln(w,'Minorii sunt:');
for q1:=1 to n do
begin
c:=a;
for q2:=1 to n do
c[q2,q1]:=b[q2];
writeln(w,'');
writeln(w,'Matricea D',q1);writeln;
afisare_matrice(c);
d[q1]:=determinant(c);
writeln(w,'Dx',q1,'=',d[q1]:10:2);
if determ<>0 then x[q1]:=d[q1]/determ;writeln;
end;
writeln(w,'');
writeln(w,'Solutiile sistemului sunt:');
for i:=1 to n do
writeln(w,'x[',i,']=',x[i]:10:5); writeln(w,'');
writeln(w,'Metoda lui Gauss: '); writeln(w,'');
writeln(w,'Solutia sistemului este:');
for j:=1 to n-1 do
begin
iv:=j;t:=true;
while (iv<=n) and t do
if a[iv,j]=0 then iv:=iv+1 else t:=false;
if t then
begin
writeln('Determinantul principal este nul!'); exit;
end;
if j<>iv then
begin
for k:=j to n do
begin
temp:=a[j,k];
a[j,k]:=a[iv,k];
a[iv,k]:=temp;
end;

61

temp:=b[j];
b[j]:=b[iv];
b[iv]:=temp;
end;
for l:=j+1 to n do
begin
for k:=j+1 to n do
a[l,k]:=a[l,k]-a[j,k]*a[l,j]/a[j,j];
b[l]:=b[l]-b[j]*a[l,j]/a[j,j];
end;
end;
if a[n,n]=0 then
begin
writeln('Determinantul principal este nul!');exit;
end;
x[n]:=b[n]/a[n,n];
for i:=n-1 downto 1 do
begin
temp:=b[i];
for j:=i+1 to n do
temp:=temp-a[i,j]*x[j];
x[i]:=temp/a[i,i];
end;
for i:=1 to n do
writeln(w,'x',i,'=',x[i]:10:5 );
writeln('Vezi fisierul Cramer_Gauss.txt');
close(w);
readkey;
end.

PROBLEMA 3 (PASCAL)
Calcularea soluiilor sistemului de ecuaii liniare utiliznd factorizarea LU.
REZOLVARE:
Program P3;
uses crt;
label 1;
type matrice=array[1..20,1..20] of real;
vector=array[1..20] of real;
var a,l,u:matrice;
b,x,y:vector; i,j,n,k1:byte;dd:real;
f:text;
Procedure Init;
begin
write('Introdu n=');readln(n);writeln(f,'n=',n);
writeln('Introdu elementele matricii A:');
for i:=1 to n do
for j:=1 to n do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
writeln('Introdu coloana termenilor liberi, B:');
for i:=1 to n do
begin

62

write('b[',i,']=');
readln(b[i]);
end;
writeln(f,'Datele initiale:');
for i:=1 to n do
begin
write(f,'| ');
for j:=1 to n do
write(f,a[i,j]:9:2);
writeln(f,' |',' |x',i,'|',' |',b[i]:9:2,'|');
end;
end;
Function Determinant(q:byte):real;
var temp,det:real;t:boolean;iv,x,f:byte;
h:matrice;
begin
det:=1;h:=a;
for j:=1 to q-1 do
begin
iv:=j; t:=true;
while (iv<=n) and t do
if h[iv,j]=0 then iv:=iv+1
else t:=false;
if t then begin det:=0;exit;
end;
{daca toate elementele de pe coloana iv, de la j la n sunt 0,atunci determinantul
este 0}
if j<> iv then
begin
det:=-det;
for x:=j to q do
begin
temp:=h[j,x];
h[j,x]:=h[iv,x];
h[iv,x]:=temp;
end;
end;
for f:=j+1 to q do
for x:=j+1 to q do
h[f,x]:=h[f,x]-h[j,x]*h[f,j]/h[j,j];
end;
for j:=1 to q do det:=det*h[j,j];
{ writeln('Valoarea determinantului este:',det:10:2);}
determinant:=det;
end;
Procedure Crout;
var k:byte;s:real;
begin
writeln(f,'Factorizarea Crout:');
for i:=1 to n do
u[i,i]:=1;
for i:=1 to n do
begin
for j:=1 to i do
begin
s:=0;
for k:=1 to j-1 do

63

s:=s+l[i,k]*u[k,j];
l[i,j]:=a[i,j]-s;
end;
for j:=i+1 to n do
begin
s:=0;
for k:=1 to i-1 do
s:=s+l[i,k]*u[k,j];
u[i,j]:=(1/l[i,i])*(a[i,j]-s);
end;
end;
writeln(f,'Matricea U este:');
for i:=1 to n do
begin
for j:=1 to n do
write(f,u[i,j]:12:4);
writeln(f);
end;
writeln(f,'Matricea L este:');
for i:=1 to n do
begin
for j:=1 to n do
write(f,l[i,j]:12:4);
writeln(f);
end;
end;
Procedure Doolittle;
var k:byte;s:real;
begin
for i:=1 to n do
for j:=1 to n do
begin
u[i,j]:=0;l[i,j]:=0;
end;
writeln(f,'Factorizarea Doolitte:');
for i:=1 to n do
l[i,i]:=1;
for i:=1 to n do
begin
for j:=1 to i-1 do
begin
s:=0;
for k:=1 to i do
s:=s+l[i,k]*u[k,j];
l[i,j]:=(1/u[j,j])*(a[i,j]-s);
end;
for j:=i to n do
begin
s:=0;
for k:=1 to i-1 do
s:=s+l[i,k]*u[k,j];
u[i,j]:=a[i,j]-s;
end;
end;
writeln(f,'Matricea U este:');
for i:=1 to n do
begin

64

for j:=1 to n do
write(f,u[i,j]:12:4);
writeln(f);
end;
writeln(f,'Matricea L este:');
for i:=1 to n do
begin
for j:=1 to n do
write(f,l[i,j]:12:4);
writeln(f);
end;
end;
Procedure Intermediar_Y;
var s:real;
begin
y[1]:=b[1]/l[1,1];
for i:=2 to n do
begin
s:=0;
for j:=1 to i-1 do
s:=s+l[i,j]*y[j];
y[i]:=(b[i]-s)/l[i,i];
end;
writeln(f,'Vectorul intermediar Y:');
for i:=1 to n do
write(f,y[i]:9:4);
writeln(f);
end;
Procedure Solutia_X;
var s:real;
begin
x[n]:=y[n]/u[n,n];
for i:=n-1 downto 1 do
begin
s:=0;
for j:=i+1 to n do
s:=s+u[i,j]*x[j];
x[i]:=(y[i]-s)/u[i,i];
end;
writeln(f,'Solutia X:');
for i:=1 to n do
write(f,x[i]:9:4);
writeln(f);
end;
Begin
clrscr;
assign(f,'sol_fact.txt'); rewrite(f);
Init;
for k1:=1 to n do
begin
dd:=Determinant(k1);
if dd=0 then
begin
writeln(f,'Factorizarea LU nu poate fi aplicata');
goto 1;
end;
writeln(f,'Valoarea determinantilor de colt:');

65

for i:=1 to k1 do
begin
write(f,'| ');
for j:=1 to k1 do
write(f,a[i,j]:9:2);
writeln(f,' |');
end;
writeln(f,'D',k1,'=',dd:10:2);
end;
Crout; Intermediar_Y; Solutia_X;
Doolittle; Intermediar_Y; Solutia_X;
close(f);
1:readkey;
End.

PROBLEMA 4 (PASCAL)
Obinerea inversei unei matrici patratice prin metoda Cholesky, utiliznd pointeri.
REZOLVARE:
Program P4;
Uses Crt;
Type
pMAT = ^MAT;
MAT = Array[0..20,0..20] of Double;
pVEC = ^VEC;
VEC = Array[0..20] of Double;
Var
A : pMAT; {Matricea de intrare de dimensiune n,n}
A1: pMAT; {Copie A pentru verificare}
B : pMAT; {Inversa matricii A de dimensiune nn}
C : pMAT; {Pastrarea solutiei A1*B=I}
i,j,n: Integer;
Procedure choldc1(n:integer; Var a:pMAT; Var p:pVEC); Forward;
Procedure choldc(n:integer; A:pMAT; Var aa:pMAT);
Var i,j:integer; p:pVEC;
Begin
New(p);
for i := 0 to n-1 do
for j := 0 to n-1 do
aa^[i,j] := A^[i,j];
choldc1(n, aa, p);
for i := 0 to n-1 do
begin
aa^[i,i] := p^[i];
for j := i + 1 to n-1 do aa^[i,j] := 0.0
end;
Dispose(p)
End;
Procedure choldcsl(n:integer; A:pMAT; Var aa:pMAT);
Var i,j,k:integer; sum:double; p:pVEC;
Begin
New(p);
for i := 0 to n-1 do
for j := 0 to n-1 do
aa^[i,j] := A^[i,j];

66

choldc1(n, aa, p);


for i := 0 to n-1 do
begin
aa^[i,i] := 1.0 / p^[i];
for j := i + 1 to n-1 do
begin
sum := 0.0;
for k := i to j-1 do sum := sum - aa^[j,k] * aa^[k,i];
aa^[j,i] := sum / p^[j];
end
end;
Dispose(p)
End;
Function choldet(n:integer; a:pMAT): Double;
Var c:pMAT; d:double; i,j:integer;
Begin
New(c);
d:=1.0;
choldc(n,a,c);
for i := 0 to n-1 do d := d * c^[i,i];
choldet := d * d;
Dispose(c)
End;
Procedure cholsl(n:integer; A:pMAT; Var aa:pMAT);
Var i,j,k:integer;
Begin
choldcsl(n,A,aa);
for i := 0 to n-1 do
for j := i + 1 to n-1 do
aa^[i,j] := 0.0;
for i := 0 to n-1 do
begin
aa^[i,i] := aa^[i,i] * aa^[i,i];
for k := i + 1 to n-1 do
aa^[i,i] := aa^[i,i] + aa^[k,i] * aa^[k,i];
for j := i + 1 to n-1 do
for k := j to n-1 do
aa^[i,j] := aa^[i,j] + aa^[k,i] * aa^[k,j];
end;
for i := 0 to n-1 do
for j := 0 to i-1 do
aa^[i,j] := aa^[j,i]
End;
Procedure choldc1(n:integer; Var a:pMAT; Var p:pVEC);
Var i,j,k:integer; sum:double;
Begin
for i := 0 to n-1 do
begin
for j := i to n-1 do
begin
sum := a^[i,j];
for k := i - 1 Downto 0 do
sum := sum - a^[i,k] * a^[j,k];
if i = j then
begin
if sum <= 0 then
writeln(' Matricea nu este pozitiv definita!');

67

p^[i] := sqrt(sum);
end
else
a^[j,i] := sum / p^[i]
end;
end;
End;
Procedure MatPrint(s:String;n:integer; A:pMAT);
Var i,j:integer;
Begin
writeln; writeln(' ',s);
for i:=0 to n-1 do
begin
for j:=0 to n-1 do write(' ',A^[i,j]:10:6);
writeln
end
End;
Function Check_Matrix(n:integer;A:pMAT):Boolean;
var i,j,k:integer; sum:double;
begin
Check_Matrix:=True;
for i := 0 to n-1 do
begin
for j := i to n-1 do
begin
sum := a^[i,j];
for k := i - 1 Downto 0 do
sum := sum - a^[i,k] * a^[j,k];
if i = j then
if sum <= 0 then Check_Matrix:=False
end;
end;
end;
Procedure MATMULT(n:Integer;A,B:pMAT; VAR C: pMAT);
VAR
SUM : DOUBLE;
I,J,K : integer;
BEGIN
for I:=0 to n-1 do
for J:=0 to n-1 do
begin
SUM:= 0.0;
for K:=0 to n-1 do
SUM:=SUM+A^[I,K]*B^[K,J];
C^[I,J]:=SUM
end
END;
Procedure MatCopy(n:Integer; A:pMAT; VAR A1:pMAT);
Var i,j: Integer;
Begin
For i:=0 to n-1 do
For j:=0 to n-1 do
A1^[i,j]:=A^[i,j]
End;
{ programul principal pentru a demonstra utilizarea funciei cholsl () }
BEGIN

68

New(A); New(A1); New(B);


writeln(' Obtinerea inversei unei matrici patratice, simetrice prin metoda
Cholesky');
writeln(' (Matricea trebuie sa fie pozitiv definita).');
n := 4;
writeln;
writeln(' Size = ', n);
{definesc jumatatea inferioara a matricei simetrice}
A^[0,0]:= 5;
A^[1,0]:=-1; A^[1,1]:= 5;
A^[2,0]:=-1; A^[2,1]:=-1; A^[2,2]:= 5;
A^[3,0]:=-1; A^[3,1]:=-1; A^[3,2]:=-1; A^[3,3]:= 5;
{definesc jumatatea superioara a matricei simetrice}
For i:=0 to n-1 do
For j:=i+1 to n-1 do
A^[i,j]:=A^[j,i];
MatPrint('Matrix A:',n,A);
writeln;
if Check_Matrix(n,A) then
begin
MatCopy(n,A,A1);
writeln(' Determinant = ', choldet(n,A):10:6);
cholsl(n,A,B);
MatPrint('Matrix Inv(A):',n,B)
end
else
writeln(' Scuze, aceasta matrice nu este pozitiv definita !');
writeln;
write(' Doriti sa verificati (y/n)?: ');
if Readkey='y' then
begin
New(C);
MatMult(n,A1,B,C); Writeln;
MatPrint('Verificare A * Inv(A) = I:',n,C);
Dispose(C); Readkey
end;
Dispose(A); Dispose(A1); Dispose(B);
END.

PROBLEMA 5 (PASCAL)*
Calcularea soluiilor sistemului de ecuaii liniare utiliznd factorizarea QR.
REZOLVARE:
Program P5;
type matr=array[1..20,1..20]of real;
vect=array[1..20]of real;
var a,q,h,c,d,u:matr;
v:vect; s:real;
n,i,j,k:integer;
procedure citire(var n:integer;var a:matr);
var i,j:integer;
begin
write('Introdu dimensiunea matricii A, n=');readln(n);
writeln('Introduceti coeficientii matricei:');

69

for i:=1 to n do
for j:=1 to n do
begin
write('a(',i,',',j,')=');
readln(a[i,j]);
end;
end;
procedure prod_matr(a,b:matr;n:integer;var c:matr);
var i,j,k:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
c[i,j]:=0;
for k:=1 to n do
c[i,j]:=c[i,j]+a[i,k]*b[k,j];
end;
end;
Begin
citire(n,a);
for i:=1 to n do
for j:=1 to n do
if i=j then u[i,j]:=1
else u[i,j]:=0;q:=u;
for k:=1 to n-1 do
begin
for i:=1 to k-1 do
v[i]:=0;s:=0;
for i:=k to n do
s:=s+sqr(a[i,k]);
v[k]:=a[k,k]+sqrt(s);
for i:=k+1 to n do
v[i]:=a[i,k]; s:=0;
for i:=1 to n do
s:=s+sqr(v[i]);
for i:=1 to n do
for j:=1 to n do
h[i,j]:=u[i,j]-2*v[i]*v[j]/s;
prod_matr(h,a,n,c);
prod_matr(q,h,n,d);
a:=c;q:=d;
writeln('Matricea Q este:');
for i:=1 to n do
begin
for j:=1 to n do
write(q[i,j]:10:4);writeln;
end;
writeln('Matricea R este:');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:10:4);writeln;
end;
readln;
end;
end.

70

3.2 Metode exacte indirecte de rezolvare a sistemelor de ecuaii


liniare
PROBLEMA 6 (PASCAL)
Calcularea soluiilor sistemului de ecuaii liniare utiliznd metoda lui Jacobi.
REZOLVARE:
Program P6;
uses crt;
const eps=1E-4;
type vector=array[1..10] of real;
matrice=array[1..10,1..10] of real;
var n,i,j,k:integer;
a,x:matrice;
b,s1,s2:vector;
BEGIN
clrscr;
write('Introdu numarul de ecuatii ale sistemului n='); readln(n);
writeln('Introdu componentele matricii sistemului si termenilor liberi');
for i:=1 to n do
begin
for j:=1 to n do
begin
write('a(',i,',',j,')='); read(a[i,j]);
end;
write('b(',i,')=');read(b[i]);
end;
writeln('Matricea extinsa este: ');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:10:5,' '); writeln(b[i]:12:5);
end;
writeln; k:=1;
for i:=1 to n do x[i,k]:=0;
repeat
writeln('Numarul iteratiei k=',k);
for i:=1 to n do
begin
s1[i]:=0; s2[i]:=0;
for j:=1 to n do
begin
if j<i then s1[i]:=s1[i]+a[i,j]*x[j,k]
else if j>i then s2[i]:=s2[i]+a[i,j]*x[j,k];
end;
x[i,k+1]:=(b[i]-s1[i]-s2[i])/a[i,i];
writeln('x(',i,',',k+1,')=',x[i,k+1]:10:5);
end;
writeln; readkey;
k:=k+1;
until abs(x[n,k]-x[n,k-1])<eps;readkey;
END.

71

PROBLEMA 7 (PASCAL)
Calcularea soluiilor sistemului de ecuaii liniare utiliznd metoda Gauss - Seidel.
REZOLVARE:
Program P7;
uses crt;
const epsad=1E-2;
type vector=array[1..20]of real;
matrice=array[1..20,1..20]of real;
var n,i,j,k:integer;
a,x:matrice;
b,s1,s2:vector;
Begin
clrscr;
write('Introduceti numarul de ecuatii ale sistemului n=');
readln(n);
writeln('Introduceti componentele matricei sistemului si termenul liber');
for i:=1 to n do
begin
for j:=1 to n do
begin
write('a(',i,',',j,')=');
read(a[i,j]);
end;
write('b(',i,')='); readln(b[i]);
end;
writeln('Matricea extinsa este:');
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:8:5,' ');
writeln(b[i]:8:5);
end;
writeln;k:=1;
for i:=1 to n do x[i,k]:=0;
repeat
writeln('Numarul iteratiei k=',k);
for i:=1 to n do
begin
s1[i]:=0; s2[i]:=0;
for j:=1 to n do
begin
if j<i then s1[i]:=s1[i]+a[i,j]*x[j,k+1]
else if j>i then s2[i]:=s2[i]+a[i,j]*x[j,k];
end;
x[i,k+1]:=(b[i]-s2[i])/a[i,i];
writeln('x(',i,',',k+1,')=',x[i,k+1]:8:5);
end;
k:=k+1;
until abs(x[i,k]-x[i,k-1])<epsad;
readkey;
end.

72

3.3 Aplicaii utiliznd softul Borland Delphi 7.0


Embarcadero Delphi, cunoscut anterior ca CodeGear Delphi i Borland Delphi, este un mediu de
dezvoltare a programelor pentru Microsoft Windows, produs iniial de firma american Borland,
deinut i dezvoltat n prezent de Embarcadero Technologies. Delphi 2010 este cea mai recent
versiune i este distribuit n trei ediii: Professional, Enterprise i Architect. Acesta ofer interfee
programatorului pentru a construi o aplicaie folosind Extensible Markup Language (XML), Extensible
Stylesheet Language (XSL), Simple Object Access Protocol (SOAP) i Web Services Description
Language (WSDL). Bazat pe limbajul de programare obiect Pascal.
Delphi este un mediu de programare i nu un limbaj de programare. Aceasta nseamn c mediul
Delphi este un editor n care programatorul scrie instruciuni ntr-un limbaj de programare, folosit
pentru dezvoltarea de aplicaii. Partea cea mai important din aplicaie care se poate construi cu
ajutorul mouse-ului este interfaa. Sistemul de operare Windows a stabilit un set de reguli pe care
trebuie s le respecte fiecare aplicaie pentru a putea fi executat n acest sistem de operare. Fiecare
aplicaie Windows conine o fereastr, eventual un meniu, butoane, cutii de editare, .a.m.d. Exist un
set finit de obiecte furnizate de ctre Windows i care pot alctui interfaa aplicaiei. Vom ncerca s
construim cteva aplicaii simple n care vom pune n lumin conceptele de baz ale programrii sub
mediul Delphi.
Aplicaiile obinute, ct i modul de realizare a acestora pot fi vizualizate n Anexa 3

73

CONCLUZII
Analiza numeric este studiul algoritmilor pentru rezolvarea problemelor
matematicii continue.
Lloyd N. Trefethen
Cuvntul cheie este algoritm. Dei foarte multe lucrri nu evideniaz acest lucru, n centrul
ateniei Analizei numerice st proiectarea i analiza algoritmilor de rezolvare a unei anumite clase de
probleme. Problemele sunt cele din matematica continu. ,,Continu nseamn aici faptul c
variabilele ce intervin sunt de tip real sau complex. Deoarece numerele reale i complexe nu pot fi
reprezentate exact n calculator, ele trebuie aproximate printr-o reprezentare finit. Din acest moment
intervin erorile de rotungire i studiul lor este unul din obiectivele importante ale Analizei numerice.
Un argument n sprijinul acestei idei, n afar de omniprezena erorilor, este dat de metodele exacte
de rezolvare a sistemelor de ecuaii liniare, cum ar fi eliminarea gaussian.
Cele mai multe probleme ale matematicii continue nu pot fi rezolvate prin algoritmi aa-zii finii,
chiar presupunnd prin absurd c am lucra n aritmetic cu precizie exact. Un prim exemplu care se
poate da aici este problema rezolvrii unei ecuaii polinomiale. Acest lucru se evideniaz la
problemele de valori i vectori proprii, dar apar i n orice problem ce presupune termeni neliniari
sau derivate - determinarea zerourilor, cuadraturi, ecuaii difereniale i integrale, optimizare etc.
Metodele numerice - parte din disciplinele fundamentale de pregtire a studenilor din domeniul
ingineriei, avnd ca scop prezentarea principiilor i relaiilor de calcul matematic, numeric, care astzi
st la baza construciilor programelor de calcul profesionale utilizate n prezent de orice inginer
MatCad, MatLab, Mathematica, Nastran, etc. Aceste principii i relaii de calcul se refer la operaiile
de interpolare, derivare i integrare numeric, precum i la metodele de rezolvare a ecuaiilor,
sistemelor de ecuaii liniare sau sistemelor de ecuaii difereniale.
Algebra liniar i metodele numerice reprezint seciunea matematicii computaionale, dedicate
studiului de soluionare numeric a problemelor de algebra liniar. Metodele numerice prezentate n
lucrare permit rezolvarea unor probleme celebre care au preocupat pe matematiceni i ingineri de-a
lungul timpului, unele din acestea purtnd numele lor (Anexa 1).
Multe din problemele economice, respectiv din aplicaiile matematicii n alte domenii se reprezint
prin intermediul unor sisteme de ecuaii liniare. Sistemele de ecuaii liniare este unul dintre domeniile
matematicii n care metodele numerice i utilizarea calculatorului i-au demonstrat din plin utilizarea.
74

Rezolvarea sistemelor cu un mare numr de ecuaii liniare reprezint unul din domeniile n care
calculatoarele numerice i-au demonstrat din plin eficiena. Problema rezolvrii sistemelor de ecuaii
liniare este foarte des ntlnit n simularea numeric. Nu trebuie uitat c, la reprezentarea numerelor
n calculator nu putem reine dect un numr finit de cifre. Se poate ajunge n situaia ca din cauza
acestor erori, determinantul s devin egal cu zero sau s aib o valoare foarte mic n modul.
Complexitatea implementrilor prezente n bibliotecile matematice se datoreaz n mare parte
tehnicilor de evitare a acestei situaii, dar totodat i eforturilor de minimizare a memoriei utilizate i
a timpului de calcul. La rezolvarea unor sisteme de ecuaii liniare se folosesc diferite metode care au
ca scop reducerea numrului de operaii elementare n raport cu cele corespunztoare metodei clasice
de utilizare a regulei lui Cramer, adic reducerea numrului de date din memoria calculatorului,
scurtarea timpului de calcul i nu n ultimul rind, reducerea erorilor de calcul.
Metodele de rezolvare a sistemelor de ecuaii liniare sunt de dou tipuri: metode directe (metode
de eliminare sau metode exacte), n care soluia este obinut n urma unui numr de operaii dinainte
cunoscut; metode iterative, care se bazeaz pe folosirea unei aproximaii iniiale ce se mbuntete
de la o etap la alta.
,,Problemele matematicii continue sunt problemele pe care tiina i ingineria sunt construite, fr
metode numerice, tiina i ingineria, aa cum sunt ele practicate astzi ar ajunge repede n impas. Ele
sunt de asemenea problemele care au preocupat cei mai muli matematicieni de la Newton pn azi.
La fel ca i cei ce se ocup de matematica pur, specialitii n Analiza numeric sunt motenitorii
marii tradiii a lui Euler, Lagrange, Gauss i a altor mari matematicieni.
Din motivele amintite mai sus am ncercat s realizez o lucrare n care s existe un echilibru ntre
teorie, aspectele algoritmice i implementrile practice. n aceast tez s-a optat pentru:
1. Prezentarea unor modaliti de mbuntire a predrii metodelor numerice de calcul
matriceal, contribuind la dezvoltarea unei gndiri algoritmice i logico-matematice la elevi i
studeni (vezi capitolul I);
2. Aplicarea metodelor numerice la rezolvarea sistemelor de ecuaii liniare (cu i fr parametri),
utilizarea algoritmilor de rezolvare pentru fiecare metod (vezi capitolul II);
3. Elaborarea codurile de program pentru fiecre metod n Turbo Pascal 7.0, realizarea unor
aplicaii n mediul Borland Delphi 7.0 i crearea unit-ului personalizat.
Lucrarea este destinat n primul rind pregtirii studenilor specialitilor cu profil mathematic,
informatics i ethnic. Presupune cunotine minime din algebra liniar i analiz numeric. Sper ca
aceast lucrare s rspund nevoilor actuale ale elevilor i studenilor. Succese i mult baft tuturor
care doresc s studieze i s se aprofundeze n aceast seciune a matematicii computaionale.

75

BIBLIOGRAFIE
Capitolul I
1. Alexandru-Ioan Olteanu, Analiz numeric, Editura Alma Mater Sibiu, 202 pagini, 2005.
2. Brnzei Dan i Roxana, Metodica predrii informaticii, Ed. Dacia, Bucureti, 2012
3. Brnzei Dan i Roxana, Metodica predrii matematicii, Ed. Paralela 45, Piteti, 2010
4. M. Popescu, P. Popescu, Metode Numerice, Ed. Reprograph, Craiova, 2009, 180 pag.,
ISBN 978-973-671-208-1 (editur recunoscut CNCSIS)
5. Web: http://www.scritub.com/profesor-scoala/METODICA-PREDARIIINFORMATICII42919.php (10.02.2016, 19:33)
Capitolul II
1. A. Gremalschi, S. Corlat, A. Braicov, Manualul Informatic pentru clasa a-XII-a, edit.
tiina, Chiinu - 2010, 144 pag.
2. C. Berbente, S. Mitran, S. Zancu, Metode numerice, edit. Tehnic, Bucureti - 1998, 313
pag.
3. C. Ioni, Sisteme de ecuaii liniare i calcul matricial, edit. Printech, Bucureti - 1999, 328
pag.
4. G. Coman, Analiz Numeric, edit. Libris, Cluj-Napoca - 1995, 148 pag.
5. J. Bela, Rezolvarea numeric a sistemelor de ecuaii liniare, edit. Academia Republicii
Populare Romne, Bucureti - 1961, 222 pag.
6. L. Brescu, S. Mari, Metode numerice. Probleme de seminar i lucrri de laborator,
Timioara 2007, 153 pag
7. L. Chiriac, Metode numerice, Chiinu - 2014, 193 pag.
8. M. Popa, R. Militaru, Metode numerice. Aplicaii, 74 pag.
9. M. Popa, R. Militaru, Metode numerice. Note de curs, 45 pag.
10. N. Cotfas, Elemente de algebr liniar, edit. Universitii din Bucureti, 2009, 200 pag.
11. V. Adrian, M. Cornel, P. Cristian, Metode numerice n inginerie, edit. Universitaria,
Bucureti 2005, 270 pag.
12. Web: http://www.math.ubbcluj.ro/~bodo/for_students/Sisteme_de_ec.pdf (25.01.2016,
19:37)

76

13. Web: http://www.tmmate.ro/.../Sisteme%20de%20ecuatii%20clasa%20XI%20Popa%


(27.02.2016, 16:04)

14. Web: https://match82.wikispaces.com/file/view/metoda+matriceala.doc (20.11.2015, 17:43)


Capitolul III
1. Jeffrey R. Chasnov, Introduction to Numerical Methods, The Hong Kong University of
Science and Technology, 2012, 63 pag.
2. Steven C. Chapra, Raymond P. Canale, Sixth Edition, ISBN 9780073401065, 994 pag.
3. Web: http://moodle.ust.md/course/view.php?id=29 (24.01.2016, 18:39)
4. Web: http://www.scritub.com/stiinta/informatica/Dezvoltarea-rapida-de-aplicati63144.php
(04.03.2016, 17:26)

5. Web: https://domashke.net/referati/referaty-po-informatike/kursovaya-rabota-resheniesistemy-linejnyh-uravnenij-metodom-gaussa-i-zhordana-gaussa (28.01.2016, 20:17)


6. .. , .. , .. ,
Borland Delphi, - 2004, 108

77

ANEXE
Anexa 1: Personaliti marcante
Gabriel Cramer (1704 1752) matematician elveian, nscut n Geneva. Cele mai remarcabile
rezultate n matematic le obine n domeniul algebrei i al probabilitii. n 1728 propune o soluie
pentru o celebr problem de teoria probabilitilor, numit Paradoxul de la St. Petersburg. n 1730 a
creat determinanii, sub form de algoritm matematic n legtur cu combinrile i a elaborat ceea ce
ulterior s-a denumit "regula lui Cramer", fiind utilizat la rezolvarea sistemelor de ecuaii liniare. La
40 de ani a scris lucrarea sa cel mai valoroas, un tratat asupra curbelor algebrice intitulat:
Introduction l'analyse des lignes courbes algbriques, pe care a publicat-o n 1750. A prezentat
printre primii matematicieni, teoria curbelor n toate detaliile lor, folosind n mod foarte fecund:
triunghiul analitic, n studiul fenomenelor diverselor ramuri ale unei curbe. Aici se gsete cea mai
veche demonstraie a propoziiei conform creia o curb de gradul n este determinat
de n(n+3)/2 puncte ale acesteia aflate ntr-o poziie general. Cramer a editat operele a doi dintre
fraii Bernoulli. A tratat problema formei sferoidale a planetelor i a deplasrii n timp a apsidelor
acestora. A continuat studiile lui Newton asupra curbelor cubice. O alt contribuie valoroas care i
poart numele este paradoxul lui Cramer (legat de intersecia a dou curbe de ordin superior).

Carl Friedrich Gauss (1777 1855) matematician i cercettor german, nscut n


Braunschweig. Spirit precoce, a debutat de la 10-12 ani prin studiul seriei binomiale. De asemenea,
i-a uimit profesorii din coala primar prin gsirea unei metode de calcul a sumei ntregilor pn la
100 astfel: 1 + 100 = 101, 2 + 99 = 101, 3 + 98 = 101, astfel nct e nevoie doar de fcut calculul: 50
101 = 5050. n liceu, s-a ocupat de teoria numerelor complexe, iar n teza sa de doctorat (1795) a
introdus reprezentarea geometric a acestora. ntre 1834 i 1837, s-a ocupat de resturile ptratice, cu
determinarea numrului de clase al formelor ptratice, de numere transcendente. La 17 ani a
descoperit metoda celor mai mici ptrate. Opera se axeaz pe teoria numerelor (fiind considerat
creatorul acestui domeniu), analiz matematic, geometrie diferenial, sau statistic, Gauss
publicndu-i doar o parte din cercetri, ntr-un stil spartan, astfel nct erau puini cititori ai operei
sale n acele vremuri. De asemenea, a studiat teoria congruenelor, aproximarea fraciilor zecimale, a
completat tabelul numerelor prime. A fcut distincie ntre congruenele algebrice i cele
transcendente i indicat o metod direct pentru rezolvarea congruenelor binome. n teoria
numerelor a introdus semnul de congruen, de apartenen, cel al izomorfismului, iar cel mai
important, axiomatizarea acestui domeniu, oper desvrit de ctre Emmy Noether, cercetrile fiind
continuate de Dirichlet. n 1825 a redactat prima demonstraie complet i riguroas a
celebrei Theorema aureum, adic legea reciprocitii resturilor ptratice, ceea ce ulterior va fi
cunoscut sub numele de lema lui Gauss. Aceasta este legat de teorema congruenelor i fusese
remarcat de Euler nc din 1772. n ceea ce privete algebra, n teza sa de doctorat a demonstrat
teorema fundamental a algebrei, enunat nc din 1629 de Albert Girard i demonstrat incomplet
deD'Alembert i Euler. n 1801 a creat determinanii, iar n 1812 a introdus seria hipergeometric. n
teoria geometrie difereniale, a obinut formulele fundamentale ale suprafeelor, curbura total i
reprezentarea sferic a acestora. n 1813 a studiat suprafeelor omofocale de ordinul al doilea. De
asemenea, s-a ocupat de studiul triunghiurilor areolar-raionale, de problema Snellius-Pothenot i de
cea a triunghiului care ulterior va fi numit triunghiul lui Pompeiu. S-a artat interesat i de existena
unei geometrii neeuclidiene, discutnd lucrul acesta cu Farkas Bolyai, Gerling sau Schumacher.
Cnd fiul lui Farkas Bolyai, Jnos, descoper geometria neeuclidian n 1829, Gauss i scrie lui
78

Farkas Bolyai: A-i luda munca ar nsemna s m laud pe mine, deoarece coninutul lucrrii...
coincide aproape cu meditaiile mele, gnduri care mi-au ocupat mintea n ultimii 35 de ani.
Opere importante:
Disquisitiones Arithmeticae, (1801) o lucrare n apte seciuni dedicat teoriei numerelor, n afar
de ultima parte, dedicat celebrului su poligon cu 17 laturi;
Disquisitiones generales circa seriem infinitam, un tratat riguros asupra seriilor, i o introducere
a funciilor hipergeometrice;
Methodus nova integralium valores per approximationem inveniendi, un eseu asupra aproximrii
integralelor;
Bestimmung der Genauigkeit der Beobachtungen (1816), o analiz asupra eficienei estimatorilor
statistici;
Theoria combinationis observationum erroribus minimis obnoxiae (1823), lucrare
dedicat statisticii, n particular ultimei metode de aproximare a ptratelor perfecte;
Disquisitiones generales circa superficies curva (1828), dedicat geometriei difereniale, fiind
opera sa cea mai cunoscut n acest domeniu;

Prescott Durand Crout (1907 1984) - matematician din SUA, nscut n Ohio, dar a trit i
a lucrat n Massachusetts. n 1929 a finisat treapta MIT. Teza sa de doctorat a fost intitulat astfel:
"Apropierea funciilor i integralelor de o combinaie liniar de funcii" . El a fost membru al
Facultatii de Matematica (1934-1973) i emerit din 1973 pn la moartea sa n 1984. Elevii lui la MIT
au fost Francis Hildebrand (1940), Carl Nordling (1941 ), Frank Bothwell (1946), Norman Painter
(1947), Merle Andrew (1948), Frederick Holt (1950), i Carl Steeg, Jr. (1952). Prescott Durand Crout
este autor al cartii "Determinarea satisfacerii domeniilor lui Laplace, lui Poisson etc. " El este,
probabil, inventatorul matrice descompunerea Crout.

Philipp Ludwig von Seidel (1821 1896) matematician german. A lucrat n domeniul
matematicii i astronomiei. n 1856, a creat teoria aberaiilor sistemelor optice de al treilea ordin . n
anii 1865-1866, bazatndu-se pe teoria lui Seidel Adolf Hugo Shteyngeylem (fiul fondatorului opticii
germane i fabrii optice Carl Shteyngeylya) a proiectat i construit de lentile portret. Aplanat, care a
devenit principalul tip de lentile folosit de fotografi la sfritul XIX i nceputul secolului XX.
Folosind un fotometru K.Shteyngeylya, efectuate observatii astronomice pentru a determina
luminozitatea stelelor, i n 1863 a publicat lucrarea "Rezultatele msurtorilor fotometrice 208 stele
majore fixe" reprezint primul catalog stea fotometrice, care are o valoare tiinific. n plus, ea
determin luminozitatea majore planete, i, de asemenea, a studiat absorbia luminii de atmosfera. n
domeniul matematicii pure lucrrile lui Seidel se refer n principal la teoria seriilor, precum i alte
obiecte de analiza matematica. A publicat n 1874, metoda propus pentru rezolvarea unui sistem de
ecuaii algebrice liniare, acum cunoscut sub numele de metoda Seidel sau Gauss - Seidel.

Andr-Louis Cholesky (1875 - 1918) - ofier militar francez i matematician. Cholesky sa


nscut n Montguyon, Frana. Familia lui patern a fost descendent din familia Cholewski care a
emigrat din Polonia n timpul Marii emigrri. A urmat Liceul din Bordeaux i a intrat la cole
Polytechnique, unde au nvat Camille Iordania i Henri Becquerel. A lucrat n geodezie i hartaluare, a fost implicat n topografie n Creta i Africa de Nord, nainte de primul rzboi mondial el este
amintit n primul rnd pentru dezvoltarea unei matrice, descompunere cunoscut sub numele de
descompunerea Cholesky, care a fost folosit n lucrarea sa topografic. El a servit armata francez
ca ofier mecanic i a fost ucis n lupt cu cteva luni nainte de sfritul primului rzboi mondial;
descoperirea sa a fost publicat postum de colegul su ofier Comandant Benot n Buletinul
Godsique.
79

Anexa 2: Rezultatele obinute n urma compilrii programelor


n PASCAL
Problema 1:
Introducerea dimensiunii matricelor: n=2
Introducerea elementelor matricei A:
a[1,1]=2
a[1,2]=4
a[2,1]=6
a[2,2]=8
Introducerea elementelor matricei B:
b[1,1]=3
b[1,2]=5
b[2,1]=7
b[2,2]=9
Introducerea scalarului k
5
Introducerea scalarului k
10
Matricea A
2.00
4.00
6.00
8.00
Suma matricelor: A+B
5.00
9.00
13.00
17.00
Produsul matricelor: A*B
34.00
46.00
74.00 102.00
Inmultirea cu un scalar: s1*A
10.00
20.00
30.00
40.00
Patratul matricei A: A*A
28.00
40.00
60.00
88.00
Transpusa matricei A
2.00
6.00
4.00
8.00
Determinantul matricei A:
Valoarea determinantului este:
Determinantul matricei B:
Valoarea determinantului este:
Sfarsitul programului

Matrica B
3.00
5.00
7.00
9.00
Diferenta matricelor: A-B
-1.00
-1.00
-1.00
-1.00
Produsul matricelor: B*A
36.00
52.00
68.00 100.00
Inmultirea cu un scalar: s2*B
30.00
50.00
70.00
90.00
Patratul matricei B: B*B
44.00
60.00
84.00 116.00
Transpusa matricei B
3.00
7.00
5.00
9.00

-8.00
-8.00

Problema 2:
Sistemul
1.00 x1
4.00 x1
2.00 x1
Matricea
1 2 3
4 3 1
2 5 7

initial
+ 2.00
+ 3.00
+ 5.00
A este:

este:
x2 + 3.00 x3 =
x2 + 1.00 x3 =
x2 + 7.00 x3 =

2.00
4.00
2.00

80

Metoda lui Cramer:


Determinantul matricii sistemului este: 6.00
Minorii sunt:
Matricea D1
Matricea D2
2 2 3
1 2 3
4 3 1
4 4 1
2 5 7
2 2 7
Dx1=
22.00
Dx2=
-26.00

Matricea D3
1 2 2
4 3 4
2 5 2
Dx3=
14.00

Solutiile sistemului sunt:


x[1]=
3.66667
x[2]= -4.33333
x[3]=
2.33333
Metoda lui Gauss:
Solutia sistemului este:
x1= 3.66667
x2=-4.33333
x3= 2.33333

Problema 3:
Introdu n=3
Introdu elementele matricii A:
a[1,1]=30
a[2,1]=1
a[1,2]=1
a[2,2]=30
a[1,3]=1
a[2,3]=2
Introdu coloana termenilor liberi, B:
b[1]=30
b[2]=29
b[3]=-27
Deschide fisierul LU.txt
Dimensiunea matricii patratice: n= 3
Datele initiale, A*X=B:
|
30.00
1.00
1.00 | |x1|
|
1.00
30.00
2.00 | |x2|
|
2.00
1.00
30.00 | |x3|
Valoarea determinantilor de colt:
|
30.00 |
D1=
30.00
Valoarea determinantilor de colt:
|
30.00
1.00 |
|
1.00
30.00 |
D2=
899.00
Valoarea determinantilor de colt:
|
30.00
1.00
1.00 |
|
1.00
30.00
2.00 |
|
2.00
1.00
30.00 |
D3= 26855.00
Aplicarea metodei Crout:
Factorizarea Crout:
Matricea U este:
1.0000
0.0333
0.0000
1.0000
0.0000
0.0000
Matricea L este:
30.0000
0.0000
1.0000
29.9667

a[3,1]=2
a[3,2]=1
a[3,3]=30

|
|
|

30.00|
29.00|
-27.00|

0.0333
0.0656
1.0000
0.0000
0.0000

79

2.0000
0.9333
29.8721
Vectorul intermediar Y:
1.0000
0.9344 -1.0000
Solutia X:
1.0000
1.0000 -1.0000
Aplicarea metodei Doolittle:
Factorizarea Doolitte:
Matricea U este:
30.0000
1.0000
1.0000
0.0000
29.9667
1.9667
0.0000
0.0000
29.8721
Matricea L este:
1.0000
0.0000
0.0000
0.0333
1.0000
0.0000
0.0667
0.0311
1.0000
Vectorul intermediar Y:
30.0000 28.0000 -29.8721
Solutia X:
1.0000
1.0000 -1.0000

Problema 4:
Obtinerea inversei unei matrici patratice, simetrice prin metoda Cholesky
(Matricea trebuie sa fie pozitiv definita).
Size = 4
Matrix A:
5.000000 -1.000000 -1.000000 -1.000000
-1.000000
5.000000 -1.000000 -1.000000
-1.000000 -1.000000
5.000000 -1.000000
-1.000000 -1.000000 -1.000000
5.000000
Determinant = 432.000000
Matrix Inv(A):
0.250000
0.083333
0.083333
0.083333
0.083333
0.250000
0.083333
0.083333
0.083333
0.083333
0.250000
0.083333
0.083333
0.083333
0.083333
0.250000
Doriti sa verificati (y/n)?:
Verificare A * Inv(A) = I:
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000
0.000000
0.000000
0.000000
0.000000
1.000000

Problema 5:
Introdu dimensiunea matricii A, n=3
Introduceti coeficientii matricei:
a(1,1)=5
a(2,1)=5
a(1,2)=2
a(2,2)=-6
a(1,3)=1
a(2,3)=2
Matricea Q este:
-0.6155
-0.6155
-0.6155
0.7655
0.4924
0.1876
Matricea R este:
-8.1240
3.4466
0.0000
-5.4489
0.0000
1.5591

0.4924
0.1876
0.8499
-1.3540
1.1032
1.7175

a(3,1)=-4
a(3,2)=2
a(3,3)=1
Matricea Q este:
-0.6155
-0.7272
-0.6155
0.6844
0.4924
-0.0535
Matricea R este:
-8.1240
3.4466
0.0000
-5.6676
0.0000
0.0000

-0.3041
-0.3909
-0.8687
-1.3540
0.5881
-1.9547

*Soluia exact a sistemului este: S 1; 2; 3


80

Problema 6:
Introdu numarul de ecuatii ale sistemului n=3
Introdu componentele matricii sistemului si termenilor liberi
a(1,1)=30
a(1,2)=1
a(1,3)=1
b(1)=30
Matricea extinsa este:
30.00000
1.00000
2.00000

1.00000
30.00000
1.00000

Numarul iteratiei k=1


x(1,2)=
x(2,2)=
x(3,2)=

1.00000
0.96667
-0.90000

a(2,1)=1
a(2,2)=30
a(2,3)=2
b(2)=29
1.00000
2.00000
30.00000

a(3,1)=2
a(3,2)=1
a(3,3)=30
b(3)=-27

30.00000
29.00000
-27.00000

Numarul iteratiei k=2


x(1,3)=
x(2,3)=
x(3,3)=

0.99778
0.99333
-0.99889

Numarul iteratiei k=3


x(1,4)=
x(2,4)=
x(3,4)=

1.00019
1.00000
-0.99963

Problema 7:
Introduceti numarul de ecuatii ale sistemului n=3
Introduceti componentele matricei sistemului si termenul liber
a(1,1)=30
a(2,1)=1
a(1,2)=1
a(2,2)=2
a(1,3)=1
a(2,3)=30
b(1)=30
b(2)=29
Matricea extinsa este:
30.00000 1.00000 1.00000 30.00000
1.00000 2.00000 30.00000 29.00000
2.00000 1.00000 -27.00000 30.00000
Numarul iteratiei k=1
x(1,2)= 1.00000
x(2,2)=14.50000
x(3,2)=-1.11111

a(3,1)=2
a(3,2)=1
a(3,3)=-27
b(3)=30

Numarul iteratiei k=2


x(1,3)= 0.55370
x(2,3)=31.16667
x(3,3)=-1.11111

81

Anexa 3: Aplicaii utiliznd softul Borland Delphi 7.0


Aplicaia 1: (Sisteme 2 x 2)
Rezolvarea sistemelor de ecuaii liniare utiliznd metoda grafic.

Realizare:
1. File / New Application.
2. Plasm pe form componente conform imaginii de mai sus ( vom avea 15 etichete, 6 casete
de editare, 4 componente Panel i 2 butoane).
3. Stabilim pentru proprietatea Text a componentelor Edit valorile implicite. Stabilim pentru
proprietatea Caption a componentelor Panel valoare nul (componentele Panel astfel vor fi
fr de nici o valoare).
4. Prelucrm evenimentul OnClick pentru componentele Button1 pentru a afia coordonatele
celor dou ecuaii pe care le vom construi cu ajutorul formei a doua.
5. Crem forma a doua, si stabilim culoarea alb ca fundal, stabilim legtura dintre forma 1 i
forma 2.
6. Prelucrm evenimentele OnPaint i OnResize pentru forma 2. Aci vom desena sistemul de
coordonate, apoi vom plasa n acest sistem intervalul [-9,9] pe Ox si pe Oy.
7. Coordonatele punctului de intersecie a celor dou drepte se va afia ca un mesaj aparte,
prelucrm evenimentul OnClick pentru forma 2.
8. Lansm aplicaia la execuie.

82

Codul surs:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Button1: TButton;
Button2: TButton;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
k1,k2,k3,k4,k5,k6:real;
implementation
Uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
// Ecuatia dreptei 1
k1:= - strtofloat(Edit1.Text)/strtofloat(Edit2.Text);
Panel1.Caption:= floattostr(k1);
k2:= strtofloat(Edit3.Text)/strtofloat(Edit2.Text);
Panel2.Caption:= floattostr(k2);
// Ecuatia dreptei 2

83

k3:= - strtofloat(Edit4.Text)/strtofloat(Edit5.Text);
Panel3.Caption:= floattostr(k3);
k4:= strtofloat(Edit6.Text)/strtofloat(Edit5.Text);
Panel4.Caption:= floattostr(k4);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.ShowModal;
end;
end.

Aplicaia 2: (Sisteme 3 x 3)
Rezolvarea sistemelor de ecuaii liniare utiliznd metoda lui Cramer.

Realizare:
1. File / New Application.
2. Plasm pe form componente conform imaginii de mai sus ( vom avea 12 etichete, 12 casete
de editare, 43 componente Panel i 3 butoane).
3. Stabilim pentru proprietatea Text a componentelor Edit valoare nul (casetele Edit astfel vor
fi fr de nici o valoare). Stabilim pentru proprietatea Caption a componentelor Panel
valoare nul (componentele Panel astfel vor fi fr de nici o valoare).
4. Prelucrm evenimentul OnClick pentru componentele Panel10, Panel20, Panel30 i Panel40
pentru a afia determinanii.

84

5. Prelucrm evenimentul OnClick pentru componentele Button 1 ( va calcula fiecare


determinant aparte), Button2 (va rezolva sistemul, afind soluiile acestuia) i Button3 ( va
cura toate componentele Edit i Panel din forma dat).
6. Lansm aplicaia la execuie.
Codul surs:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
Panel10: TPanel;
Panel11: TPanel;
Panel12: TPanel;
Panel13: TPanel;
Panel14: TPanel;
Panel15: TPanel;
Panel16: TPanel;
Panel17: TPanel;
Panel18: TPanel;
Panel19: TPanel;
Panel20: TPanel;
Panel21: TPanel;
Panel22: TPanel;
Panel23: TPanel;
Panel24: TPanel;
Panel25: TPanel;
Panel26: TPanel;
Panel27: TPanel;
Panel28: TPanel;
Panel29: TPanel;
Panel30: TPanel;
Panel31: TPanel;
Panel32: TPanel;
Panel33: TPanel;
Panel34: TPanel;
Panel35: TPanel;
Panel36: TPanel;
Panel37: TPanel;
Panel38: TPanel;
Panel39: TPanel;
Panel40: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;

85

Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Button1: TButton;
Panel41: TPanel;
Panel42: TPanel;
Panel43: TPanel;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Button3: TButton;
procedure Panel10Click(Sender:
procedure Panel20Click(Sender:
procedure Panel30Click(Sender:
procedure Panel40Click(Sender:
procedure Button1Click(Sender:
procedure Button2Click(Sender:
procedure Button3Click(Sender:
private
{ Private declarations }
public
{ Public declarations }
end;

TObject);
TObject);
TObject);
TObject);
TObject);
TObject);
TObject);

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Panel10Click(Sender: TObject);
begin
Panel1.Caption:= Edit1.Text;
Panel2.Caption:= Edit2.Text;
Panel3.Caption:= Edit3.Text;
Panel4.Caption:= Edit5.Text;
Panel5.Caption:= Edit6.Text;
Panel6.Caption:= Edit7.Text;
Panel7.Caption:= Edit9.Text;
Panel8.Caption:= Edit10.Text;
Panel9.Caption:= Edit11.Text;
end;

86

procedure TForm1.Panel20Click(Sender: TObject);


begin
Panel11.Caption:= Edit4.Text;
Panel12.Caption:= Edit2.Text;
Panel13.Caption:= Edit3.Text;
Panel14.Caption:= Edit8.Text;
Panel15.Caption:= Edit6.Text;
Panel16.Caption:= Edit7.Text;
Panel17.Caption:= Edit12.Text;
Panel18.Caption:= Edit10.Text;
Panel19.Caption:= Edit11.Text;
end;
procedure TForm1.Panel30Click(Sender: TObject);
begin
Panel21.Caption:= Edit1.Text;
Panel22.Caption:= Edit4.Text;
Panel23.Caption:= Edit3.Text;
Panel24.Caption:= Edit5.Text;
Panel25.Caption:= Edit8.Text;
Panel26.Caption:= Edit7.Text;
Panel27.Caption:= Edit9.Text;
Panel28.Caption:= Edit12.Text;
Panel29.Caption:= Edit11.Text;
end;
procedure TForm1.Panel40Click(Sender: TObject);
begin
Panel31.Caption:= Edit1.Text;
Panel32.Caption:= Edit2.Text;
Panel33.Caption:= Edit4.Text;
Panel34.Caption:= Edit5.Text;
Panel35.Caption:= Edit6.Text;
Panel36.Caption:= Edit8.Text;
Panel37.Caption:= Edit9.Text;
Panel38.Caption:= Edit10.Text;
Panel39.Caption:= Edit12.Text;
end;
procedure TForm1.Button1Click(Sender: TObject);
var k,k1,k2,k3:real;
begin
k:=Strtofloat(Panel1.Caption) *Strtofloat(Panel5.Caption)
*Strtofloat(Panel9.Caption) +Strtofloat(Panel4.Caption)
*Strtofloat(Panel8.Caption) *Strtofloat(Panel3.Caption)
+Strtofloat(Panel2.Caption) *Strtofloat(Panel6.Caption)
*Strtofloat(Panel7.Caption) -Strtofloat(Panel3.Caption)
*Strtofloat(Panel5.Caption) *Strtofloat(Panel7.Caption) Strtofloat(Panel2.Caption) *Strtofloat(Panel4.Caption)
*Strtofloat(Panel9.Caption) -Strtofloat(Panel6.Caption)
*Strtofloat(Panel8.Caption) *Strtofloat(Panel1.Caption);
Panel10.Caption:= Floattostr(k);
k1:=Strtofloat(Panel11.Caption) *Strtofloat(Panel15.Caption)
*Strtofloat(Panel19.Caption) +Strtofloat(Panel14.Caption)
*Strtofloat(Panel18.Caption) *Strtofloat(Panel13.Caption)
+Strtofloat(Panel12.Caption) *Strtofloat(Panel16.Caption)
*Strtofloat(Panel17.Caption) -Strtofloat(Panel13.Caption)
*Strtofloat(Panel15.Caption) *Strtofloat(Panel17.Caption)-

87

Strtofloat(Panel12.Caption) *Strtofloat(Panel14.Caption)
*Strtofloat(Panel19.Caption) -Strtofloat(Panel16.Caption)
*Strtofloat(Panel18.Caption) *Strtofloat(Panel11.Caption);
Panel20.Caption:= Floattostr(k1);
k2:=Strtofloat(Panel21.Caption) *Strtofloat(Panel25.Caption)
*Strtofloat(Panel29.Caption) +Strtofloat(Panel24.Caption)
*Strtofloat(Panel28.Caption) *Strtofloat(Panel23.Caption)+
Strtofloat(Panel22.Caption) *Strtofloat(Panel26.Caption)
*Strtofloat(Panel27.Caption) -Strtofloat(Panel23.Caption)
*Strtofloat(Panel25.Caption) *Strtofloat(Panel27.Caption)Strtofloat(Panel22.Caption) *Strtofloat(Panel24.Caption)
*Strtofloat(Panel29.Caption)-Strtofloat(Panel26.Caption)
*Strtofloat(Panel28.Caption)*Strtofloat(Panel21.Caption);
Panel30.Caption:= Floattostr(k2);
k3:=Strtofloat(Panel31.Caption) *Strtofloat(Panel35.Caption)
*Strtofloat(Panel39.Caption) +Strtofloat(Panel34.Caption)
*Strtofloat(Panel38.Caption) *Strtofloat(Panel33.Caption)+
Strtofloat(Panel32.Caption) *Strtofloat(Panel36.Caption)
*Strtofloat(Panel37.Caption) -Strtofloat(Panel33.Caption)
*Strtofloat(Panel35.Caption) *Strtofloat(Panel37.Caption)Strtofloat(Panel32.Caption) *Strtofloat(Panel34.Caption)
*Strtofloat(Panel39.Caption) -Strtofloat(Panel36.Caption)
*Strtofloat(Panel38.Caption) *Strtofloat(Panel31.Caption);
Panel40.Caption:= Floattostr(k3);
end;
procedure TForm1.Button2Click(Sender: TObject);
var s1,s2,s3:real;
begin
s1:= strtofloat(Panel20.Caption)/strtofloat(Panel10.Caption);
Panel41.Caption:=floattostr(s1);
s2:= strtofloat(Panel30.Caption)/strtofloat(Panel10.Caption);
Panel42.Caption:= floattostr(s2);
s3:= strtofloat(Panel40.Caption)/strtofloat(Panel10.Caption);
Panel43.Caption:= floattostr(s3);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit1.text:='';
Edit2.text:='';
Edit3.text:='';
Edit4.text:='';
Edit5.text:='';
Edit6.text:='';
Edit7.text:='';
Edit8.text:='';
Edit9.text:='';
Edit10.text:='';
Edit11.text:='';
Edit12.text:='';
Panel1.Caption:='';
Panel2.Caption:='';
Panel3.Caption:='';
Panel4.Caption:='';
Panel5.Caption:='';
Panel6.Caption:='';
Panel7.Caption:='';
Panel8.Caption:='';
Panel9.Caption:='';
Panel10.Caption:='';
Panel11.Caption:='';
Panel12.Caption:='';
Panel13.Caption:='';
Panel14.Caption:='';
Panel15.Caption:='';
Panel16.Caption:='';
Panel17.Caption:='';
Panel18.Caption:='';
Panel19.Caption:='';
Panel20.Caption:='';
Panel21.Caption:='';
Panel22.Caption:='';
Panel23.Caption:='';
Panel24.Caption:='';
Panel25.Caption:='';
Panel26.Caption:='';
Panel27.Caption:='';
Panel28.Caption:='';

88

Panel29.Caption:='';
Panel31.Caption:='';
Panel33.Caption:='';
Panel35.Caption:='';
Panel37.Caption:='';
Panel39.Caption:='';
Panel41.Caption:='';
Panel43.Caption:='';

Panel30.Caption:='';
Panel32.Caption:='';
Panel34.Caption:='';
Panel36.Caption:='';
Panel38.Caption:='';
Panel40.Caption:='';
Panel42.Caption:='';

end;
end.

Aplicaia 3: (Sisteme 4 x 4)
Rezolvarea sistemelor de ecuaii liniare utiliznd metoda clasic a lui Gauss (obinerea matricii
superior triunghiulare)

Realizare:
1. File / New Application.
2. Plasm pe form componente conform imaginii de mai sus ( vom avea 8 etichete, 20 casete
de editare, 24 componente Panel i 6 butoane).
3. Stabilim pentru proprietatea Text a componentelor Edit valorile implicite. Stabilim pentru
proprietatea Caption a componentelor Panel valoare nul (componentele Panel astfel vor fi
fr de nici o valoare).
4. Prelucrm evenimentul OnClick pentru componentele Button1, Button2, Button3 i Button4
pentru a afia coloanele matricii triunghiulare.
5. Prelucrm evenimentul OnClick pentru componentele Button5 ( va afia soluiile sistemului)
i Button6 ( va cura toate componentele Edit i Panel din forma dat).
89

6. Lansm aplicaia la execuie.


Codul surs:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
Panel10: TPanel;
Panel11: TPanel;
Panel12: TPanel;
Panel13: TPanel;
Panel14: TPanel;
Panel15: TPanel;
Panel16: TPanel;
E1: TEdit;
E2: TEdit;
E3: TEdit;
E4: TEdit;
E6: TEdit;
E7: TEdit;
E8: TEdit;
E9: TEdit;
E10: TEdit;
E11: TEdit;
E12: TEdit;
E13: TEdit;
E14: TEdit;
E15: TEdit;
E16: TEdit;
E5: TEdit;
Label1: TLabel;
Label2: TLabel;
E17: TEdit;
E18: TEdit;
E19: TEdit;
E20: TEdit;
Panel17: TPanel;
Panel18: TPanel;
Panel19: TPanel;
Panel20: TPanel;
Label3: TLabel;
Button2: TButton;
Button3: TButton;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;

90

Panel21: TPanel;
Panel22: TPanel;
Panel23: TPanel;
Panel24: TPanel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Label16: TLabel;
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16:real;
k1,k2,k3,k4,k5,k6,k7,k8,k9:real;
s1,s2,s3,s4,s5:real;
r1,r2,r3,r4:real;
implementation
{$R *.dfm}
procedure TForm1.Button4Click(Sender: TObject);
begin
// Coloana I
Panel1.Caption:= '1';
Panel5.Caption:= '0';
Panel9.Caption:= '0';
Panel13.Caption:= '0';
// Coloana II
P1:= strtofloat(E2.Text)/strtofloat(E1.Text);
Panel2.Caption:= floattostr(P1);
P5:= P1-(strtofloat(E6.Text)/strtofloat(E5.Text));
Panel6.Caption:= floattostr(P5);
P9:= P1-(strtofloat(E10.Text)/strtofloat(E9.Text));
Panel10.Caption:= floattostr(P9);
P13:= P1-(strtofloat(E14.Text)/strtofloat(E13.Text));
Panel14.Caption:= floattostr(P13);
// Coloana III
P2:= strtofloat(E3.Text)/strtofloat(E1.Text);
Panel3.Caption:= floattostr(P2);
P6:= P2-(strtofloat(E7.Text)/strtofloat(E5.Text));
Panel7.Caption:= floattostr(P6);
P10:= P2-(strtofloat(E11.Text)/strtofloat(E9.Text));

91

Panel11.Caption:= floattostr(P10);
P14:= P2-(strtofloat(E15.Text)/strtofloat(E13.Text));
Panel15.Caption:= floattostr(P14);
// Coloana IV
P3:= strtofloat(E4.Text)/strtofloat(E1.Text);
Panel4.Caption:= floattostr(P3);
P7:= P3-(strtofloat(E8.Text)/strtofloat(E5.Text));
Panel8.Caption:= floattostr(P7);
P11:= P3-(strtofloat(E12.Text)/strtofloat(E9.Text));
Panel12.Caption:= floattostr(P11);
P15:= P3-(strtofloat(E16.Text)/strtofloat(E13.Text));
Panel16.Caption:= floattostr(P15);
// Coloana termenilor liberi
P4:= strtofloat(E17.Text)/strtofloat(E1.Text);
Panel17.Caption:= floattostr(P4);
P8:= P4-(strtofloat(E18.Text)/strtofloat(E5.Text));
Panel18.Caption:= floattostr(P8);
P12:= P4-(strtofloat(E19.Text)/strtofloat(E9.Text));
Panel19.Caption:= floattostr(P12);
P16:= P4-(strtofloat(E20.Text)/strtofloat(E13.Text));
Panel20.Caption:= floattostr(P16);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
// Coloana I
Panel1.Caption:= '1';
Panel5.Caption:= '0';
Panel9.Caption:= '0';
Panel13.Caption:= '0';
// Coloana II
Panel6.Caption:= '1';
Panel10.Caption:= '0';
Panel14.Caption:= '0';
// Coloana III
k1:= P6/P5;
Panel7.Caption:=floattostr(k1);
k2:= k1-P10/P9;
Panel11.Caption:=floattostr(k2);
k3:= k1-P14/P13;
Panel15.Caption:=floattostr(k3);
// Coloana IV
k4:= P7/P5;
Panel8.Caption:=floattostr(k4);
k5:= k4-P11/P9;
Panel12.Caption:=floattostr(k5);
k6:= k4-P15/P13;
Panel16.Caption:=floattostr(k6);
// Coloana termenilor liberi
k7:= P8/P5;
Panel8.Caption:=floattostr(k7);
k8:= k7-P12/P9;
Panel12.Caption:=floattostr(k8);
k9:= k7-P16/P13;
Panel16.Caption:=floattostr(k9);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
// Coloana I
Panel1.Caption:= '1';
Panel5.Caption:= '0';
Panel9.Caption:= '0';
Panel13.Caption:= '0';
// Coloana II
Panel6.Caption:= '1';
Panel10.Caption:= '0';
Panel14.Caption:= '0';
// Coloana III
Panel11.Caption:= '1';
Panel15.Caption:= '0';

92

// Coloana IV
s1:=k5/k2;
Panel12.Caption:= floattostr(s1);
s2:=s1-k6/k3;
Panel16.Caption:= floattostr(s2);
// Coloana termenilor liberi
s3:=k8/k2;
Panel19.Caption:= floattostr(s3);
s4:=s3-k9/k3;
Panel20.Caption:= floattostr(s4);
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
// Coloana I
Panel1.Caption:= '1';
Panel5.Caption:= '0';
Panel9.Caption:= '0';
Panel13.Caption:= '0';
// Coloana II
Panel6.Caption:= '1';
Panel10.Caption:= '0';
Panel14.Caption:= '0';
// Coloana III
Panel11.Caption:= '1';
Panel15.Caption:= '0';
// Coloana IV
Panel16.Caption:= '1';
// Coloana termenilor liberi
s5:=s4/s2;
Panel20.Caption:= floattostr(s5);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
r1:=s5/strtofloat(Panel16.Caption);
Panel24.Caption:=floattostr(r1);
r2:=s3-s1*r1;
Panel23.Caption:=floattostr(r2);
r3:=k7-k4*r1-k1*r2;
Panel22.Caption:=floattostr(r3);
r4:=p4-p3*r1-p2*r2-p1*r3;
Panel21.Caption:=floattostr(r4);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
E1.text:='';
E2.text:='';
E3.text:='';
E4.text:='';
E5.text:='';
E6.text:='';
E7.text:='';
E8.text:='';
E9.text:='';
E10.text:='';
E11.text:='';
E12.text:='';
E13.text:='';
E14.text:='';
E15.text:='';
E16.text:='';
E17.text:='';
E18.text:='';
E19.text:='';
E20.text:='';
Panel1.Caption:='';
Panel3.Caption:='';
Panel5.Caption:='';
Panel7.Caption:='';
Panel9.Caption:='';
Panel11.Caption:='';
Panel13.Caption:='';
Panel15.Caption:='';
Panel17.Caption:='';
Panel19.Caption:='';
Panel21.Caption:='';
Panel23.Caption:='';

Panel2.Caption:='';
Panel4.Caption:='';
Panel6.Caption:='';
Panel8.Caption:='';
Panel10.Caption:='';
Panel12.Caption:='';
Panel14.Caption:='';
Panel16.Caption:='';
Panel18.Caption:='';
Panel20.Caption:='';
Panel22.Caption:='';
Panel24.Caption:='';

end;
end.

93

Aplicaia 4: (Sisteme 10 x 10)


Rezolvarea sistemelor de ecuaii liniare utiliznd metoda lui Gauss

Realizare:
1. File / New Application.
2. Plasm pe form componente conform imaginii de mai sus ( vom avea 4 etichete, o caset
de editare, 3 componente Stringgrid i 2 butoane).
3. Stabilim pentru proprietatea Text a componentei Edit valoarea conform imaginii de mai sus.
4. Prelucrm evenimentul OnChange pentru component Edit.
5. Prelucrm evenimentul OnCreate pentru Forma.
6. Prelucrm evenimentul OnClick pentru componentele Button1 i Button2.
7. Lansm aplicaia la execuie.
Codul surs:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, jpeg, ExtCtrls;
const MaxDimension = 10;
type
Vector = array[1..MaxDimension] of Double;
Matrix = array[1..MaxDimension] of Vector;
TForm3 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;

94

Button1: TButton;
Label2: TLabel;
Label3: TLabel;
ListBox1: TListBox;
Button2: TButton;
Label4: TLabel;
Image1: TImage;
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
Implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var a: Matrix;
b,x: Vector;
h: Double;
i,j,k,n:integer;
begin
n := StrToIntDef(Text, StringGrid1.ColCount);
for j := 0 to n - 1 do
for i := 0 to n - 1 do
a[i + 1, j + 1] := StrToFloatDef(StringGrid1.Cells[j, i], 0);
for I := 0 to n - 1 do b[i + 1] := StrToFloatDef(StringGrid2.Cells[0, i],
0);
for i:=1 to n-1 do
for j:=i+1 to n do
begin
a[j,i]:=-a[j,i]/a[i,i];
for k:=i+1 to n do
a[j,k]:=a[j,k]+a[j,i]*a[i,k];
b[j]:=b[j]+a[j,i]*b[i]
end;
x[n]:=b[n]/a[n,n];
for i:=n-1 downto 1 do
begin
h:=b[i];
for j:=i+1 to n do h:=h-x[j]*a[i,j];
x[i]:=h/a[i,i]
end;
for i:=1 to n do ListBox1.Items.Append('x(' + IntToStr(i) + ')=' +
FloatToStr(x[i]));
end;
procedure TForm3.Edit1Change(Sender: TObject);
begin
with StringGrid1, Edit1 do
begin
ColCount := StrToIntDef(Text, 3);
RowCount := StrToIntDef(Text, 3);
end;
with StringGrid2, Edit1 do

95

RowCount := StrToIntDef(Text, 3)
end;
procedure TForm3.FormCreate(Sender: TObject);
var i, j: integer;
begin
Randomize;
for I := 0 to StrToIntDef(Text, StringGrid1.ColCount) - 1 do
for J := 0 to StrToIntDef(Text, StringGrid1.RowCount) - 1 do
StringGrid1.Cells[I, J] := IntToStr(Random(100));
for I := 0 to StrToIntDef(Text, StringGrid2.RowCount) - 1 do
StringGrid2.Cells[0, I] := IntToStr(Random(100))
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
ListBox1.Items.Clear;
end;
end.

Aplicaia 5: (Sisteme 3 x 3)
Rezolvarea sistemelor de ecuaii liniare utiliznd Factorizarea LU (Doolittle & Crout).

Realizare:
1. File / New Application.
2. Plasm pe form componente conform imaginii de mai sus ( vom avea 8 etichete, 12 casete
de editare, 48 componente Panel i 4 butoane).
3. Stabilim pentru proprietatea Text a componentelor Edit valorile i pentru proprietatea
Caption a componentelor Panel valori conform imaginii de mai sus.

96

4. Prelucrm evenimentul OnClick pentru componentele Button1 (afieaz descompunerea LU


dup Doolittle), Button2 (rezolv Doolittle).
5. Prelucrm evenimentul OnClick pentru componentele Button3 (afieaz descompunerea LU
dup Crout), Button4 (rezolv Crout).
6. Lansm aplicaia la execuie.
Codul surs:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
Panel10: TPanel;
Panel11: TPanel;
Panel12: TPanel;
Panel13: TPanel;
Panel14: TPanel;
Panel15: TPanel;
Panel16: TPanel;
Panel17: TPanel;
Panel18: TPanel;
Panel43: TPanel;
Panel46: TPanel;
Panel44: TPanel;
Panel47: TPanel;
Panel45: TPanel;
Panel48: TPanel;
Button1: TButton;
Panel19: TPanel;
Panel20: TPanel;
Panel21: TPanel;
Panel22: TPanel;

97

Panel23: TPanel;
Panel24: TPanel;
Panel25: TPanel;
Panel26: TPanel;
Panel27: TPanel;
Panel28: TPanel;
Panel29: TPanel;
Panel30: TPanel;
Panel31: TPanel;
Panel32: TPanel;
Panel33: TPanel;
Panel34: TPanel;
Panel35: TPanel;
Panel36: TPanel;
Panel37: TPanel;
Panel38: TPanel;
Panel39: TPanel;
Panel40: TPanel;
Panel41: TPanel;
Panel42: TPanel;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label6: TLabel;
Label5: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Button3: TButton;
Button4: TButton;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
l1,l2,l3,u1,u2,u3,u4,u5,u6,y1,y2,y3,x1,x2,x3:real;
s1,s2,s3,k1,k2,k3,k4,k5,k6,z1,z2,z3,w1,w2,w3:real;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
u1:=strtofloat(Edit1.Text);
l1:=strtofloat(Edit5.Text)/u1;
l2:=strtofloat(Edit9.Text)/u1;
u2:=strtofloat(Edit2.Text);
u4:=strtofloat(Edit6.Text)-l1*u2;
l3:=(strtofloat(Edit10.Text)-l2*u2)/u4;
u3:=strtofloat(Edit3.Text);
u5:=strtofloat(Edit7.Text)-l1*u3;
u6:=strtofloat(Edit11.Text)-l2*u3-l3*u5;
// Afisare matricea L

98

Panel4.Caption:=floattostr(l1);
Panel7.Caption:=floattostr(l2);
Panel8.Caption:=floattostr(l3);
// Afisare matricea U
Panel10.Caption:=floattostr(u1);
Panel11.Caption:=floattostr(u2);
Panel12.Caption:=floattostr(u3);
Panel14.Caption:=floattostr(u4);
Panel15.Caption:=floattostr(u5);
Panel18.Caption:=floattostr(u6);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Rezolvam sistemul: L*Y=B
y1:=strtofloat(Edit4.Text);
y2:=strtofloat(Edit8.Text)-l1*y1;
y3:=strtofloat(Edit12.Text)-l2*y1-l3*y2;
// Afisare Y
Panel37.Caption:=floattostr(y1);
Panel38.Caption:=floattostr(y2);
Panel39.Caption:=floattostr(y3);
// Rezolvam sistemul: U*X=Y
x3:=y3/u6;
x2:=(y2-u5*x3)/u4;
x1:=(y1-u3*x3-u2*x2)/u1;
// Afisare X
Panel40.Caption:=floattostr(x1);
Panel41.Caption:=floattostr(x2);
Panel42.Caption:=floattostr(x3);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
k1:=Strtofloat(Edit1.Text);
k2:=Strtofloat(Edit5.Text);
k3:=Strtofloat(Edit9.Text);
s1:=Strtofloat(Edit2.Text)/k1;
k4:=Strtofloat(Edit6.Text)-k2*s1;
k5:=Strtofloat(Edit10.Text)-k3*s1;
s2:=Strtofloat(Edit3.Text)/k1;
s3:=(Strtofloat(Edit7.Text)-k2*s2)/k4;
k6:=Strtofloat(Edit11.Text)-k3*s2-k5*s3;
// Afisare matricea L
Panel29.Caption:=floattostr(s1);
Panel30.Caption:=floattostr(s2);
Panel33.Caption:=floattostr(s3);
// Afisare matricea U
Panel19.Caption:=floattostr(k1);
Panel22.Caption:=floattostr(k2);
Panel25.Caption:=floattostr(k3);
Panel23.Caption:=floattostr(k4);
Panel26.Caption:=floattostr(k5);
Panel27.Caption:=floattostr(k6);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// Rezolvam sistemul: L*Y=B
z1:=strtofloat(Edit4.Text)/k1;
z2:=(strtofloat(Edit8.Text)-k2*z1)/k4;

99

z3:=(strtofloat(Edit12.Text)-k3*z1-k5*z2)/k6;
// Afisare Y
Panel43.Caption:=floattostr(z1);
Panel44.Caption:=floattostr(z2);
Panel45.Caption:=floattostr(z3);
// Rezolvam sistemul: U*X=Y
w3:=z3;
w2:=z2-s3*w3;
w1:=z1-s1*w2-s2*w3;
// Afisare X
Panel46.Caption:=floattostr(w1);
Panel47.Caption:=floattostr(w2);
Panel48.Caption:=floattostr(w3);
end;
end.

Aplicaia 6: (Sisteme 30 x 30 )
Rezolvarea sistemelor de ecuaii liniare utiliznd unit-ul UMnsistem: (Anexa 4)
Metoda Gauss de eliminare;
Metoda Gauss cu pivot parial;
Metoda de factorizare LU;
Metoda Gauss Seidel.
Exemplu:

Realizarea:
1. File / New Application.
2. Plasm pe form componente conform imaginii de mai sus ( vom avea 3 etichete, 3
componente Memo i 2 butoane).

100

3. Stabilim pentru proprietatea Caption a componentelor Label i Button valori conform


imaginii de mai sus. Pentru proprietatea Lines a primei componente Memo, stabilim textul
din imagine.
4. Vom introduce n clauza Uses cuvntul: UMnsistem. Astfel vom putea face trimitere la
Unit-ul personalizat, de unde vom utiliza datele pentru metoda lui Gauss cu pivot partial.
5. Prelucrm evenimentul OnClick pentru componentele Button1 (citirea datelor din fiier),
Button2 (rezolv sistemul de ecuaii). Prelucrm evenimentul OnActivate pentru Forma.
6. Lansm aplicaia la execuie.
Codul surs:
unit U_GaussianElim;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, UMnsistem, ShellAPI;
type
TForm1 = class(TForm)
SolveBtn: TButton;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
Label1: TLabel;
ReadBtn: TButton;
Label2: TLabel;
Label3: TLabel;
procedure SolveBtnClick(Sender: TObject);
procedure ReadBtnClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
public
fileloaded:Boolean;
procedure GetDataFromFile(var Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector);
procedure Results(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Solution
: TNvector;
Error
: byte);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
Dimen : integer;
Coefficients : TNmatrix;
Constants : TNvector;
Solution : TNvector;

{
{
{
{

Dimensiunea matricii patrate }


Matricea}
Termenii liberi din ecuatie }
Solutia sistemului de ecuatii}

101

Error : byte;

{ Semn de alarma daca ceva nu a mers corect}

procedure Initial(var Dimen


: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector);
begin
Dimen := 0;
FillChar(Coefficients, SizeOf(Coefficients), 0);
FillChar(Constants, SizeOf(Constants), 0);
end;
procedure TForm1.GetDataFromFile(var Dimen : integer;
var Coefficients : TNmatrix;
var Constants
: TNvector);
var
InFile : textfile;
Row, Column : integer;
begin
if opendialog1.execute then
begin
fileloaded:=true;
memo3.Clear;
memo3.lines.loadfromfile(opendialog1.filename);
assignfile(Infile,opendialog1.filename);
reset(infile);
Read(InFile, Dimen);
Row := 0;
while (not eof(Infile)) and (Row < Dimen) do
begin
Row := Succ(Row);
Column := 0;
while (not eof(Infile)) and (Column < Dimen) do
begin
Column := Succ(Column);
Read(InFile, Coefficients[Row, Column]);
end;
end;
if not eof(Infile) then
begin
Row := 0;
while (not eof(infile)) and (Row < Dimen) do
begin
Row := Succ(Row);
Read(InFile, Constants[Row]);
end;
end;
Closefile(InFile);
end;
end;
procedure TForm1.Results(Dimen
var Coefficients
var Constants
var Solution
Error
var
Column, Row : integer;

:
:
:
:

: integer;
TNmatrix;
TNvector;
TNvector;
byte);

102

s:string;
begin
with memo1.lines do
begin
clear;
add('');
add('Coeficientii: ');
for Row := 1 to Dimen do
begin
s:='';
for Column := 1 to Dimen do
s:=s+ format('%10.2f', [Coefficients[Row, Column]]);
add(s);
end;
add('');
add('Termenii libei:');
for Row := 1 to Dimen do
add(format('%10.2f',[Constants[Row]]));
add('');
if Error >= 1 then add('ERROR: ');
case Error of
0 : begin
add('Solutia sistemului:');
for Row := 1 to Dimen do
add(format('%10.6f',[Solution[Row]]));
add('');
end;
1 : add('Dimensiunea matricei trebuie sa fie mai mare decit 1.');
2 : Add('Nu exista nici o solu?ie la acest sistem de ecuatii.');
end; { case }
end;
end;
procedure TForm1.SolveBtnClick(Sender: TObject);
begin
if fileLoaded then
begin
memo1.clear;
Partial_Pivoting(Dimen, Coefficients, Constants, Solution, Error);
Results(Dimen, Coefficients, Constants, Solution, Error);
end;
end;
procedure TForm1.ReadBtnClick(Sender: TObject);
begin
Initial(Dimen, Coefficients, Constants);
GetDataFromFile(Dimen, Coefficients, Constants);
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
FileLoaded:=false;
end;
end.

103

Anexa 4: Rezultatele obinute n urma execuiei aplicaiilor n


mediul Delphi 7.0
Aplicaia 1:

104

Aplicaia 2:

Aplicaia 3:

105

Aplicaia 4:

Aplicaia 5:

106

Aplicaia 6:

107

Anexa 5: Unit-ul UMnsistem


unit UMnsistem;
interface
type
Float = extended; { 8 byte real, requires 8087 math chip }
const
TNNearlyZero = 1E-07;
TNArraySize = 30; {Dimensiunea maxim a matricei}
type
TNvector = array[1..TNArraySize] of Float;
TNmatrix = array[1..TNArraySize] of TNvector;
procedure Determinant(Dimen : integer;
Data : TNmatrix;
var Det
: Float;
var Error : byte);
procedure Inverse(Dimen : integer;
Data : TNmatrix;
var Inv
: TNmatrix;
var Error : byte);
procedure Gaussian_Elimination(Dimen
: integer;
Coefficients : TNmatrix;
Constants
: TNvector;
var Solution
: TNvector;
var Error
: byte);
procedure Partial_Pivoting(Dimen
: integer;
Coefficients : TNmatrix;
Constants
: TNvector;
var Solution
: TNvector;
var Error
: byte);
procedure LU_Decompose(Dimen
: integer;
Coefficients : TNmatrix;
var Decomp
: TNmatrix;
var Permute
: TNmatrix;
var Error
: byte);
procedure LU_Solve(Dimen
: integer;
var Decomp
: TNmatrix;
Constants : TNvector;
var Permute
: TNmatrix;
var Solution : TNvector;
var Error
: byte);
procedure Gauss_Seidel(Dimen
: integer;
Coefficients : TNmatrix;
Constants
: TNvector;
Tol
: Float;
MaxIter
: integer;
var Solution
: TNvector;
var Iter
: integer;
var Error
: byte);
implementation
//{$I Matrix.inc}
procedure Determinant{(Dimen : integer;
Data
: TNmatrix;
var Det
: Float;
var Error : byte)};
procedure Initial(Dimen : integer;
var Data : TNmatrix;
var Det
: Float;

108

var Error : byte);


begin
Error := 0;
if Dimen < 1 then
Error := 1
else
if Dimen = 1 then
Det := Data[1, 1];
end; { procedure Initial }
procedure EROswitch(var Row1 : TNvector;
var Row2 : TNvector);
var
DummyRow : TNvector;
begin
DummyRow := Row1;
Row1 := Row2;
Row2 := DummyRow;
end; { procedure EROswitch }
procedure EROmultAdd(Multiplier
: Float;
Dimen
: integer;
var ReferenceRow : TNvector;
var ChangingRow : TNvector);
var
Term : integer;
begin
for Term := 1 to Dimen do
ChangingRow[Term] := ChangingRow[Term] + Multiplier * ReferenceRow[Term];
end; { procedure EROmultAdd }
function Deter(Dimen : integer;
var Data : TNmatrix) : Float;
var
PartialDeter, Multiplier : Float;
Row, ReferenceRow : integer;
DetEqualsZero : boolean;
procedure Pivot(Dimen
: integer;
ReferenceRow : integer;
var Data
: TNmatrix;
var PartialDeter : Float;
var DetEqualsZero : boolean);
var
NewRow : integer;
begin
DetEqualsZero := true;
NewRow := ReferenceRow;
while DetEqualsZero and (NewRow < Dimen) do
begin
NewRow := Succ(NewRow);
if ABS(Data[NewRow, ReferenceRow]) > TNNearlyZero then
begin
EROswitch(Data[NewRow], Data[ReferenceRow]);
DetEqualsZero := false;
PartialDeter := -PartialDeter;
end;
end;
end; { procedure Pivot }
begin { function Deter }
DetEqualsZero := false;
PartialDeter := 1;
ReferenceRow := 0;
while not(DetEqualsZero) and (ReferenceRow < Dimen - 1) do
begin

109

ReferenceRow := Succ(ReferenceRow);
if ABS(Data[ReferenceRow, ReferenceRow]) < TNNearlyZero then
Pivot(Dimen, ReferenceRow, Data, PartialDeter, DetEqualsZero);
if not(DetEqualsZero) then
for Row := ReferenceRow + 1 to Dimen do
if ABS(Data[Row, ReferenceRow]) > TNNearlyZero then
begin
Multiplier := -Data[Row, ReferenceRow] /
Data[ReferenceRow, ReferenceRow];
EROmultAdd(Multiplier, Dimen, Data[ReferenceRow], Data[Row]);
end;
PartialDeter := PartialDeter * Data[ReferenceRow, ReferenceRow];
end;
if DetEqualsZero then
Deter := 0
else
Deter := PartialDeter * Data[Dimen, Dimen];
end; { function Deter }
begin { procedure Determinant }
Initial(Dimen, Data, Det, Error);
if Dimen > 1 then
Det := Deter(Dimen, Data);
end; { procedure Determinant }
procedure Inverse{(Dimen : integer;
Data
: TNmatrix;
var Inv
: TNmatrix;
var Error : byte)};
procedure Initial(Dimen : integer;
var Data : TNmatrix;
var Inv
: TNmatrix;
var Error : byte);
var
Row : integer;
begin
Error := 0;
if Dimen < 1 then
Error := 1
else
begin
FillChar(Inv, SizeOf(Inv), 0);
for Row := 1 to Dimen do
Inv[Row, Row] := 1;
if Dimen = 1 then
if ABS(Data[1, 1]) < TNNearlyZero then
Error := 2
{ Singular matrix }
else
Inv[1, 1] := 1 / Data[1, 1];
end;
end; { procedure Initial }
procedure EROdiv(Divisor : Float;
Dimen
: integer;
var Row
: TNvector);
var
Term : integer;
begin
for Term := 1 to Dimen do
Row[Term] := Row[Term] / Divisor;
end; { procedure EROdiv }
procedure EROswitch(var Row1 : TNvector;
var Row2 : TNvector);
var

110

DummyRow : TNvector;
begin
DummyRow := Row1;
Row1 := Row2;
Row2 := DummyRow;
end; { procedure EROswitch }
procedure EROmultAdd(Multiplier
: Float;
Dimen
: integer;
var ReferenceRow : TNvector;
var ChangingRow : TNvector);
var Term
: integer;
begin
for Term := 1 to Dimen do
ChangingRow[Term] := ChangingRow[Term] + Multiplier*ReferenceRow[Term];
end; { procedure EROmultAdd }
procedure Inver(Dimen : integer;
var Data : TNmatrix;
var Inv
: TNmatrix;
var Error : byte);
var
Divisor, Multiplier : Float;
Row, ReferenceRow : integer;
procedure Pivot(Dimen
: integer;
ReferenceRow : integer;
var Data
: TNmatrix;
var Inv
: TNmatrix;
var Error
: byte);
var
NewRow : integer;
begin
Error := 2;
NewRow := ReferenceRow;
while (Error > 0) and (NewRow < Dimen) do
begin
NewRow := Succ(NewRow);
if ABS(Data[NewRow, ReferenceRow]) > TNNearlyZero then
begin
EROswitch(Data[NewRow], Data[ReferenceRow]);
EROswitch(Inv[NewRow], Inv[ReferenceRow]);
Error := 0;
end;
end; { while }
end; { procedure Pivot }
begin { procedure Inver }
ReferenceRow := 0;
while (Error = 0) and (ReferenceRow < Dimen) do
begin
ReferenceRow := Succ(ReferenceRow);
if ABS(Data[ReferenceRow, ReferenceRow]) < TNNearlyZero then
Pivot(Dimen, ReferenceRow, Data, Inv, Error);
if Error = 0 then
begin
Divisor := Data[ReferenceRow, ReferenceRow];
EROdiv(Divisor, Dimen, Data[ReferenceRow]);
EROdiv(Divisor, Dimen, Inv[ReferenceRow]);
for Row := 1 to Dimen do
if (Row <> ReferenceRow) and
(ABS(Data[Row, ReferenceRow]) > TNNearlyZero) then
begin
Multiplier := -Data[Row, ReferenceRow] /
Data[ReferenceRow, ReferenceRow];

111

EROmultAdd(Multiplier, Dimen, Data[ReferenceRow], Data[Row]);


EROmultAdd(Multiplier, Dimen, Inv[ReferenceRow], Inv[Row]);
end;
end;
end;
end; { procedure Inver }
begin { procedure Inverse }
Initial(Dimen, Data, Inv, Error);
if Dimen > 1 then
Inver(Dimen, Data, Inv, Error);
end; { procedure Inverse }
procedure Gaussian_Elimination{(Dimen
: integer;
Coefficients : TNmatrix;
Constants
: TNvector;
var Solution
: TNvector;
var Error
: byte)};
procedure Initial(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Solution
: TNvector;
var Error
: byte);
begin
Error := 0;
if Dimen < 1 then
Error := 1
else
if Dimen = 1 then
if ABS(Coefficients[1, 1]) < TNNearlyZero then
Error := 2
else
Solution[1] := Constants[1] / Coefficients[1, 1];
end; { procedure Initial }
procedure EROswitch(var Row1 : TNvector;
var Row2 : TNvector);
var
DummyRow : TNvector;
begin
DummyRow := Row1;
Row1 := Row2;
Row2 := DummyRow;
end; { procedure EROswitch }
procedure EROmultAdd(Multiplier
: Float;
Dimen
: integer;
var ReferenceRow : TNvector;
var ChangingRow : TNvector);
var
Term : integer;
begin
for Term := 1 to Dimen do
ChangingRow[Term] := ChangingRow[Term] + Multiplier*ReferenceRow[Term];
end; { procedure EROmultAdd }
procedure UpperTriangular(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Error
: byte);
var
Multiplier
: Float;
Row, ReferenceRow : integer;
procedure Pivot(Dimen
: integer;
ReferenceRow : integer;
var Coefficients : TNmatrix;

112

var Constants
var Error

: TNvector;
: byte);

var
NewRow : integer;
Dummy : Float;
begin
Error := 2;
NewRow := ReferenceRow;
while (Error > 0) and (NewRow < Dimen) do
begin
NewRow := Succ(NewRow);
if ABS(Coefficients[NewRow, ReferenceRow]) > TNNearlyZero then
begin
EROswitch(Coefficients[NewRow], Coefficients[ReferenceRow]);
Dummy := Constants[NewRow];
Constants[NewRow] := Constants[ReferenceRow];
Constants[ReferenceRow] := Dummy;
Error := 0;
end;
end;
end; { procedure Pivot }
begin { procedure UpperTriangular }
ReferenceRow := 0;
while (Error = 0) and (ReferenceRow < Dimen - 1) do
begin
ReferenceRow := Succ(ReferenceRow);
if ABS(Coefficients[ReferenceRow, ReferenceRow]) < TNNearlyZero then
Pivot(Dimen, ReferenceRow, Coefficients, Constants, Error);
if Error = 0 then
for Row := ReferenceRow + 1 to Dimen do
if ABS(Coefficients[Row, ReferenceRow]) > TNNearlyZero then
begin
Multiplier := -Coefficients[Row, ReferenceRow] /
Coefficients[ReferenceRow,ReferenceRow];
EROmultAdd(Multiplier, Dimen,
Coefficients[ReferenceRow], Coefficients[Row]);
Constants[Row] := Constants[Row] +
Multiplier * Constants[ReferenceRow];
end;
end; { while }
if ABS(Coefficients[Dimen, Dimen]) < TNNearlyZero then
Error := 2;
end; { procedure UpperTriangular }
procedure BackwardsSub(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Solution
: TNvector);
var
Term, Row : integer;
Sum : Float;
begin
Term := Dimen;
while Term >= 1 do
begin
Sum := 0;
for Row := Term + 1 to Dimen do
Sum := Sum + Coefficients[Term, Row] * Solution[Row];
Solution[Term] := (Constants[Term] - Sum) / Coefficients[Term, Term];
Term := Pred(Term);
end;
end; { procedure BackwardsSub }

113

begin { procedure Gaussian_Elimination }


Initial(Dimen, Coefficients, Constants, Solution, Error);
if Dimen > 1 then
begin
UpperTriangular(Dimen, Coefficients, Constants, Error);
if Error = 0 then
BackwardsSub(Dimen, Coefficients, Constants, Solution);
end;
end; { procedure Gaussian_Elimination }
procedure Partial_Pivoting{(Dimen
: integer;
Coefficients : TNmatrix;
Constants
: TNvector;
var Solution
: TNvector;
var Error
: byte)};
procedure Initial(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Solution
: TNvector;
var Error
: byte);
begin
Error := 0;
if Dimen < 1 then
Error := 1
else
if Dimen = 1 then
if ABS(Coefficients[1, 1]) < TNNearlyZero then
Error := 2
else
Solution[1] := Constants[1] / Coefficients[1, 1];
end; { procedure Initial }
procedure EROswitch(var Row1 : TNvector;
var Row2 : TNvector);
var
DummyRow : TNvector;
begin
DummyRow := Row1;
Row1 := Row2;
Row2 := DummyRow;
end; { procedure EROswitch }
procedure EROmultAdd(Multiplier
: Float;
Dimen
: integer;
var ReferenceRow : TNvector;
var ChangingRow : TNvector);
var
Term : integer;
begin
for Term := 1 to Dimen do
ChangingRow[Term] := ChangingRow[Term] + Multiplier*ReferenceRow[Term];
end; { procedure EROmultAdd }
procedure UpperTriangular(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Error
: byte);
var
Multiplier : Float;
Row, ReferenceRow : integer;
procedure Pivot(Dimen
: integer;
ReferenceRow : integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;

114

var Error
: byte);
var
PivotRow, Row : integer;
Dummy : Float;
begin
PivotRow := ReferenceRow;
for Row := ReferenceRow + 1 to Dimen do
if ABS(Coefficients[Row, ReferenceRow]) >
ABS(Coefficients[PivotRow, ReferenceRow]) then
PivotRow := Row;
if PivotRow <> ReferenceRow then
begin
EROswitch(Coefficients[PivotRow], Coefficients[ReferenceRow]);
Dummy := Constants[PivotRow];
Constants[PivotRow] := Constants[ReferenceRow];
Constants[ReferenceRow] := Dummy;
end
else { Dac elementul diagonal este zero, nu exist nici o soluie }
if ABS(Coefficients[ReferenceRow, ReferenceRow]) < TNNearlyZero then
Error := 2;
end; { procedure Pivot }
begin { procedure UpperTriangular }
ReferenceRow := 0;
while (Error = 0) and (ReferenceRow < Dimen - 1) do
begin
ReferenceRow := Succ(ReferenceRow);
Pivot(Dimen, ReferenceRow, Coefficients, Constants, Error);
if Error = 0 then
for Row := ReferenceRow + 1 to Dimen do
if ABS(Coefficients[Row, ReferenceRow]) > TNNearlyZero then
begin
Multiplier := -Coefficients[Row, ReferenceRow] /
Coefficients[ReferenceRow,ReferenceRow];
EROmultAdd(Multiplier, Dimen,
Coefficients[ReferenceRow], Coefficients[Row]);
Constants[Row] := Constants[Row] +
Multiplier * Constants[ReferenceRow];
end;
end;
if ABS(Coefficients[Dimen, Dimen]) < TNNearlyZero then
Error := 2;
end; { procedure UpperTriangular }
procedure BackwardsSub(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Solution
: TNvector);
var
Term, Row : integer;
Sum : Float;
begin
Term := Dimen;
while Term >= 1 do
begin
Sum := 0;
for Row := Term + 1 to Dimen do
Sum := Sum + Coefficients[Term, Row] * Solution[Row];
Solution[Term] := (Constants[Term] - Sum) / Coefficients[Term, Term];
Term := Pred(Term);
end;
end; { procedure BackwardsSub }

115

begin { procedure Partial_Pivoting }


Initial(Dimen, Coefficients, Constants, Solution, Error);
if Dimen > 1 then
begin
UpperTriangular(Dimen, Coefficients, Constants, Error);
if Error = 0 then
BackwardsSub(Dimen, Coefficients, Constants, Solution);
end;
end; { procedure Partial_Pivoting }
procedure LU_Decompose{(Dimen
: integer;
Coefficients : TNmatrix;
var Decomp
: TNmatrix;
var Permute
: TNmatrix;
var Error
: byte)};
procedure TestInput(Dimen : integer;
var Error : byte);
begin
Error := 0;
if Dimen < 1 then
Error := 1;
end; { procedure TestInput }
function RowColumnMult(Row
: integer;
var Lower : TNmatrix;
Column : integer;
var Upper : TNmatrix) : Float;
var
Term : integer;
Sum : Float;
begin
Sum := 0;
for Term := 1 to Row - 1 do
Sum := Sum + Lower[Row, Term] * Upper[Term, Column];
RowColumnMult := Sum;
end; { function RowColumnMult }
procedure Pivot(Dimen
: integer;
ReferenceRow : integer;
var Coefficients : TNmatrix;
var Lower
: TNmatrix;
var Upper
: TNmatrix;
var Permute
: TNmatrix;
var Error
: byte);
var
PivotRow, Row : integer;
ColumnMax, TestMax : Float;
procedure EROswitch(var Row1 : TNvector;
var Row2 : TNvector);
var
DummyRow : TNvector;
begin
DummyRow := Row1;
Row1 := Row2;
Row2 := DummyRow;
end; { procedure EROswitch }
begin { procedure Pivot }
PivotRow := ReferenceRow;
ColumnMax := ABS(Coefficients[ReferenceRow, ReferenceRow] RowColumnMult(ReferenceRow, Lower, ReferenceRow, Upper));
for Row := ReferenceRow + 1 to Dimen do
begin
TestMax := ABS(Coefficients[Row, ReferenceRow] RowColumnMult(Row, Lower, ReferenceRow, Upper));

116

if TestMax > ColumnMax then


begin
PivotRow := Row;
ColumnMax := TestMax;
end;
end;
if PivotRow <> ReferenceRow then
begin
EROswitch(Coefficients[PivotRow], Coefficients[ReferenceRow]);
EROswitch(Lower[PivotRow], Lower[ReferenceRow]);
EROswitch(Permute[PivotRow], Permute[ReferenceRow]);
end
else
if ColumnMax < TNNearlyZero then
Error := 2;
end; { procedure Pivot }
procedure Decompose(Dimen
: integer;
var Coefficients : TNmatrix;
var Decomp
: TNmatrix;
var Permute
: TNmatrix;
var Error
: byte);
var
Upper, Lower : TNmatrix;
Term, Index : integer;
procedure Initialize(Dimen
: integer;
var Lower
: TNmatrix;
var Upper
: TNmatrix;
var Permute : TNmatrix);
var
Diag : integer;
begin
FillChar(Upper, SizeOf(Upper), 0);
FillChar(Lower, SizeOf(Lower), 0);
FillChar(Permute, SizeOf(Permute), 0);
for Diag := 1 to Dimen do
Permute[Diag, Diag] := 1;
end; { procedure Initialize }
begin { procedure Decompose }
Initialize(Dimen, Lower, Upper, Permute);
Pivot(Dimen, 1, Coefficients, Lower, Upper, Permute, Error);
if Error = 0 then
begin
Lower[1, 1] := 1;
Upper[1, 1] := Coefficients[1, 1];
for Term := 1 to Dimen do
begin
Lower[Term, 1] := Coefficients[Term, 1] / Upper[1, 1];
Upper[1, Term] := Coefficients[1, Term] / Lower[1, 1];
end;
end;
Term := 1;
while (Error = 0) and (Term < Dimen - 1) do
begin
Term := Succ(Term);
Pivot(Dimen, Term, Coefficients, Lower, Upper, Permute, Error);
Lower[Term, Term] := 1;
Upper[Term, Term] := Coefficients[Term, Term] RowColumnMult(Term, Lower, Term, Upper);
if ABS(Upper[Term, Term]) < TNNearlyZero then
Error := 2
else

117

for Index := Term + 1 to Dimen do


begin
Upper[Term, Index] := Coefficients[Term, Index] RowColumnMult(Term, Lower, Index, Upper);
Lower[Index, Term] := (Coefficients[Index, Term] RowColumnMult(Index, Lower, Term, Upper)) /
Upper[Term, Term];
end;
end;
Lower[Dimen, Dimen] := 1;
Upper[Dimen, Dimen] := Coefficients[Dimen, Dimen] RowColumnMult(Dimen, Lower, Dimen, Upper);
if ABS(Upper[Dimen, Dimen]) < TNNearlyZero then
Error := 2;
Decomp := Upper;
for Term := 2 to Dimen do
for Index := 1 to Term - 1 do
Decomp[Term, Index] := Lower[Term, Index];
end; { procedure Decompose }
begin { procedure LU_Decompose }
TestInput(Dimen, Error);
if Error = 0 then
if Dimen = 1 then
begin
Decomp := Coefficients;
Permute[1, 1] := 1;
end
else
Decompose(Dimen, Coefficients, Decomp, Permute, Error);
end; { procedure LU_Decompose }
procedure LU_Solve{(Dimen
: integer;
var Decomp
: TNmatrix;
Constants : TNvector;
var Permute
: TNmatrix;
var Solution : TNvector;
var Error
: byte)};
procedure Initial(Dimen
: integer;
var Solution : TNvector;
var Error
: byte);
begin
Error := 0;
FillChar(Solution, SizeOf(Solution), 0);
if Dimen < 1 then
Error := 1;
end; { procedure Initial }
procedure FindSolution(Dimen
: integer;
var Decomp
: TNmatrix;
var Constants : TNvector;
var Solution : TNvector);
var
PartialSolution : TNvector;
Term, Index : integer;
Sum : Float;
begin { procedure FindSolution }
PartialSolution[1] := Constants[1];
for Term := 2 to Dimen do
begin
Sum := 0;
for Index := 1 to Term - 1 do
if Term = Index then

118

Sum := Sum + PartialSolution[Index]


else
Sum := Sum + Decomp[Term, Index] * PartialSolution[Index];
PartialSolution[Term] := Constants[Term] - Sum;
end;
Solution[Dimen] := PartialSolution[Dimen] / Decomp[Dimen, Dimen];
for Term := Dimen - 1 downto 1 do
begin
Sum := 0;
for Index := Term + 1 to Dimen do
Sum := Sum + Decomp[Term, Index] * Solution[Index];
Solution[Term] := (PartialSolution[Term] - Sum)/Decomp[Term, Term];
end;
end; { procedure FindSolution }
procedure PermuteConstants(Dimen
: integer;
var Permute
: TNmatrix;
var Constants : TNvector);
var
Row, Column : integer;
Entry : Float;
TempConstants : TNvector;
begin
for Row := 1 to Dimen do
begin
Entry := 0;
for Column := 1 to Dimen do
Entry := Entry + Permute[Row, Column] * Constants[Column];
TempConstants[Row] := Entry;
end;
Constants := TempConstants;
end; { procedure PermuteConstants }
begin { procedure Solve_LU_Decompostion }
Initial(Dimen, Solution, Error);
if Error = 0 then
PermuteConstants(Dimen, Permute, Constants);
FindSolution(Dimen, Decomp, Constants, Solution);
end; { procedure LU_Solve }
procedure Gauss_Seidel{(Dimen
: integer;
Coefficients : TNmatrix;
Constants
: TNvector;
Tol
: Float;
MaxIter
: integer;
var Solution
: TNvector;
var Iter
: integer;
var Error
: byte)};
var
Guess : TNvector;
procedure TestInput(Dimen
: integer;
Tol
: Float;
MaxIter
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Solution
: TNvector;
var Error
: byte);
begin
Error := 0;
if Dimen < 1 then
Error := 3
else
if Tol <= 0 then
Error := 4

119

else
if MaxIter < 0 then
Error := 5;
if (Error = 0) and (Dimen = 1) then
begin
if ABS(Coefficients[1, 1]) < TNNearlyZero then
Error := 6
else
Solution[1] := Constants[1] / Coefficients[1, 1];
end;
end; { procedure TestInput }
procedure TestForDiagDominance(Dimen
: integer;
var Coefficients : TNmatrix;
var Error
: byte);
var
Row, Column : integer;
Sum : Float;
begin
Row := 0;
while (Row < Dimen) and (Error < 2) do
begin
Row := Succ(Row);
Sum := 0;
for Column := 1 to Dimen do
if Column <> Row then
Sum := Sum + ABS(Coefficients[Row, Column]);
if Sum > ABS(Coefficients[Row, Row]) then
Error := 1;
if ABS(Coefficients[Row, Row]) < TNNearlyZero then
Error := 6;
end; { while }
end; { procedure TestForDiagDominance }
procedure MakeInitialGuess(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Guess
: TNvector);
var
Term : integer;
begin
FillChar(Guess, SizeOf(Guess), 0);
for Term := 1 to Dimen do
if ABS(Coefficients[Term, Term]) > TNNearlyZero then
Guess[Term] := Constants[Term] / Coefficients[Term, Term];
end; { procedure MakeInitialGuess }
procedure TestForConvergence(Dimen
: integer;
var OldApprox : TNvector;
var NewApprox : TNvector;
Tol
: Float;
var Done
: boolean;
var Product
: Float;
var Error
: byte);
var
Term : integer;
PartProd : Float;
begin
Done := true;
PartProd := 0;
for Term := 1 to Dimen do
begin
if ABS(OldApprox[Term] - NewApprox[Term]) > ABS(NewApprox[Term] * Tol) then
Done := false;

120

if (ABS(OldApprox[Term]) > TNNearlyZero) and (Error = 1) then


{ This is part of the divergence test }
PartProd := PartProd + ABS(NewApprox[Term] / OldApprox[Term]);
end;
Product := Product * PartProd / Dimen;
if Product > 1E20 then
Error := 7
{ Sequence is diverging }
end; { procedure TestForConvergence }
procedure Iterate(Dimen
: integer;
var Coefficients : TNmatrix;
var Constants
: TNvector;
var Guess
: TNvector;
Tol
: Float;
MaxIter
: integer;
var Solution
: TNvector;
var Iter
: integer;
var Error
: byte);
var
Done : boolean;
OldApprox, NewApprox : TNvector;
Term, Loop : integer;
FirstSum, SecondSum, Product : Float;
begin { procedure Iterate }
Product := 1;
Done := false;
Iter := 0;
NewApprox := Guess;
OldApprox := Guess;
while (Iter < MaxIter) and not(Done) and (Error <= 1) do
begin
Iter := Succ(Iter);
for Term := 1 to Dimen do
begin
FirstSum := 0;
SecondSum := 0;
for Loop := 1 to Term - 1 do
FirstSum := FirstSum + Coefficients[Term, Loop] * NewApprox[Loop];
for Loop := Term + 1 to Dimen do
SecondSum := SecondSum + Coefficients[Term, Loop] * OldApprox[Loop];
NewApprox[Term] := (Constants[Term] - FirstSum - SecondSum) /
Coefficients[Term, Term];
end;
TestForConvergence(Dimen, OldApprox, NewApprox, Tol, Done, Product, Error);
OldApprox := NewApprox;
end; { while }
if (Iter < MaxIter) and (Error = 1) then
Error := 0;
if (Iter >= MaxIter) and (Error = 1) then
Error := 1;
if (Iter >= MaxIter) and (Error = 0) then
Error := 2;
Solution := NewApprox;
end; { procedure Iterate }
begin { procedure Gauss_Seidel }
TestInput(Dimen, Tol, MaxIter, Coefficients, Constants, Solution, Error);
if Dimen > 1 then
begin
TestForDiagDominance(Dimen, Coefficients, Error);
if Error < 2 then
begin

121

MakeInitialGuess(Dimen, Coefficients, Constants, Guess);


Iterate(Dimen, Coefficients, Constants, Guess, Tol,
MaxIter, Solution, Iter, Error);
end;
end;
end; { procedure Gauss_Seidel }
end. { Matrix }

122

S-ar putea să vă placă și