Documente Academic
Documente Profesional
Documente Cultură
TEZ DE LICEN
Tema:
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
10
13
15
Capitolul II:
METODE DE REZOLVARE A SISTEMELOR DE ECUAII LINIARE
2.1 Noiuni fundamentale
19
25
30
37
2.2.4 Factorizarea LU
41
46
48
50
54
Capitolul III:
APLICAII UTILIZND LIMBAJUL PASCAL I BORLAND DELPHI 7.0
3.1 Metode exacte directe (Pascal)
56
71
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
Programarea
informatic
conine
urmtoarele
subactiviti:
specificarea,
proiectarea,
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]
Capacitatea de a vedea obiectul prin prisma viziunii noi, depistarea aplicrii noi,
lrgirea aplicaiilor funcionale n practic.
10
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.
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
cunoscut.
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
Obiectul
+ +
(coninutul
aciunii)
Condiiile
n care elevul
va putea proba
formarea
comportamentului
+ Criteriile
dup care
se vor
aprecia
performanele
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
16
17
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
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:
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
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
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
...
...
...
...
a11
a12
...
ak 2
...
aim
, .
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
Corolar 3:
Detreminantul unei matrici ptratice este nul dac:
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
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
.......................................
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
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:
Subdeterminat, dac are mai puine ecuaii dect necunoscute ( i ecuaiile sistemului snt
independente);
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.
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.
(2.1.1)
(2.1.2)
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.
x 2y z 1
Se d sistemul: 2 x my z 2 , m R .
x 2 y 2z 3
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
1 2 1
det A 2 10 1 20 4 2 (10 8 2) 10 8 2 .
1 2 2
1 2 1
a11
31
a11 (1)11.
10 2
18;
1 2
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
29
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
b1
b2
i
, i 1, n , unde i
... ...
...
...
... ...
... 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:
x1
, x2 2 ,..., xi i ,
(2.2.2)
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
b
j 1
ji
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
.
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
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
1 6
1 ;
6
2 12
2;
3 12
2 .
x 1;
Deci am obinut: y 2;
z 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 {(
4x y z 4
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 .
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 4
w 2 20 11w
,
, w)} , unde w R , oricare.
7
7
x yz 0
ax y z a 1, a, b
x y bz 1
Rezolvare:
34
1 1 1
1 1 1
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
1 1
b2
1
b2 1
, z
, deci soluia este: S (1,
,
) .
1 b
1 b
1 b 1 b
2)
a 1, b 1 ;
3)
a 1, b 1
x yz 0
1 1
0 rang A<2. Avem dp =1 rang A=1, avem
1 1
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
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
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
b2 1
S (1,
,
)
1 b 1 b
Dac a 1, b
1
q(1 b) 1
S (q,
,
) , q
b 1
b 1
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:
(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
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
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) .
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:
x y 2 z 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 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.
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
st t s 1 st t 2s 2 1
,
,
)} .
(1 s)(t 1) (1 s)(t 1) t 1
40
(2.4.1)
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 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
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
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
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
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
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
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
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
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
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
11 0
21 22
T
descompunem matricea A a sistemului ntr-un produs L L , unde L
... ...
m1 m 2
... 0
.
... ...
... mm
...
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
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
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
46
vectorul
soluie
este:
1
x 1 .
1
Exemplul 2:
x 2y z 5
Rezolvare:
1 2 1
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
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
(3.1.1)
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
(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)
(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
1
, i 1, n; k 0,1, 2,... [11]
aii
(3.1.5)
D1 L U
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
1
b 2 .
3
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
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
x( k 1) ( L D)1 (b Ux( k ) )
(3.2.1)
( 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
i 1
1
a11
(3.2.3)
j i 1
ij
x (jk ) )
1
, i 2, n
aii
[4]
(3.2.4)
(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
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
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
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
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
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
x1(2)
x2(2)
31 2 17603686 1 74957614
2 20001 1 835679
(2)
x3
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
x1(2) x1(1)
17603686 26
2302564
, 0.1
19140625 25
19140625
x2(1) x2(0)
x3(2) x3(1)
, 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
(3.3.1)
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)
( 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
(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
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
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
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
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
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
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
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).
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.
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
Matricea D3
1 2 2
4 3 4
2 5 2
Dx3=
14.00
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
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
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
0.99778
0.99333
-0.99889
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
81
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
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
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
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
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
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
{
{
{
{
101
Error : byte;
:
:
:
:
: 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
104
Aplicaia 2:
Aplicaia 3:
105
Aplicaia 4:
Aplicaia 5:
106
Aplicaia 6:
107
108
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
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
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
116
117
118
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
121
122