Documente Academic
Documente Profesional
Documente Cultură
ISBN 978-973-144-289-1
Metode Numerice
CUPRINS
Prefa ........................................................................................................................7 I. No iuni introductive...............................................................................................9 I.1. Elemente de teoria erorilor ......................................................................9 I.2. Condi ionarea numeric. Factor de condi ionare....................................11 I.3. Stabilitatea algoritmilor..........................................................................14 I.4. Complexitatea algoritmilor.....................................................................15 II. Aproximarea numerelor reale...............................................................................17 II.1. Reprezentarea numerelor ntregi ntr-o baz.........................................21 II. 2. Reprezentarea numerelor reale ntr-o baz...........................................29 III. Reprezentarea informa iei n sistemele de calcul................................................29 III.1. Reprezentarea intern a numerelor ntregi...........................................29 III. 1.1. Reprezentarea intern a numerelor ntregi fr semn (pozitive)...........................................................................29 III.1.2. Reprezentarea intern a numerelor ntregi (cu semn)...........30 III. 2. Reprezentarea intern a numerelor reale................................35 III.2.1. Forma normalizat................................................................35 III.2.2. Reprezentarea n virgul mobil...........................................36 III.2.3. Standardul IEEE-754............................................................39 III.2.4. Aritmetica n virgul mobil.................................................45 IV. Rezolvarea sistemelor liniare..............................................................................53 IV.1. Elemente de analiz matriceal...........................................................53 IV. 2. Metode directe de rezolvare a sistemelor liniare................................61 IV.2.1. Metoda de eliminare Gauss ..................................................62 IV.2.2. Rezolvarea sistemelor liniare prin metoda de eliminare Gauss...................................................................................67
IV.2.3. Calculul determinantului unei matrice..................................70 IV.2.4. Calculul inversei unei matrice..............................................71 IV.3. Factorul de condi ionare al unei matrice..............................................74 IV.4. Metode iterative de rezolvare a sistemelor liniare...............................80 IV.4.1. Generalit i............................................................................80 IV.4.2. Metoda Jacobi.......................................................................83 IV.4.3. Metoda Gauss-Seidel............................................................87 V. Rezolvarea ecua iilor i sistemelor neliniare........................................................91 V. 1. Rezolvarea ecua iilor neliniare.............................................................91 V.1.1. Metoda bisec iei (metoda njumt irii intervalului)..............93 V.1.2. Metoda coardei.......................................................................96 V.1.3. Metoda tangentei.................................................................104 V. 2. Rezolvarea sistemelor neliniare.........................................................114 V.2.1. Metoda punctului fix............................................................116 V.2.2. Metoda Newton cazul m-dimensional..............................127 VI. Aproximarea func iilor.....................................................................................139 VI. 1. Polinoame de interpolare..................................................................139 VI.1.1. Defini ie. Eroarea de interpolare.........................................142 VI.1.2. Eroarea de interpolare n cazul nodurilor echidistante.......142 VI.1.3. Eroarea de interpolare n cazul nodurilor Cebev.............143 VI.1.4. Polinomul Lagrange de interpolare....................................144 VI.1.5. Polinomul Newton de interpolare de spe a I (ascendent)...161 VI.1.6. Polinomul Newton de interpolare de spe a a II-a (descendent).........................................................................166 VI.1.7. Polinomul Newton de interpolare cu diferen e divizate.....171 VI. 2. Metoda celor mai mici ptrate..........................................................175 VI.2.1. Caracterizarea elementelor de cea mai bun aproximare pe subspa ii Hilbert..................................................................175 VI.2.2. Aproximarea n medie prin metoda celor mai mici ptrate................................................................................178 VI.2.3. Limitri ale metodei celor mai mici ptrate........................186
Metode Numerice
VII. Derivarea numeric.........................................................................................189 VII.1. Formule de derivare aproximativ folosind dezvoltri n serie Taylor................................................................................189 VII.2. Extrapolare Richardson...................................................................205 VII.3. Metode de derivare numeric folosind interpolarea.........................206 VIII. Integrarea numeric........................................................................................209 VIII.1. Formula general de cuadratur numeric. Formula de cuadratur Newton-Cotes..................................................................................209 VIII.2. Formula dreptunghiurilor................................................................212 VIII.3. Formula trapezelor..........................................................................218 VIII.4. Formula lui Simson.........................................................................223 VIII.5. Algoritmul lui Romberg..................................................................224 VIII.6. Cuadratura Gauss............................................................................227 VIII.7. Formule pentru calculul aproximativ al unei integrale duble.........230 Anexa: Ini iere n Maple.........................................................................................235 A.1. Structura intern. Categorii de comenzi MAPLE...............................235 A.2. Operatori, constante i func ii predefinite n MAPLE. Expresii........238 A.3. Numere, iruri i identificatori............................................................243 A.4. Comenzi de calcul n MAPLE............................................................248 A.5. Reprezentri grafice n MAPLE..........................................................251 A.6. Structuri de date n MAPLE................................................................256 A.6.1 Expresii i func ii..................................................................256 A.6.2. Liste......................................................................................261 A.6.3. Mul imi.................................................................................262 A.6.4. Tablouri................................................................................264 A.7. Elemente de programare n MAPLE...................................................269 A.7.1 Atribuirea. Decizia. Structuri repetitive................................269 A.7. 2. Proceduri n MAPLE...........................................................274 Bibliografie.............................................................................................................279 Index........................................................................................................................281
Metode Numerice
PREFA
Analiza numeric are o istorie lung i bogat: Arhimede, Newton sau Gauss, spre exemplu, avnd contribu ii semnificative n acest domeniu. ns metodele numerice moderne, aa cum le folosim astzi, sunt caracterizate de sinergia dintre calculatoarele electronice programabile, analiza matematic, precum i oportunitatea i necesitatea de a rezolva probleme complexe din diverse domenii cum ar fi ingineria, medicina, economia sau tiin ele sociale. Dei a existat ntotdeauna o strns interac iune ntre matematic, pe de o parte i tiin e i tehnologie, pe de alt parte, aceast interac iune s-a intensificat n ultimele decenii. Creterea utilizrii metodelor numerice a fost cauzat nu numai de creterea performan ei calculatoarelor, ci i de mbunt irea algoritmilor. Cu toate c exist produse software performante pentru rezolvarea multor probleme matematice ntlnite n practic, cunoaterea i n elegerea metodelor numerice rmn esen iale pentru utilizarea inteligent a produselor software respective. Aceast carte reprezint o introducere n studiul metodelor numerice. n cele opt capitole ale acestei lucrri sunt prezentate no iuni i rezultate fundamentale ce in de aproximarea numerelor reale, reprezentarea informa iei n sistemele de calcul i aritmetica n virgula mobil, rezolvarea sistemelor liniare (prin metode directe i iterative), rezolvarea ecua iilor i sistemelor neliniare, aproximarea func iilor (prin polinoame de interpolare i metoda celor mai mici ptrate), derivarea i integrarea numeric. Sunt descrise cele mai utilizate metode numerice, aduse la o form algoritmic. n fiecare caz n parte sunt prezentate proceduri n MAPLE i se fac compara ii ntre datele de ieire ale procedurilor respective i rezultatele afiate de comenzile MAPLE destinate rezolvrii acelorai probleme. n multe situa ii, pentru a eviden ia erorile de rotunjire, se compar rezultatele ob inute utiliznd aritmetica virgulei mobile cu rezultatele ob inute folosind calculul simbolic.
Cartea de fa corespunde programei analitice a cursului de Metode Numerice (de la Ingineria Sistemelor, Ingineria Energetic i Inginerie Industrial licen ). n afar de destina ia ei direct de manual pentru studen ii facult ilor tehnice, cartea poate servi, pentru cei interesa i, ca punct de plecare n studiul mai aprofundat al metodelor numerice.
Metode Numerice
I. No iuni introductive
Metodele numerice reprezint tehnici prin care problemele matematice sunt reformulate astfel nct s fie rezolvate numai prin opera ii aritmetice. Prin trecerea de la infinit la finit, diferen ial la algebric, neliniar la liniar problemele complicate sunt nlocuite de probleme mai simple care au aceeai sau aproape aceeai solu ie. Astfel solu iile ob inute prin aplicarea metodelor numerice reprezint doar aproxima ii ale solu iilor problemelor originale, i deci implic erori.
Erorile inerente sunt anterioare aplicrii metodei numerice, iar erorile de trunchiere i de rotunjire apar n timpul calculului numeric. Erori absolute i erori relative Eroarea absolut = valoare aproximativ - valoare exact Eroarea relativ =
eroare absolut valoare exact
Din aceste defini ii se ob ine: Valoare aproximativ = (valoare exact )(1 + eroare relativ) Eroarea absolut nu ine seama de ordinul de mrime al valorilor comparate. De exemplu, o eroare n centimetri este mai important dac lungimea calculat este de 100 cm, dect dac este de 100 km. De aceea, eroarea relativ se raporteaz la valoarea real. Adesea eroarea relativ se exprim n procente:
eroare absolut valoare exact
. 100 %
De obicei valoarea exact nu este cunoscut. De aceea nici eroarea (absolut sau relativ) nu poate fi calculat, i doar se estimeaz valorile limit ale acesteia. Se utilizeaz majoran i pentru modulul erorii (sau norma erorii, dac se lucreaz ntr-un spa iu normat).
Erori ale datelor i erori de calcul Considerm urmtoarea problem tipic: calculul valorii unei func ii f:RR pentru un argument dat. Fie: x x* f* = valoarea de intrare exact = valoare de intrare aproximativ = func ia aproximativ de calcul f*(x*) - f(x) = (f*(x*) - f(x*)) - (f(x*) - f(x)) Deci
10
Metode Numerice
Eroare total = eroare de calcul + eroare propagat a datelor, unde, Eroare de calcul = f*(x*) - f(x*) Eroare a datelor = x* - x. Algoritmul nu are nici un efect asupra erorii propagate a datelor.
Erori de trunchiere i erori de rotunjire Eroare de trunchiere = diferen a dintre rezultatul exact (pentru datele de intrare curente) i rezultatul furnizat de un algoritm dat utiliznd aritmetica exact. Eroare de rotunjire = diferen a dintre rezultatul produs de un algoritm dat utiliznd aritmetica exact i rezultatul produs de acelai algoritm aritmetic cu precizie limitat (de exemplu aritmetica virgulei mobile). Eroarea de calcul este suma dintre eroarea de trunchiere i eroarea de rotunjire, dar de obicei una dintre acestea predomin. De exemplu, dac aproximm derivata ntr-un punct prin
f (x + h ) f (x ) h h , unde M = sup f (t ) pentru t ntr-o 2
utiliznd o
f (x )
vecintate a lui x (acesta rezult aplicnd formula lui Taylor de ordinul doi n x). Dac domin eroarea cu care se reprezint valorile lui f, atunci eroarea de rotunjire n formula de aproximare considerat este mrginit de total este mrginit de E(h) = M Avem E (h ) = 2 . Deci eroarea h
minim pentru h 2
. Pentru valori mai mici ale lui h eroarea total crete din M
11
cauza creterii erorii de rotunjire, iar pentru valori mai mari ale lui h eroarea total crete din cauza creterii erorii de trunchiere.
y*y y = . y y
Deseori eroarea y este dificil de estimat. Ideea analizei erorilor din punct de vedere a erorilor backward este urmtoarea: solu ia aproximativ y* este considerat solu ia exact a unei probleme cu datele ini iale modificate, mai precis se consider y* = f(x*), unde x* este o perturba ie a lui x.
Eroare backward absolut = x = x* - x, unde f(x) = y i f(x*) = y*. Eroare backward relativ =
x*x x = . x x
Solu ia aproximativ y* se consider "bun" dac este solu ie exact pentru o problem cu datele "uor" perturbate. De exemplu, dac aproximm este | y | =| y* - y | = | 2.2 - 2.23606| 0.03606 iar eroarea forward relativ este aproximativ 1.6 %. Pentru a calcula eroarea backward, observm c absolut este | x | =| x* - x | = | 4.84 - 5 | 0.16, iar eroarea backward relativ este aproximativ 3 %. 4.84 =2.2. Eroarea backward 5 prin y* = 2.2, eroarea forward absolut
12
Metode Numerice
S revenim la calculul y = f(x), unde f : R R. S presupunem c se ob ine valoarea aproximativ y*. Fie x* cu proprietatea c f(x*) = y*. Avem
f (x *) f (x ) f (x ) x * x x
cond =
y y = . x x
Problema este ru condi ionat, dac factorul de condi ionare cond >> 1. Factorul de condi ionare ac ioneaz ca un "factor de amplificare" legnd eroarea forward de eroarea backward: | eroarea relativ forward| = cond | eroarea relativ backward| De obicei factorul de condi ionare nu este cunoscut exact i poate varia n func ie de datele de intrare. De aceea se utilizeaz o estima ie margine superioar pentru cond. Deci | eroarea relativ forward | < cond | eroarea relativ backward |.
Considerm un exemplu de estimare pentru factorul de condi ionare. S presupunem c se evalueaz func ia diferen iabil f pentru data de intrare x i se ob ine valoarea aproximativ y* corespunznd valorii x* = x + x, (mai precis y* = f(x*)). Eroarea absolut forward este f(x + x) - f(x) f (x ) x
13
stabil dac rezultatul produs este solu ia exact a aceleai probleme cu datele "uor"
perturbate. n cazul algoritmilor stabili efectul erorii de calcul nu este mai puternic dect efectul erorii (mici) a datelor de intrare. Un algoritm instabil poate amplifica mult perturba iile date de erorile de calcul.
Acurate ea metodelor Acurate ea se refer la apropierea solu iei calculate de solu ia exact a
problemei. Stabilitatea algoritmului nu garanteaz acurate ea. Aceasta depinde n egal msur de buna condi ionare a problemei i de stabilitatea algoritmului.
14
Metode Numerice
Inacurate ea poate rezulta din aplicarea unui algoritm stabil unei probleme ru condi ionate, ca i din aplicarea unui algoritm instabil unei probleme bine condi ionate. Aplicarea (cu ajutorul calculatorului) unui algoritm stabil unei probleme bine condi ionat garanteaz ob inerea solu iei cu o precizie bun, n sensul c eroarea relativ a solu iei calculate fa de solu ia exact este de ordinul de mrime al erorilor de reprezentare a datelor n calculator.
timpul necesar execu iei algoritmului (dat de numrul de opera ii elementare) spa iul de memorie necesitat de algoritm
n general nu este posibil s ob inem simultan un timp de execu ie mai scurt precum
(n ) =0 f (n )
16
Metode Numerice
Bk
k =0
nzestrat cu ordinea
Considerm func ia fn : An {0, 1, , bn+1-1 } definit prin fn(n, n-1, , 0) = nbn + n-1bn-1 + + 2b2 + 1b + 0. Demonstrm c func ia fn este bijectiv. Artm pentru nceput c fn este strict cresctoare, deci este injectiv. Apoi, innd cont c mul imile {0, 1, , bn+1-1} i An sunt mul imi finite cu acelai cardinal (numr de elemente) va rezulta c de fapt fn este o bijec ie. Fixm dou elemente din An, =(n, n-1, , 0 ) i = (n, n-1,
17
fn(0, 1, , n) = nbn + n-1bn-1 + + k+1bk+1+ kbk +k-1bk-1+ + 1b + 0 = nbn + n-1bn-1 + + k+1bk+1 + kbk + k-1bk-1+ + 1b + 0
nbn + n-1bn-1 + + k+1bk+1+ (k -1)bk +(b -1)bk-1+ + (b-1)
= nbn + n-1bn-1 + + k+1bk+1+(k -1)bk +(b -1)(bk-1+ + b +1) = nbn + n-1bn-1 + + k+1bk+1+ kbk - bk + (b -1) = nbn + n-1bn-1 + + k+1bk+1+ kbk - 1
< nbn + n-1bn-1 + + k+1bk+1+ kbk fn()
bk 1 b 1
n consecin , < implic fn() < fn(), deci fn este strict cresctoare. Folosind bijectivitatea func iei fn demonstrm urmtoarea teorem:
Teorema 2.1. Fie b o baz (adic b N, b 2). Orice numr natural nenul x
poate fi scris n mod unic sub forma x = nbn + n-1bn-1 + + 2b2 + 1b + 0, cu n 0.
i 0, 1, ., n {0, 1, , b-1 }. Demonstra ie. Conform principiului multiplicativ al lui Arhimede, pentru
numr natural nenul x exist un numr natural n 1 astfel nct: bn x < bn+1. De aici rezult c exist un singur numr natural n 1 astfel nct x {0, 1, , bn+1-1 } - {0, 1, , bn-1 }. Deoarece x{0, 1, , bn+1-1 } i fn : An {0, 1, , bn+1-1 } este bijectiv, exist un unic element = (n, n-1, , 0 ) n An astfel nct x = fn () sau echivalent x = nbn + n-1bn-1 + + 2b2 + 1b + 0. Dac n ar fi nul, atunci x = n-1bn-1 + + 2b2 + 1b + 0
(b -1)bn-1 + + (b -1)b2 + (b -1)b + (b -1)
= (b -1) (bn-1 + b2 + b + 1)
18
Metode Numerice
= (b -1)
< bn,
bn 1 b 1
ceea ce contrazice alegerea lui n. Deci n 0. Dac ar exista dou reprezentri x = nbn + n-1bn-1 + + 2b2 + 1b + 0, cu n 0. = mbm + m-1bm-1 + + 2b2 + 1b + 0, cu m 0. cu 0, 1, ., n, 0, 1, ., m {0, 1, , b-1 }, atunci bn x < bn+1 i bm x < bm+1
Plecnd de la observa ia urmtoare x = nbn + n-1bn-1 + + 2b2 + 1b + 0 = ( ( (nb + n-1 )b + + 2)b + 1)b + 0 deducem faptul c reprezentarea sub forma din teorema 1 a unui numr natural nenul x se poate face prin mpr iri succesive la b i re inerea resturilor de la sfrit spre nceput: x = bq0 + 0, q0 = bq1 + 1, qn-1 = b qn + n, 0 0 < b, q0 0 0 1 < b, q1 0 0 n < b, qn = 0
Scrierea lui x sub forma din teorema 1 se numete reprezentarea lui x n baza b. Trecerea unui numr dintr-o baz n alta se numete conversie. Convenim s scriem baz n care este reprezentat un numr ca indice. De exemplu numrul 4710 se scrie n baza 2 astfel:
19
47 46 1
2 23 22 1 2 11 10 1 2 5 4 1 2 2 2 0 2 1
Conversia de la baza b la baza 10 se face prin nsumarea puterilor lui b nmul ite cu cifrele din baza b corespunztoare. De exemplu, numrul 1278 i 1A816 se scriu n baza 10 astfel: 1278 = 7 80 + 2 81 + 1 82 = 8710 1A816 = 8 160 + A 161 + 1 162 = 8 160 + 10 161 + 1 162 = 42410. Conversia unui numr ntreg dintr-o baz b1 ntr-o baz b2 se face prin intermediul bazei 10. n cazul particular, n care baza b1 care este o putere a lui b2 sau invers, conversia se poate face i direct. Fie b1 = bk, cu k 1. Conversia de la baza b1 = bk la baza b corespunde dezvoltrii fiecrei cifre din reprezentare n echivalentul ei n baza b utiliznd k cifre (adugnd eventual zerouri n fa ). De exemplu, 1728 = 0011110102 = 11110102, deoarece 8 = 23 i 18 = 0012, 28 = 0102, 78 = 1112 4E16 = 010011102 = 10011102, deoarece 16 = 24 i 416 = 01002, E16 = 11102.
20
Metode Numerice
Bk
k 1
b nn
n =1
b nn
n 1
n 1 (b-1) n i n b b
bn
n 1
este
Teorema 2.2. Fie b o baz i F : C [0, ) func ia definit mai sus. Atunci
1. F este surjectiv 2. Pentru orice numr real x > 0 care nu este de forma n N* exist un unic C astfel nct F() = x. 3. Dac numrul real x > 0 este de forma
v cu vN i bn
v cu vN i n N* , atunci bn
exist dou elemente , C cu astfel nct F() = F() = x. n plus, dac C are proprietatea c F() = x, atunci = sau =
x. Pe de alt parte, nmul ind inegalitatea qn xbn < qn + 1 cu b i innd cont c [xbn+1] = qn+1, ob inem
21
bqn qn+1 < bqn + b 0 qn+1 - bqn < b Lum 0 = [x] i n = qn - b qn-1 pentru orice n 1. Evident 0 N i 0 n b-1. Demonstrm c F(0, 1, , n, ) = x. Pentru aceasta este suficient s demonstrm c sn =
n
n =0
b nn
k = 0 + k k =0 b
q k bq k 1 = 0 + bk k =1
bk k
k =1
q k 1 q q q = 0 + n - 0 = n . n 0 k 1 b b b bn
Din lim
qn = x, rezult c lim sn = x. n bn
v cu vN i n N*. n b
Presupunem prin absurd c n afara elementului C construit anterior mai exist C astfel nct F()= x, sau echivalent
n n = x. Dac notm tn = k suma bn k n =0 k =0 b
n =0
bn n
k =0
bk k
1 1 b 1 = tn + n . Deci = tn + (b-1) n +1 k b 1 b b k = n +1 b
1 . bn
n k qn = k n b k =0 b
n 0
b nn
. Seriile
n 0
b nn
n0
bn n
22
Metode Numerice
mai mic numr natural cu proprietatea c exist v0 natural astfel nct x = Utiliznd rela iile stabilite la punctul 1, ob inem q n 0 = [x b n 0 ] = x b n 0 = v0 i
q n0 b
n0 n0
k =0
b kk
v0 = x. Deci b n0
= (0, 1, , n 0 , 0,0, ).
Demonstrm c n 0 0. Presupunnd prin absurd c n 0 = 0, ar rezulta c x =
n 0 1 k =0
b kk
w0 ceea ce ar contrazice alegerea lui n0. Lund b n 0 1 = (0, 1, , n 0 -1, b -1, b -1, ).
ob inem n n0 k 1 b n = b k - b n0 + n =0 k =0
b 1 1 = x - n + (b-1) k b 0 k = n 0 +1 b
1 k k = n 0 +1 b
=x-
1 1 b + (b-1) n 0 +1 = x. n0 b 1 b b
Deci F() = x i . n continuare presupunem c exist C cu proprietatea c F() = x. Fie n un numr natural cu proprietatea c exist m > n astfel nct m < b-1. Atunci avem i < (b-1) i i = n +1 b
1 1 = n. i b i = n +1 b
i , ob inem i i =0 b
i + bn bi i =0
n
b ii = i = n +1
b n i i + bn
i=0
i . i i = n +1 b
23
Numrul
b n i i
i=0
b n i i = [xbn]. Cu un
i =0
b n i i - b b n i i = n => n = n
i=0
Exist un numr natural N astfel nct n = b-1 oricare n N+1. Oricare ar fi N exist nN N+1 astfel nct n N b-1 (sau echivalent,
n N < b-1).
Presupunem c are loc cazul (i) i considerm N0 cel mai mic numr natural cu proprietatea indicat. Din cele demonstrate mai sus rezult c i = i pentru orice i N0 -1 (deoarece N 0 < (b-1)). Demonstrm c = . Avem x= n N0 k n = bk + n =0 b k =0
b 1 N0 k k = b k + (b-1) k =0 k = N 0 +1 b
1 k k = N 0 +1 b
N0 k 1 b 1 w = k + N = N . + (b-1) N +1 k k b 0 b 1 k =0 b b 0 b 0 k =0 b N0
n =0
b nn
n =0
b nn
, se ob ine N 0 = N 0 -1, i
Dac are loc cazul (ii), atunci evident n = n pentru orice n, i deci = .
24
Metode Numerice
n =0
b nn
numete periodic dac exist un numerele naturale N, p astfel nct t = t+p+1 pentru orice t N. n aceast situa ie se folosete urmtoarea nota ie x = 0, 12N-1(NN+1N+p).
Teorem 2.4. Fie b o baz (adic b N, b 2). Un numr real x > 0 este
ra ional dac i numai dac x admite o reprezentare periodic n baza b.
n =0
b nn
N 1 n =0
b nn + b nn
n =0
N 1
n N+p n + n n n =0 b n=N b
b (p+1)n
N 1
n N + p n b p +1 + n p +1 , n b 1 n =0 b n=N b
n =0
b nn
oricare ar fi N exist nN N+1 astfel nct n N b-1. Atunci avem 0 = [x] i n = [xbn] - b[xbn-1], n 1,
1 + 0b = [xb] => 1 = [(x-0)b] = [x1] 2 + b1 + b20 = [xb2] => 2 = [((x-0)b - 1)b] = [(x1-1)b] = [x2]
pentru orice n 1. Deoarece un reprezint restul unei mpr iri la j, un {0, 1,, j1} ceea ce arat c exist N i p naturale astfel nct uN = uN+p+1. De aici rezult xN = xN+p+1 i N = N+p+1. Mai departe avem xN+1 = b(xN - N) = b(xN+p+1 - N+p+1) = xN+p+2 i deci N+1 = N+p+2. Folosind un ra ionament prin induc ie dup t, se demonstreaz c N+t = N+p+1+t, t 0. n consecin , reprezentarea lui x este periodic.
Aa cum am observat n demonstra ia teoremei precedente, pentru scrierea unui numr real pozitiv x n baza b se procedeaz n felul urmtor. Se scrie x = [x] + {x}, 0 {x} < 1, unde prin [x] am notat partea ntreag a lui x, iar prin {x} partea frac ionar a lui x. Conversia numrului real pozitiv x de la baza 10 la baza b se face separat pentru partea ntreag (care este un numr ntreg) i partea frac ionar. Conversia pr ii frac ionare se face prin nmul iri repetate cu b, dup cum urmeaz: b {x} = x1 = [x1] +{x1}= 1 + {x1} b {x1} = x2 = [x2] +{x2}= 2 + {x2} b {xn-1} = xn = [xn] +{xn}= n + {xn} ceea ce nseamn c {x} se reprezint : {x}b = 0, 12 n n urma acestor nmul iri repetate, pot apare trei situa ii:
26
Metode Numerice
1. {xn}= 0, ceea ce determin ncheierea algoritmului; n aceast situa ie {x} se poate reprezenta exact prin 0, 12 n = corespunde cazului x = v cu vN i n N*). n b
b kk
k =1
(aceast situa ie
2. {xn} 0, dar se observ o periodicitate, adic una sau un grup de cifre care se repet ( aceast situa ie corespunde cazului x ra ional dar x orice vN i m N*). 3. {xn} 0, iar cifrele ob inute se succed fr a respecta vreo regul ( aceast situa ie corespunde cazului x ira ional). n aceast situa ie 0,12 n = k reprezint doar o aproxima ie pentru {x} n baza b. k k =1 b
n
v bm
pentru
27
28
Metode Numerice
Reprezentarea n memoria unui calculator a numerelor ntregi depinde de lungimea cuvntului utilizat (numrul de bi i). Pentru a reprezenta un numr ntreg pozitiv pe k bi i se face conversia numrului respectiv la baza 2, iar configura ia binar ob inut se completeaz la stnga cu zerouri pn se ob in k cifre. Cel mai mare numr ntreg reprezentabil pe k bi i este 11 ...1 2 = 2
k ori
k-1
+2
k-2
2k 1 ++ 2 = = 2k 1 2 1
0
Exemple:
k 8 bi i = 1 B (byte) 16 bi i = 2 B 32 bi i = 4 B Domeniul de valori 0255 0.65 535 0.2 147 483 647
7 00111110 3 E
0 3E (n hexazecimal)
n reprezentarea binar a numerelor, ponderile cifrelor binare cresc de la dreapta la stnga, numerotarea lor corespunznd puterilor cresctoare ale bazei de numera ie 2. Astfel, prima cifr binar din dreapta reprezint ponderea 20 i este bitul cel mai
pu in semnificativ. Primul bit din stnga este bitul cel mai semnificativ.
Notm cu rela ia de ordine lexicografic pe mul imea irurilor formate din 0 i 1,
de lungime k. Din punct de vedere al ordinii lexicografice, reprezentrile numerelor ntregi fr semn satisfac: 0 1 2k - 1 n consecin , rela ia de ordine lexicografic este compatibil cu rela ia de ordine numeric natural.
cod direct (semn i valoare absolut) cod invers (complement fa de 1) cod complementar (complement fa de 2)
S presupunem c se rezerv k bi i pentru reprezentarea unui numr ntreg. Prin toate cele metode numerele ntregi pozitive se codific prin conversie n baza 2 pe k-1 bi i i completarea primului bit cu zero. Astfel, pentru k = 16 reprezentarea intern a numrului x = 7210 = 26 + 23 = 10010002 este :
0048 (n hexazecimal)
30
Metode Numerice
Mul imea numerelor ntregi nenegative reprezentabile pe k bi i (prin oricare din cele trei metode) este {0, 1, 2, ..., 2k-1-1} (deoarece primul bit este rezervat, iar reprezentarea se face doar pe restul de k-1 bi i). Prezentm mai departe modul n care se face codificarea numerelor ntregi negative prin fiecare din cele trei metode. Prin metoda semn i valoare (cod direct) se codific valoarea absolut a numrului ntreg negativ pe k-1 bi i i se completeaz primul bit cu 1. n consecin , mul imea numerelor ntregi negative care se pot reprezenta prin aceast metod este{-2k-1 + 1, -2k-1 + 2, ...., 0}. Aceast metod de reprezentare prezint unele inconveniente: zero are dou reprezentri distincte (000 i 100), ca +0 i 0 tabelele de adunare i nmul ire sunt complicate datorit bitului de semn care trebuie tratat separat. Din punct de vedere al ordinii lexicografice avem: +0 1 2k-1-1 -0 -1 -(2k-1-1) Deci rela ia de ordine lexicografic nu este compatibil cu rela ia natural. Pentru a ob ine codul invers: 1. se ob ine reprezentarea valorii absolute a numrului ntreg negativ pe k bi i 2. n reprezentarea ob inut (la pasul 1) se nlocuiete fiecare bit 0 cu 1 de ordine
i 1 cu 0
Mul imea numerelor ntregi cu semn care pot fi reprezentate prin aceast metod este acelai ca pentru metoda precedent : {-2k-1 + 1, -2k-1 + 2, ...., 0, 1, ...., 2k-1-1}. Dac notm cu x complementul fa de 1 al numrului x, atunci x + x = 11.... 1 2 = 2k - 1
k
31
n consecin , complementul fa de 1 poate fi folosit pe post de opus fa de opera ia de adunare. Din acest motiv opera iile aritmetice relativ la aceast reprezentare sunt avantajoase, deoarece opera ia de scdere se realizeaz prin adunarea complementului fa de 1. Un dezavantaj al acestei reprezentri este recunoaterea a dou zerouri (111 i 00..0). Din punct de vedere al ordinii lexicografice avem: +0 1 2k-1-1 -(2k-1-1) -(2k-1-2) -0 de ordine
Deci rela ia de ordine lexicografic nu este compatibil cu rela ia natural. Pentru a ob ine codul complementar: 1. se ob ine codul invers pe k bi i 2. se adun o unitate la valoarea ob inut (la pasul 1) Zero
numerelor ntregi cu semn care pot fi reprezentate prin aceast metod este {-2k-1, -2k-1 + 2, ...., 0, 1, ...., 2k-1-1}. Dac x este complementul fa de doi al lui x, atunci x + x = 11.... 1 2 + 1 = 2k - 1 + 1 = 2k
k
De exemplu, pentru k = 16, reprezentrile pentru x = -72 prin cele trei metode se
ob in dup cum urmeaz: 7210 = 10010002 =10010002
32
Metode Numerice
1048 (n hexazecimal)
11111111 10110111 F F B 7
FFB7 (n hexazecimal)
Cod complementar(complement fa de 2)
11111111 10111000 F F B 8
FFB8 (n hexazecimal)
#include <stdio.h> #include <conio.h> #include <math.h> void main(){ unsigned char x=72; signed char y=-72; clrscr(); printf("\n%u-->%04X\n%d-->%04X",x,x,y,y); getch(); }
Programul afiseaz
33
Observa ie: Se poate remarca faptul c primul bit din stnga (bitul cel mai
semnificativ) este ntotdeauna 0 pentru numerele pozitive i 1 pentru numerele negative i aceasta pentru fiecare din cele trei reprezentri. Acest bit se mai
cod direct (semn i cod indirect valoare absolut) 0111111=7FFF16 0111110=7FFE16 0000001=000116 0000000=000016 1000000=800016 1000001=000116 1111110=FFFE16 1111111=FFFF16 (compl. fa de 1) 0111111=7FFF16 0111110=7FFE16 0000001=000116 0000000=000016 1111111=FFFF16 1111110=FFFE16 1000001=800116 1000000=800016
cod complementar (compl. fa de 2) 0111111=7FFF16 0111110=7FFE16 0000001=000116 0000000=000016 0000000=000016 1111111=FFFF16 1000010=800216 1000001=800116 1000000=800016
34
Metode Numerice
x = m bE, unde
subunitar cu prima cifr dup virgul n reprezentarea n baz b diferit de zero). Pentru a scrie numrul sub form normalizat trebuie gsite mantisa i exponentul. Considerm reprezentarea |x| =
exist nN N+1 astfel nct n N b - 1. Reprezentm numrul ntreg 0 = bnn + bn-1n-1 + b1 + 0 n baza b. Astfel scrierea lui x n baza b este dat de xb = nn-110,12m Mantisa se ob ine deplasnd virgula n fa a primei cifre nenule ce apare n scrierea numrului (n baza b). Exponentul se ia egal cu numrul de pozi ii cu care s-a deplasat virgula precedat de semnul + dac deplasarea s-a fcut de la dreapta la stnga, i de semnul dac deplasarea s-a fcut de la stnga la dreapta. Astfel dac x este reprezentat n baza b sub forma xb = nn-110,12m, cu n 0, atunci forma normalizat este xb = 0, nn-11012m bn+1 dac x este reprezentat n baza b sub forma xb = 0, 12m, cu 1 0, atunci forma normalizat este xb = 0, 12m b0
35
dac x este reprezentat n baza b sub forma xb = 0,12 ii+1 m, cu 1= 2 = = i = 0 i i+1 0, atunci forma normalizat este xb = 0, i+1 m b-i.
Mai precis, denumirea de numr n virgul mobil va fi utilizat pentru numerele reale care se reprezint exact sub forma de mai sus. n aceast reprezentare 0, 1, , p-1 se numesc cifre semnificative. Fiecrei reprezentri n virgul mobil i se asociaz dou numere ntregi, Emin i Emax, ce reprezint valorile limit permise pentru exponentul E (Emin E Emax). Tabelul de mai jos exemplific cei patru parametri (baza, precizia, valorile limit ale exponentului) ce caracterizeaz reprezentarea n virgul mobil n diverse sisteme Sistem IEEE single-precission IEEE double-precission Cray calculator HP mainframe IBM baza b 2 2 2 10 16 precizia p 24 53 48 12 6 Emin -126 -1022 -16383 -499 -64 Emax 127 1023 16384 499 63
36
Metode Numerice
Reprezentarea n virgul mobil se numete normalizat dac se impune condi ia ca cifra cea mai semnificativ 0 s fie nenul. Reprezentarea normalizat are urmtoarele avantaje: reprezentarea fiecrui numr este unic nu de pierd cifre pentru reprezentarea primele zerourilor de la dreapta virgulei n sistemele binare (corespunztoare bazei b =2) prima cifr poate s nu mai fie stocat (deoarece este ntotdeauna 1). Restric ia 0 0, face imposibil reprezentarea lui zero. O reprezentare natural a lui zero este 1,0 b E min 1 . Numrul de numere n virgul mobil normalizat este 2(b-1)bp-1(Emax - Emin +1). Cel mai mic numr pozitiv normalizat se noteaz UFL (underflow level) i este UFL = b
E min
Cel mai mare numr normalizat se noteaz OFL (overflow level) i este OFL = (b-1 + =b
E max +1
b 1 b 1 b 1 E + 2 ++ p 1 ) b max b b b
(1 -
1 ). bp
Ca urmare nu toate numerele reale sunt reprezentabile exact. Numerele prea mari pentru a fi reprezentate corespund unei depiri superioare de capacitate (overflow), iar numerele prea mici unei depiri inferioare de capacitate (underflow). Pentru a fi reprezentat un numr real x este aproximat cu un numr n virgul mobil pe care convenim s-l notm fl(x). Aproximarea lui x prin fl(x) poart numele de rotunjire, iar eroarea introdus de eroare de rotunjire. Exist mai multe modalit i pentru rotunjire:
37
Rotunjirea la par determin o acurate e mai mare a reprezentrii. Acurate ea sistemului n virgul mobil este caracterizat de aa numita precizie a mainii (sau
epsilon main), notat mach. Precizia a mainii este definit ca cel mai mic numr
pozitiv cu proprietatea c fl(1.+ ) > 1. Dac regula de rotunjire este trunchierea atunci mach = b1 - p, iar dac regula de rotunjire este rotunjirea la par atunci mach =
1 1- p b . 2
Eroarea relativ maxim cu care fl(x) aproximeaz x este dat de fl(x ) x mach. x Dei amndou sunt "mici", precizia mainii (mach) i cel mai mic numr pozitiv normalizat UFL (n reprezentare n virgul mobil fixat) nu trebuie confundate. De obicei Emin < -p i deci ntre ele exist rela ia 0 < UFL < mach < OFL. Fie x un numr real aproximat de fl(x) =(0 +
p 1 1 2 + 2 ++ p 1 )bE. b b b
Exponentul E poate lua att valori pozitive ct i valori negative. Cel mai adesea exponentul este decalat i reprezentat ca un numr ntreg pozitiv (fr semn). Aceasta deoarece ordinea lexicografic (stabilit ntre irurile de cifre din reprezentare) i ordinea natural sunt compatibile n cazul numerelor ntregi fr semn. n consecin , compararea exponen ilor (i a numerelor reale
38
Metode Numerice
corespunztoare) poate fi fcut eficient. Astfel reprezentarea intern a unui numr real x aproximat prin fl(x) = (0 +
ed
unde s este semnul lui x (se completeaz cu 0 dac semnul este + i cu 1 dac semnul este -) iar ed este exponentul ob inut prin adunarea unui decalaj D la exponentul E: ed = E + D.
numbers"):
(0 + p 1 1 2 + 2 ++ p 1 )2E, p = 24, 53, 2 2 2
cu cel pu in una dintre cifrele binare 1, 2, , p-1 nenule. Standardul IEEE-754 definete dou valori speciale pentru situa ii excep ionale:
Inf, pe post de "infinit" ("infinity"), pentru rezultatul mpr irii unui numr
finit la zero.
39
Adunare : Inf + (-Inf) nmul ire: 0Inf mpr ire: 0/0 sau Inf/Inf Calculul restul mpr irii unui numr x la 0 sau a lui Inf la x Calculul rdcinii ptrate
x pentru x < 0.
Scopul acestor valori este acela de a permite continuarea calculului. Un numr n virgul mobil (0 + conform IEEE-754 sub forma s ed 1p-1
unde pentru s se rezerv un bit ce se completeaz cu 0 dac numrul este pozitiv i cu 1 dac numrul este negativ, iar pentru exponentul decalat ed se rezerv k bi i (k=8, 11). Decalajul considerat este D = 2k-1 - 1, deci ed = E + 2k-1 -1, Pe k bi i se pot reprezenta ca numere ntregi fr semn 2k valori, de la 0 la 2k 1. Valorile 0 i 2k 1 sunt rezervate pentru numerele denormalizate i pentru valorile speciale Inf i Nan. Deci pentru un numr n virgul mobil normalizat trebuie ndeplinit condi ia 1 ed 2k-2. De aici rezult c -2k-1+2 E 2k-1-1. De exemplu, pe k = 8 bi i se pot reprezenta numere ntregi fr semn de la 0 la 255. Decalajul considerat este 27 - 1 = 127, deci exponentul E ia valori de la 126 la 127. Numrul de bi i rezerva i pentru exponent determin intervalul de numere reale reprezentabile n calculator. Numrul de bi i rezerva i pentru mantis determin precizia de reprezentare (gradul de detaliere) a numerelor. Reprezentarea (0 +
Metode Numerice
1 bit pentru semnul mantisei 8 bi i pentru exponentul decalat (Emin = -126, Emax = 127) 23 bi i pentru mantis (p = 24, 0 = 1 se omite) 1 bit pentru semnul mantisei 11 bi i pentru exponentul decalat (Emin = -1022, Emax = 1023) 52 bi i pentru mantis (p = 53, 0 = 1 se omite)
Regula de rotunjire este rotunjirea la par. Deci pentru simpl precizie, mach = 2-24 10-7 (7 cifre zecimale semnificative). dubl precizie, mach = 2-53 10-16 (16 cifre zecimale semnificative).
dac 0 < ed < 255, atunci v = (-1)s(1 + m)2ed - 127. dac ed = 0, k = 0 pentru orice k= 1,23 i s = 0, atunci v = 0. dac ed = 0, k = 0 pentru orice k= 1,23 i s = 1, atunci v = - 0. dac ed = 0 i exist k 0, atunci v = (-1)s m 2
denormalizat
- 126
; v este o valoare
dac ed = 255, k = 0 pentru orice k= 1,23 i s = 0, atunci v = Inf. dac ed = 255, k = 0 pentru orice k= 1,23 i s = 1, atunci v = -Inf. dac ed = 255 i exist k 0, atunci v = NaN.
Fie reprezentarea n memorie, n dubl precizie: s e10e9 e0 1 2
41
52
52 1 2 + 2 ++ 52 . Valoarea v 2 2 2
Exemple:
dac 0 < ed < 2047, atunci v = (-1)s(1 + m)2ed - 1023. dac ed = 0, k = 0 pentru orice k= 1,52 i s = 0, atunci v = 0. dac ed = 0, k = 0 pentru orice k= 1,52 i s = 1, atunci v = - 0. dac ed = 0 i exist k 0, atunci v = (-1)s m 2 denormalizat dac ed = 2047, k = 0 pentru orice k= 1,52 i s = 0, atunci v = Inf. dac ed = 2047, k = 0 pentru orice k= 1,52 i s = 1, atunci v = -Inf. dac ed = 2047 i exist k 0, atunci v = NaN. - 27, 25 0,1 1,2
- 1022
; v este o valoare
228 = 128 + 64 + 32 + 4 = 27 + 26 +25 +22 = 111001002 0,15 2 = 0,30 = 0 + 0,3 0,3 2 = 0,6 = 0 + 0,6 0,6 2 = 1,2 = 1 + 0,2 0,2 2 = 0,4 = 0 + 0,4 0,4 2 = 0,8 = 0 + 0,8 0,8 2 = 1,6 = 1 + 0,6 x = 11100100,00100110011001 Forma normalizat: x = 0,111001000010011001 28 = 1,11001000010011001 27 ed = 7 + 28-1 - 1 = 135, ed2 = 100001102 m = 11001000010011001100110 [011] (am omis primul bit =1, iar cei trei bi i din parantez sunt utiliza i pentru rotunjire la par)
42
Metode Numerice
fl(x) = 1, 11001000010011001100110 28 Reprezentare n virgul mobil, simpl precizie, (cu bit ascuns) pentru 228,15: 0 100 4 Deci hexazecimal. x = - 27, 25 |x| = 27 + 0,25 27 = 16 + 8 + 2 + 1 = 24 + 23 +21 +20 = 110112 0,25 = 2-2 = 0,012 x = 11011,01 Forma normalizat: x = 0,1101101 25 = 1,101101 24 ed = 4 + 28-1 -1 = 131, ed2 = 100000112 Reprezentare n virgul mobil, simpl precizie (cu bit ascuns) pentru 27,25: 11000001110110100000000000000000 C hexazecimal. x = 0,1 0,1 2 = 0,2 0,2 2 = 0,4 0,4 2 = 0,8 0,8 2 = 1,6 = 1 + 0,6 0,6 2 = 1,2 = 1 + 0,2 0,2 2 = 0,4 0,110 = 0, 00011001100110011 x = 0, 1100110011002-3 = 1,10011001100110011001100 1102-4 fl(x) =1, 10011001100110011001101 2-4 (dup cei 23 de bi i ai mantisei urmeaz 110, i deci rotunjirea se face prin adugarea unei unit i). 1 D A 0 0 0 0 Deci reprezentrii cu bit ascuns a lui -27,25 i corespunde C1DA0000 n 0011 0 110 3 6 0100 0010 4 2 0110 6 0110 0110 6 6
43
ed = - 4 + 28-1 -1 = 123 = 26 + 25 + 24 + 23 + 2 + 1 , ed2 = 11110112 Reprezentare n virgul mobil, simpl precizie (cu bit ascuns) pentru 0,1: 0 0 1 1 11 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 3 x = 1,2 1,2 = 1 + 0,2 0,2 2 = 0,4 0,4 2 = 0,8 0,8 2 = 1,6 = 1 + 0,6 0,6 2 = 1,2 = 1 + 0,2 0,2 2 = 0,4 x = 1, 0011001100110011 x = 1,00110011001100110011001 10020 fl(x) =1,00110011001100110011010 20 (dup cei 23 de bi i ai mantisei urmeaz 100, deci rotunjirea se face astfel nct ultimul bit s aib valoare par). ed = 0 + 28-1 -1 = 127 = 26 + 25 + 24 + 23 + 22 +2 +1 , ed2 = 11111112 Reprezentare n virgul mobil, simpl precizie (cu bit ascuns) pentru 1,2: 0 0 1 1 11 1 1 1 0 0 1 1 0 01 1 0 01 1 0 01 1 0 01 1 0 1 0 3 F 9 9 9 9 9 A Deci reprezentrii cu bit ascuns a lui 1,2 i corespunde 3F99999A n hexazecimal. Urmtorul program n C verific reprezentrile de mai sus.
#include <stdio.h> #include <conio.h> void main(){ long int *i; float f1=228.15,f2=-27.25, f3=0.1, f4=1.2; clrscr(); i=(long int*) &f1; 44
(hexazecimal)",f4,*i); getch(); }
Programul afieaz
Numar in virgula mobila: 228.149994 Format intern 43642666 (hexazecimal) Numar in virgula mobila: -27.250000 Format intern C1DA0000 (hexazecimal) Numar in virgula mobila: 0.100000 Format intern 3DCCCCCD (hexazecimal) Numar in virgula mobila: 1.200000 Format intern 3F99999A (hexazecimal)
45
standardul IEEE-754 ating acest ideal n situa ia n care x op y se gsete n intervalul de numere reale reprezentabile [UFL, OFL]. Depirea superioar de capacitate (overflow) cauzeaz de obicei probleme mai serioase dect depirea inferioar de capacitate (underflow), deoarece nu exist nici o aproxima ie bun pentru un numr real oarecare "mare". Un numr real foarte mic poate fi n mod rezonabil aproximat cu zero. Pe multe sisteme de calcul depirea superioar de capacitate este fatal, n timp ce n caz de depire inferioar de capacitate, numrul respectiv este asociat cu zero. Anumite legi ale aritmeticii reale nu sunt valabile ntr-un sistem n virgul mobil. Astfel adunarea i nmul irea n virgul mobil sunt comutative, dar nu asociative. De exemplu, dac este un numr pozitiv mai mic dect mach, dar mai mare dect mach/2, atunci (1 + ) + = 1, iar 1 + ( + ) > 1. Rezultatul unei opera ii n virgul mobil poate s fie semnificativ diferit fa de rezultatul aceleai opera ii n aritmetica exact. S considerm numrul real x =
100110011001100110011012-4. n simpl precizie este aproximat de fl(x) = 1, 100110011001100110011012-4, 0.000000000000000000000000011001100 n binar sau aproximativ 0.000000047 n zecimal. Programul n C de mai jos pune n eviden cum se propag aceast eroare prin nmul ire:
#include <stdio.h> #include <conio.h> void main(){ float f=1./10,z=10; int i; clrscr(); for(i=1;i<33;i*=2){ printf("\n0.1*10^%d-10^%d = %f ",i+1,i,f*(z*10)-z); z=z*z; }
46
Programul afieaz
0.1*10^2 - 10^1 = 0.000000 0.1*10^3 - 10^2 = 0.000001 0.1*10^5 - 10^4 = 0.000149 0.1*10^9 - 10^8 = 1.490116 0.1*10^17 - 10^16 = 149011616.000000 0.1*10^33 - 10^32 = 1490116168828835360000000.000000
n cazul scderii a dou numere reale x i y, poate aprea urmtorul fenomen (catastrophic cancellation)
mach,
dac fl(x) este egal (sau foarte apropiat de) fl(y). n urmtorul program (n C)
n =0
Seria fiind alternant i convergent, o sum par ial de ordin n, aproximeaz suma seriei (i.e. sin(x)) cu o eroare absolut maxim de
2 n +1
(2n + 1)!
#include<stdio.h> #include<conio.h> #include<math.h> void main(){ float x,s,t,eps,x2; int i,n; clrscr(); printf("x=");scanf("%f",&x); printf("Eroarea=");scanf("%f",&eps); t=x;s=0;i=1; x2=x*x;
47
Mdlina Roxana Buneci while (fabs(t)>=eps){ s+=t;printf("\n%f",s); t=-t*(x2/(4*i*i+2*i)); i++; } printf("\nsin(%f) = %f",x,s); printf("\nsin(%f) = %f" ,x,sin(x)); getch(); }
Pentru x=2 i eroare 10-7 se ob ine aproxima ia 0.909297 corect a lui sin(2). Pentru x = 40 i eroare 10-7 se ob ine aproxima ia 523443136.0 a lui sin(40) ! Valoarea corect este 0.745113Acest rezultat se datoreaz fenomenului de reducere (catastrophic cancellation). Pentru a eviden ia diferen ele ntre cazurile n care se lucreaz n aritmetica exact i cazurile n care se lucreaz n aritmetica n virgul mobil prezentm implementarea calculul sumei de mai sus (care aproximeaz sin(x)) n MAPLE.
> sinus:=proc(x,epsilon) > local t, x2, i,s; > s:=0; i:=1;t:=x;x2:=x*x; > while evalf(abs(t))>=evalf(epsilon) do > s:=s+t; t:=-t*x2/(4*i*i+2*i);i:=i+1 > od; > RETURN(s) > end;
141782 155925
> evalf(sinus(2,10^(-5)));
0.9092961360
48
0.9092974268
> sinus(2., 10^(-5));
0.9092961362
> sin(2.);
0.9092974268 Atunci cnd primul parametru al procedurii sinus este ntreg (sau ra ional) toate calculele se execut simbolic, iar cnd parametru este n virgul mobil calculele se execut n virgul mobil. Pentru x = 30 i eroare 10-5 se ob ine:
> evalf(sinus(30,10^(-5)));
-0.9880298724
> evalf(sin(30));
-0.9880316241
> sinus(30., 10^(-5));
-13.41937809
> sin(30.);
-0.9880316241
Se observ c n cazul n care calculele se execut simbolic (parametru actual este dat ca numr ntreg) i evaluarea n virgul mobil se face doar asupra rezultatului, aproxima ia ob inut este -0.9880298724 pentru care 4 zecimale (5 cu rotunjire) coincid cu cea furnizat de func ia predefinit sin. ns n situa ia n care parametru actual este n virgul mobil i ca urmare calculele se execut n virgul mobil aproxima ia furnizat este -13.41937809 !!! Acest rezultat se datoreaz fenomenului de reducere (catastrophic cancellation). Urmtoarea procedur MAPLE evalueaz valoarea unui polinom ntr-un punct. Parametru p reprezint lista coeficien ilor polinomului (p[i] este coeficientul lui xi) iar x punctul n care se face evaluarea.
> val:=proc(p,x) > local n,i,v; > n:=nops(p);v:=p[n]; 49
Mdlina Roxana Buneci > for i from n-1 by -1 to 1 do v:=x*v+p[i] > od; > RETURN(v) > end;
Astfel
> val([1,2,1], 2);
9 calculeaz valoarea polinomului 1 + 2X + X2 n X = 2. S considerm polinomul (X-1)8 = 1 8X + 28X2 56X3 + 70X4 56X5 + 28X6 - 8X7 + X8). Reprezentarea grafic a acestui polinom pe intervalul [ 9999 ,1] este: 10000
Dac parametrii procedurii val sunt ntregi sau ra ionali i calculele se execut simbolic cu excep ia evalurii n virgul mobil a rezultatului se ob in urmtoarele valori ale polinomului pentru xi =
0.1000000000 10 -31
50
Metode Numerice
0.4304672100 10 -32 0.1677721600 10 -32 0.5764801000 10 -33 0.1679616000 10 -33 0.3906250000 10 -34 0.6553600000 10 -35
0.6561000000 10 -36
0.2560000000 10 -37 0.1000000000 10 -39 0. Aceeai procedur apelat cu aceeai parametrii, cu singura excep ie c punctele n care se calculeaz valorile sunt reprezentate n virgul mobil d rezultatele:
> for i from 0 to 10 do evalf(val([1,-8,28,-56,70,-56,28,-8,1],
0.9999+i/100000)) od;
0.
-0.1 10 -8
0.84 10 -8 -0.14 10 -7
-0.8 10 -8
-0.2 10 -8 -0.8 10 -8
-0.14 10 -7
0.84 10 -8 -0.1 10 -8 0. Erorile mari se datoreaz execu iei calculelor n aritmetica virgulei mobile. i mai sugestiv este graficul de mai jos:
> plot(val([1,-8,28,-56,70,-56,28,-8,1], x), x = 0.9999..1.);
51
52
Metode Numerice
2. irul (xn)n din V este ir Cauchy (fundamental) dac i numai dac pentru orice
53
4. Func iile (x, y) x + y [: V V V] i (, x) x [: K V V] sunt continue (V V i K V sunt nzestrate cu topologia produs). O norm se numete complet dac metrica asociat ei este complet (i.e. dac orice ir Cauchy este convergent). Un spa iu normat se numete spa iu Banach dac norma cu care este nzestrat este complet. Normele p1 i p2 definite pe spa iul vectorial V se numesc echivalente dac topologiile asociate (n mod canonic) lor coincid. Pentru a desemna faptul c p1 i p2 sunt echivalente vom folosi nota ia p1 ~ p2. Se poate arta c normele p1 i p2 sunt echivalente dac i numai dac exist M, m >0 astfel nct m p1(x) p2(x) M p1(x) pentru orice x V. V se numete K algebr normat dac V este K algebr i n plus este nzestrat cu o norm |||| ce satisface urmtoarele dou propriet i: 1. (V, ||||) este spa iu normat 2. ||xy|| ||x|| ||y|| pentru orice x, y V, O algebr normat nzestrat cu o norm complet se numete algebr Banach. Fie V i W dou spa ii vectoriale peste corpul K (K=R sau K=C). O aplica ie f : V W se numete liniar dac i numai dac f(x + y) = f(x) +
5. sup ||f(x)||< .
x =1
Vom nota cu L(V, W) spa iul aplica iilor liniare i continue f : V W. Pentru orice f L(V, W), avem
sup ||f(x)|| = sup ||f(x)||= inf {M > 0 : || f(x) || M||x || pentru orice xV }.
x 1 x =1
54
Metode Numerice
Dac pentru orice f L(V, W), definim || f || = sup ||f(x)||, atunci (L(V, W), ||||)
x 1
devine un spa iu normat. Spa iul L(V, W) este denumit spa iul operatorilor liniari
i mrgini i defini i pe V cu valori n W, iar elementele din L(V, W) se mai numesc operatori liniari mrgini i. Spa iul operatorilor liniari i mrgini i L(V, W) este
spa iu Banach dac i numai dac W este spa iu Banach. Dac V este un spa iu normat iar pe spa iul L(V, V) introducem drept lege de "nmul ire" compunerea operatorilor, atunci L(V, V) devine o algebr normat. Dac V este un spa iu normat peste corpul K, atunci spa iul normat L(V, K) se numete dualul lui V i se noteaz V'. Fie H un spa iu vectorial peste corpul K (K=R sau K=C). Se numete
x , x pentru
orice x din H. Un spa iu pre-Hilbert este un spa iu normat n care norma provine dintr-un produs scalar, iar un spa iu Hilbert este un spa iu prehilbert complet (cu norm complet). Dac H un spa iu prehilbert, atunci: 1. Dou elemente x i y din H se numesc ortogonale dac <x, y> =0. 2. Pentru A H i xH, x se spune ortogonal pe A i se noteaz xA, dac
<x,y>=0 pentru orice yA.
3. O familie (xi)i de elemente ale lui H se numete sistem ortogonal sau familie ortogonal dac <xi, xj> =0 pentru orice i j. 4. Un sistem ortogonal (xi)i se numete ortonormal dac ||xi|| = 1 pentru orice i. 5. Se numete baz ortonormal a spa iului Hilbert H un sistem ortonormal maximal (n raport cu rela ia de incluziune).
55
Dac H este un spa iu Hilbert i (xi)i este un sistem ortonormal, atunci urmtoarele afirma ii sunt echivalente: 1. (xi)i baz ortonormal 2. Dac xH i xxi pentru orice i, atunci x = 0. 3. Dac xH, atunci x =
x, x i x i .
x, x i x i , y .
2
x, x i
Orice dou baze ortonormale ale unui spa iu Hilbert au acelai cardinal.
Orice operator liniar i mrginit admite un unic adjunct. Dac H este un spa iu Hilbert i AL(H, H), atunci 1. A se numete autoadjunct (sau hermitian) dac A = A*. 2. A se numete unitar dac AA* = A*A =I. 3. A se numete pozitiv dac A este autodjunct i <A(x), x> 0 pentru orice x H. Considerm spa iul vectorial V = Kn(K=R sau K=C), nN*. Pe acest spa iu Banach orice dou norme sunt echivalente. Vom nota cu ||||, ||||1, ||||2 urmtoarele norme uzuale pe Kn:
56
Metode Numerice
||x||1 =
xj
j=1
2
n ||x||2 = x j j=1
1/ 2
pentru orice x = (x1, x2, , xn) Kn. Norma ||||2 se numete norm euclidian i provine din produsul scalar canonic
<x, y> =
xjyj
j=1
x j y j ).
j=1
Vom nota cu Mm,n(K) mul imea matricelor cu m linii i n coloane. Mm,n(K) are o structur de spa iu vectorial relativ la opera iile: adunare: A = (aij)i,j,B=(bij)i,j,C=(cij)i,j Mm,n(K), C = A+B dac i numai dac cij = aij + bij pentru orice 1im i 1jn. nmul ire cu scalari: A = (aij)i,j, C=(cij)i,j Mm,n(K), K. C = A dac i numai dac cij = aij pentru orice 1im i 1jn. Produsul AB a dou matrice A = (aij)i,j Mm,n(K) i B=(bij)i,j Mn,p(K) este o matrice C=(cij)i,j Mm,p(K) pentru care cij =
Transpusa unei matrice A=(aij)i,j, este o matrice notat At = ( a it, j )i,j, ale crei
elemente sunt: a it, j = aj,i pentru orice 1in, 1jm.
Conjugata unei matrice A=(aij)i,j, este o matrice notat A* = ( a *, j )i,j, ale crei i
elemente sunt: a *, j = a j,i pentru orice 1in, 1jm. Conjugata este caracterizat i prin :
<Ax, y> = <x, A*y> pentru orice xKn i orice yKm.
O matrice pentru care m=n se numete ptratic. Elementul neutru la nmul ire n Mn,n(K) este matricea unitate In:
57
1 0 0
0 1 0
0 0 0
0 0 1
O matrice A Mn,n(K) este inversabil dac exist B Mn,n(K) astfel nct AB=BA=In. Inversa unei matrice A se noteaz A-1. Matricea A este inversabil dac
superior triunghiular dac ai,j = 0 pentru orice i > j. inferior triunghiular dac ai,j = 0 pentru orice i < j. superior Hessenberg dac ai,j = 0 pentru orice i > j+1. inferior Hessenberg dac ai,j = 0 pentru orice i < j-1.
O matrice A Mm,n(K) poate fi tratat ca un vector din Knm: (a11, a12,, a1n, a21, a22, , a2n,, am1, am2, , amn). Datorit acestui fapt norma unei matrice poate fi introdus n mod similar cu norma unui vector din Knm. Pe de alt parte, se tie c exist un izomorfism de spa ii
58
Metode Numerice
liniare ntre Mm,n(K) i L(Kn, Km). Fiecrei matrice A = (ai,j)i,j i se asociaz operatorul liniar S(A) definit prin S(A)(x) = Ax = ( a ij x j )1im pentru orice x = (x1, x2, , xn)tKn.
j=1 n
n cele ce urmeaz vom identifica A cu S(A). Cele mai des utilizate norme de matrice sunt normele operatoriale: astfel pentru o matrice A Mm,n(K), dac pe Km se consider norma ||||, iar pe Kn se consider norma ||||, atunci se noteaz cu
||A|| norma de aplica ie liniar:
n cazul n care = se utilizeaz nota ia ||A|| = ||A|| i se spune c ||A|| este norma operatorial a lui A subordonat normei vectoriale ||||. Fie A Mn,n(C). Scalarul din C se numete valoare proprie pentru A dac exist vectorul nenul x Cn astfel nct: Ax= x Vectorul x se numete vector propriu asociat valorii proprii . Mul imea valorilor proprii ale lui A formeaz spectrul lui A i se noteaz cu (A). Raza spectral a lui A se definete prin:
(A) = max
( A )
Normele operatoriale pentru o matrice A Mn,n(C) subordonat normelor vectoriale ||||, ||||1, ||||2 sunt respectiv:
||A|| = ||A||1 = ||A||2 =
Pentru orice matrice A Mn,n(C) i orice norma operatorial ||A|| subordonat unei normei vectoriale avem (A) ||A||. Dei norma ||A||2 este important din punct de vedere teoretic (corespunde distan ei euclidiene), n general, n aplica iile numerice
59
vectorial:
||A||F =
i , j=1
a ij
numai dac (A) < 1. Fie <, > produsul scalar canonic pe Kn (K = R sau C). O matrice A Mn,n(K), K = R (respectiv, K = C) se numete
a12 a1k
60
Metode Numerice
O matrice A Mn,n(R) este pozitiv definit dac i numai dac este simetric i minorii principali k (k{1,2,n}) sunt to i pozitivi.
O matrice A Mn,n(R) este negativ definit dac i numai daceste simetric i minorii principali k (k{1,2,n}) respect urmtoarea alternan a semnelor:
Metodele directe presupun ob inerea solu iilor exacte a sistemelor liniare dup
un numr finit de opera ii elementare. O metod direct este cu att mai bun cu ct numrul de opera ii elementare (adunare, nmul ire, mpr ire i rdcin ptrat) necesare este mai mic (numrul de opera ii executate influen eaz att timpul de execu ie ct i eroarea de rotunjire). Considerm sistemul cu n ecua ii i n necunoscute. Ax = b, AMn,n(R) nesingular. Deoarece A este nesingular sistemul admite solu ie unic, ce poate fi determinat cu regula lui Cramer: xi =
nepractic (pentru n mare). ntr-adevr, aplicarea ei conduce la calculul a n+1 determinan i de ordinul n. Dar calculul unui determinat de ordinul n pentru o matrice C = (cij)1i,jn, innd cont de defini ie: det(C) =
( 1) (
Sn
c1(1)c 2( 2 ) ...c n( n )
revine la a calcula o sum de n! termeni (grupul Sn al permutrilor de ordinul n con ine n! elemente), fiecare termen fiind produsul a n factori. Deci pentru a aplica regula lui Cramer trebuie efectuate cel pu in Nop(n) = (n+1) n!n =(n+1)!n opera ii.
61
nn
se utilizeaz un sistem de calcul ce execut 109 opera ii pe secund, atunci pentru rezolvarea unui sistem cu n ecua ii i n necunoscute timpii de execu ie sunt prezenta i n tabelul de mai jos n n=5 n=10 n = 15 n = 20 n = 25 n= 30 Timp de execu ie 0.5782433079 10-6 s 0.04765190154 s 31138.61350 s = 8.649614862 ore
Metodele directe urmresc transformarea sistemului de rezolvat ntr-un sistem echivalent a crui matrice este inferior triunghiular sau superior triunghiular, sistem ce se rezolv foarte uor. Prezentm n continuare algoritmul lui Gauss de transformarea matricei A ntr-o matrice superior triunghiular.
prima linie este folosit pentru anularea coeficien ilor de pe prima coloan din celelalte n-1 linii. a doua linie este utilizat pentru anularea coeficien ilor de pe a doua coloan din ultimele n-2 linii, .a.m.d.
Trecerea de la un pas la altul se face aplicnd regula dreptunghiului (pivotului). Pentru a ob ine stabilitatea numeric a algoritmului, se alege drept
62
Metode Numerice
pivot de la pasul k elementul maxim n modul din coloana k subdiagonal a lui A, i se permut linia k cu linia pe care se gsete pivotul. Aceast strategie de permutare se numete pivotare par ial. Performan e de stabilitate numeric relativ mai bune se ob in dac se alege drept pivotul la pasul k elementul maxim n modul din submatricea delimitat de ultimele n-k linii, i se permut coloana k cu coloana pivotului i linia k cu linia pivotului. Aceast strategie de pivotare se numete
A(nmin),
unde A(nmin) are form superior triunghiular, iar A(0) =A. Pentru a se trece de la
de pe coloana k cu proprietatea
Se permut liniile i cu k;
63
k
(k)
j
(k) (k)
k i
a k,k
a i,k
(k)
a k, j a i, j
a i,j a k,k a k,j a i,k k +1 a( j ) = , k+1 i n, k+1 j m. i, (k) a k,k n urma aplicrii acestui algoritm se ajunge la urmtoarea matrice superior triunghiular: 1 A(nmin)
=
( ) ( ) ( ) () ( ) a112 a113 a11n a11n +1 a11m , , , , ,
(k) (k)
(k) (k)
0 (dac m n). 0
) ) 0 1 a (nn,n +1 a (nn,m
Exemplu
Prin aplicarea procedurii de eliminare gaussian cu pivotare par ial asupra matricei A de mai jos ob inem: 1 A= 2 1 1 0 0 1/2 3/2 -7/2 2 1 -3 1/2 -1/2 3/2 0 1 2 L2 L3 1 0 1/2 3/2 L1 L2 2 1 1 1/2 3/2 -1/2 1 2 -3 1 0 2
0 -7/2
64
Metode Numerice
1/2 1 0
1/2 1 0
1/2 -3/7 1
0 0
0 0
Urmtoarea procedur MAPLE are drept parametru o matrice A, i ntoarce matricea superior triunghiular ob inut prin aplicarea algoritmului de eliminare Gauss cu pivotare par ial asupra matricei A. Matricea a (locala procedurii) se ini ializeaz cu A, i fiecare din matricele intermediare A(k) sunt afiate.
> elimpp:=proc(A) > local a,n,m,nmin,i,j,k,aux; > m:=rowdim(A);n:=coldim(A); > if n<=m then nmin:=n else nmin:=m fi; > a:=matrix(m,n); > for i to m do for j to n do a[i,j]:=A[i,j] od od;
> for k to nmin do print(a); > i:=k;aux:=abs(a[k,k]); > for j from k+1 to m do > if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od; > if i>k then for j from k to n do > aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od; print(a) fi; > if a[k,k]<>0 then > for j from k+1 to n do a[k,j]:=a[k,j]/a[k,k] od; > a[k,k]:=1; > for i from k+1 to m do > for j from k+1 to n do a[i,j]:=a[i,j]-a[k,j]*a[i,k] od od; > for j from k+1 to m do a[j,k]:=0 od > fi od; > RETURN(evalm(a)) > end;
65
1 2 A := 1
> elimpp(A);
2 1 -3
2 1 -3 1 2 -3 0 1 2 1 0 2
0 1 2
1 2 1 2 1 1
1 0 0 1 0 0 1 0 0
1 2 3 2 -7 2 1 2 -7 2 3 2 1 2 1 0
1 2 -1 2 3 2 1 2 3 2 -1 2 1 2 -3 7 1 7
1 0 0
1 2 1 0
1 2 -3 7 1 2 5 0
> A1:=matrix(3,2,[3,2,-1,5,2,0]);
3 A1 := -1 2
> elimpp(A1);
66
Metode Numerice
3 -1 2 1 0 0
1 0 0
> A2:=matrix(2,3,[1,-1,2,3,4,-2]);
2 5 0 2 3 17 3 -4 3
2 3 1 0
1 A2 := 3
> elimpp(A2);
-1 4
2 -2
2 -2
1 3 3 1
-1 4
4 -1
-2 2
1 0
1 0
4 3 -7 3
4 3 1
-2 3 8 3
-2 3 -8 7
67
Pentru rezolvarea acestui sistem vom aplica algoritmul de eliminare Gauss cu pivotarea par ial asupra matricei extinse A = (A | b ) . Vom nota elementele matricei A tot cu ai,j . Astfel ai,n+1= bi pentru orice i=1,2,..n. La primul pas algoritmul presupune eliminarea necunoscutei x1 din ultimele n-1 ecua ii. La al doilea pas se elimin necunoscuta x2 din ultimele n-2 ecua ii,
.a.m.d. n cazul acestui algoritm pentru fiecare k se efectueaz n+1-k + (n+1-k)(nk) = (n+1-k)2 opera ii elementare (prin opera ie elementar n elegnd aici o opera ie n virgul mobil de forma ax + b, sau o mpr ire) . Deci algoritmul necesit
n 1
Nop(n) =
2 ( n + 1 k ) = j2 =
k =1
j= 2
n ( n + 1)( 2n + 1) -1 6
) x2 + a (22,3 x3+
) ) a (22n xn = a (22,n +1 ,
) xn = a (nn,n +1
Rezolvarea acestui sistem se poate face foarte uor de la sfrit spre nceput:
) xn = a (nn,n +1
) x i = a i(i,n +1
a i(,i )j x j
j=i +1
Procedura rezsist de mai jos ntoarce solu ia unui sistem liniar cu n ecua ii i n necunoscute. Parametri procedurii sunt matricea sistemului i vectorul termenilor liberi
> with(linalg): > rezlin:=proc(A,b) > local a,x,n,i,j,k,aux;
68
Metode Numerice > n:=rowdim(A); > a:=matrix(n,n+1); > for i to n do > for j to n do a[i,j]:=A[i,j] od; > a[i,n+1]:=b[i] od; > for k to n do i:=k;aux:=abs(a[k,k]); > for j from k+1 to n do > if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od; > if i>k then for j from k to n+1 do > aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od fi; > if a[k,k]=0 then print(`matrice singulara`);RETURN(NULL) fi; > for j from k+1 to n+1 do a[k,j]:=a[k,j]/a[k,k] od; > for i from k+1 to n do > for j from k+1 to n+1 do a[i,j]:=a[i,j]-a[k,j]*a[i,k] > od od; > od; > x:=vector(n);x[n]:=a[n,n+1]; > for i from n-1 by -1 to 1 do x[i]:=a[i,n+1]; > for j from i+1 to n do x[i]:=x[i]-a[i,j]*x[j] od od; > RETURN(evalm(x)) > end;
x2 + 3x3 = 1
> a1:=matrix(3,3,[1,1,1,1,-1,2,-1,-1,3]);
1 a1 := 1 -1
> b1:=vector(3,[3,2,1]);
1 -1 -1
1 2 3
b1 := [ 3, 2, 1 ]
> rezlin(a1,b1);
[ 1, 1 , 1 ]
> linsolve(a1,b1);
[ 1, 1 , 1 ]
69
trebuie avut n vedere faptul c prin permutarea a dou linii semnul determinantului se schimb. Procedura determinant de mai jos are drept parametru matricea i ntoarce determinantul. Pentru transformarea matricei A ntr-o matrice superior triunghiular se folosete algoritmul de eliminare Gauss cu pivotare par ial.
>determinant:=proc(A) >local a,n,i,j,k,d,aux; >n:=rowdim(A); >a:=matrix(n,n); >for i to n do >for j to n do a[i,j]:=A[i,j] od od; >d:=1; >for k to n do i:=k;aux:=abs(a[k,k]); >for j from k+1 to n do >if abs(a[j,k])>aux then aux:=abs(a[j,k]);i:=j fi od; >if i>k then d:=-d; for j from k to n do >aux:=a[k,j];a[k,j]:=a[i,j];a[i,j]:=aux od fi; >if a[k,k]=0 then d:=0;RETURN(d) fi; d:=d*a[k,k]; >for j from k+1 to n do a[k,j]:=a[k,j]/a[k,k] od; >for i from k+1 to n do >for j from k+1 to n do a[i,j]:=a[i,j]-a[k,j]*a[i,k] od od; >od; >RETURN(d) >end;
70
Metode Numerice
1 a2 := 1 12
> determinant(a2);
1 8 1
1 3 2
-48
> det(a2);
-48 Comanda det(A) din pachetul linalg calculeaz determinantul matricei indicate drept parametru.
1 In= 0 0 0
0 1 0
---------------------------------------
Se tie c A este inversabil dac i numai dac are determinantul nenul. Notm: ek = (0,,0,1,00)t vectorul k al bazei canonice din Rn. Pentru fiecare k (k=1,2,,n) considerm sistemul Ax=ek. Solu ia acestui sistem reprezint chiar coloana k a matricei A-1. Astfel pentru aflarea lui A-1 este necesar s rezolvm n sisteme de ecua ii liniare Ax=ek, k=1,2,,n. Aceste sisteme pot fi rezolvate utiliznd algoritmul de eliminare al lui Gauss. Pentru a micora volumul de calcul vom aplica algoritmul asupra matricei ob inute prin concatenarea la matricea A a coloanelor bazei canonice din Rn. Coeficien ii matricei
A = (A|e1|e2|------|en)
sunt
71
ik=
0,
ik.
Prin aplicarea algoritmului de eliminare Gauss cu pivotare par ial asupra lui A se ob ine un ir de matrice A(0) A(1)
----
A(n),
unde A(0)= A, iar A(n) are urmtoarea form superior triunghiular: 1 A(n)= 0
( ) ( ) ( ) () ( ) a112 a113 a11n a11n +1 a112 n , , , , ,
0 0
) ) 0 1 a (nn,n +1 a (nn,2n
j= i +1
Procedura inversa de mai jos ntoarce inversa matricei indicat drept parametru.
> inversa := proc(A) > local n,a, b, i, j, k,aux; > n:=rowdim(A); > b := matrix(n, n); a := matrix(n, 2*n); > for i to n do for j to n do a[i, j] := A[i, j] od od; > for i to n do for j to n do a[i, j + n] := 0 od od; > for i to n do a[i, i + n] := 1 od;
72
Metode Numerice > for k to n do > aux := abs(a[k, k]);i := k; > for j from k + 1 to n do > if aux < abs(a[j, k]) then aux := abs(a[j, k]); i := j fi > od; > for j from k to 2*n do > aux := a[k, j]; a[k, j] := a[i, j]; a[i, j] := aux od; > if a[k, k] = 0 then print(`Matrice singulara`); > RETURN(NULL) fi;
> for j from k + 1 to 2*n do a[k, j] := a[k, j]/a[k, k] od; > for i from k + 1 to n do > for j from k + 1 to 2*n do > a[i, j] := a[i, j] - a[k, j]*a[i, k] od od; > od; > for i to n do b[n, i] := a[n, i + n] od; > for k to n do > for i from n - 1 by -1 to 1 do > b[i, k] := a[i, n + k]; > for j from i + 1 to n do > b[i, k] := b[i, k] - a[i, j]*b[j, k] od > od > od; > RETURN(evalm(b)) > end;
1 2
2 1
3 2
1 a3 := 1 2
> inversa(a3);
1 2 1
1 3 2
73
1 2 2 -3 2
-1 2 0 1 2
1 2 -1 1 2
Comanda inverse din pachetul linalg calculeaz de asemenea inversa unei matrice. n exemplul urmtor presupunem c o aplicm asupra aceleai matrice a3.
> inverse(a3);
1 2 2 -3 2
-1 2 0 1 2
1 2 -1 1 2
74
Metode Numerice
1
Calcul valorii exacte a factorului de condi ionare al unei matrice A presupune calculul ||A-1||. Cum numrul de opera ii necesare pentru calculul normei inversei lui A (||A-1||) este mai mare dect cel pentru rezolvarea unui sistem liniar Ax = b, de obicei n practic se folosete un estimator pentru ||A-1||. Determinarea unei estima ii pentru ||A-1|| pleac de la observa ia c, dac Ax = y, atunci
x ||A-1||, y
i mrginea superioar a mul imii
x , Ax = y y este ||A-1|| i se atinge pentru o anumit valoare y. Comanda MAPLE cond(A) din pachetul linalg calculeaz factorul de condi ionare matricei A. Considerm sistemul Ax = b, cu A nesingular
(A+E) x = Ax*
E x = A(x*- x ). A-1E x =x*- x Atunci
75
x x* E cond(A) . x A
Deci factor de condi ionare mic i varia ii relative mici ale coeficien ilor matricei implic varia ii relative mici ale solu iei. Dac factorul de condi ionare cond(A) este mare, atunci rezolvarea sistemului Ax = b este o problem ru condi ionat. S presupunem acum c n locul vectorului termenilor liberi b este dat vectorul b i ca urmare se rezolv sistemul A x = b, a crui solu ie o notm cu x . Atunci
Ax * ||x*- x || = || A-1(b- b )|| || A-1|| || (b- b )|| =|| A-1|| || (b- b )|| b
|| A ||
de unde
-1
bb b
||A|| ||x*||,
bb x x* cond(A) . x* b
Deci factor de condi ionare mic i varia ii relative mici ale termenilor liberi implic varia ii relative mici ale solu iei. Dac gradul de acurate e a datelor de intrare este compatibil cu precizia mainii mach, atunci
x x* cond(A)mach. x*
76
Metode Numerice
n urma calculului solu iei sistemului Ax = b se pot pierde pn la log10(cond(A)) cifre zecimale semnificative relativ la acurate ea datelor de intrare.
Exemplu
Considerm sistemul Ax = b, unde A= 888.445 887.112 887.112 885.781
i
b= 1 0 Considerm urmtoarele comenzi MAPLE:
> with(linalg): > A:=matrix(2,2,[888.445,887.112,887.112,885.781]);
888.445 A := 887.112
885781/1000]);
887.112 885.781
> A1:=matrix(2,2,[888445/1000,887112/1000,887112/1000,
3152602660249
77
b := [ 1, 0 ]
> Digits:=6;
Digits := 6
> linsolve(A,b);
[ -499.248 , 500.000 ]
> Digits:=15;
Digits := 15
> linsolve(A,b);
[ 0.887555222890557 10 9, -0.888888888888889 10 9 ]
> Digits:=10;
Digits := 10
> linsolve(A,b);
[ 0.2496249066 10 7, -0.2500000000 10 7 ]
> linsolve(A1,b);
[ 885781000, -887112000 ] Dei matricele A i A1 sunt egale - diferen a este dat doar de reprezentarea coeficien ilor: simbolic (ca numere ra ionale) n cazul lui A1 i n virgul mobil n cazul lui A comenzile linsolve(A,b) i linsolve(A1,b) ntorc rezultate diferite. Solu ia corect a sistemului este cea ob inut n varianta n care s-a lucrat simbolic: x1 x2 = = 885781000 -887112000
Rezultatul eronat furnizat de comanda linsolve(A,b) se datoreaz relei condi ionri a matricei A. Se observ c factorul de condi ionare este:
0.315260266024900 10 13
r = b - A x = Ax* - A x = A(x*- x )
78
Metode Numerice
A-1r = x* - x
1 ||r|| = || A ||
|| x* || ||r||. || b ||
x * x r cond(A) x* b Ca urmare factor de condi ionare mic (problem bine condi ionat) i reziduu mic implic varia ii relative mici ale solu iei.
Exemplu
Considerm sistemul Ax = b, unde A= 1 1 1.001 1
i
b = 2.001 2 Evident solu ia corect a sistemului este x1 x2 y1 y2 se observ c b - Ay = 0.001 0 = = = 1 1 2 0
79
Deci y aparent verific sistemul, dei este diferit de x. Aceasta se datoreaz valorii factorului de condi ionare al lui A pe care-l putem determina folosind urmtoarele comenzi MAPLE:
> with(linalg): > A:=matrix(2,2,[1,1.001,1,1]);
1 A := 1
> cond(A);
1.001 1
4004.001000 Artm n continuare c dac reziduu este mare atunci varia ia relativ a
E x = b -A x Ex= r
de unde ||r|| = ||E x || ||E|| || x ||,
i ca urmare
|| E || || r || . || || A || || A |||| x n consecin dac a reziduu este mare atunci varia ia relativ a coeficien ilor matricei de intrare A este mare. Deci dac algoritmul de rezolvare a sistemului este stabil atunci reziduul relativ este mic indiferent dac problema este bine condi ionat sau nu.
Metode Numerice
determinat pe parcursul calculului n func ie de precizia impus astfel nct termenul xm s constituie o aproxima ie satisfctoare a solu iei cutate. Se consider sistemul liniar Ax = b, AMn,n(R) nesingular
Nxk+1 = P xk + b, k 0.
Notm ek = x* xk eroarea absolut cu care xk aproximeaz x*, solu ia exact a sistemului Ax = b.
(N-1P) < 1 ((N-1P) reprezint raza spectral a lui N-1P, i.e. maximum modulelor
valorilor proprii ale lui N-1P). Demonstra ie. Notm G = N-1P. Atunci ek+1 = x* xk+1 = x* - N-1(P xk + b) = x* - N-1P xk - N-1 b = x* - N-1P xk - N-1 Ax* = x* - N-1P xk - N-1 (N-P) x* = x* - N-1P xk - x* + N-1 P x* = N-1 P (x* - xk) = Gek. Ca urmare ek+1 = G ek = G G ek-1 = ...= Gk+1e0, pentru orice k 0. n consecin ,
k
lim x k = x* pentru orice termen ini ial x0 dac i numai dac lim G k e0 =0 pentru
k
81
orice e0, sau echivalent lim G k =0. Este cunoscut c lim G k =0 dac i numai
k k
Din demonstra ia teoremei anterioare a rezultat c dac G= N-1P i ek = x* xk, atunci ek = Gek-1 = Gke0 pentru orice k 0. N se alege astfel nct sistemul Nxk+1 = P xk + b, k 0. a crui solu ie este xk+1 s se rezolve uor de exemplu se alene N diagonal sau triunghiular n cazul metodelor concrete descrise n continuare se consider
.. 0 0 an,n 0 0
0 0 0 0
a2,1 0
82
Metode Numerice
N = D, P = - (L+R)
1 0 a11 N-1 = 0 1
0 0
0 0 0 a 22 .. 0 0 0 0 1 a nn
1 0 a11 N P=
-1
0 0 1
a 22 .. 0 0 0 0
0 0
1 a nn
a i, j a i ,i
, i j.
(G) < 1. Deoarece (G) ||G||, pentru orice norm operatorial |||| a lui G, avem
83
(G) min( G 1 , G
)<1.
G 1 = max{
g
i =1 n
i, j
,1 jn}
= max{
i =1 i j
a i, j a i ,i
, 1 jn}
Calculm G :
G
= max{ g i , j ,1 in}
j=1
= max{
j=1 j i
a i, j a i ,i
,1 in}.
Dac G 1 < 1 sau G <1, atunci (G) <1. Dar condi ia G <1 este echivalent cu
a
j=1 j i
a i, j
i ,i
caz n care spunem c A este diagonal dominant. Deci dac ai,i 0 pentru orice i = 1,2,, n, i dac A este diagonal dominant atunci irul ob inut prin metoda Jacobi converge la solu ia exact a sistemului Ax = b. Dac ek = x*- xk este eroarea absolut cu care xk aproximeaz x*, solu ia exact a sistemului Ax = b, atunci ek = Gke0 pentru orice k 0. n consecin , pentru orice norme compatibile
ek G k e0 G k e0 G
k
e0
84
Metode Numerice
x ik +1 =
Urmtoarea procedur Maple are drept parametri matricea sistemului, vectorul termenilor liberi, aproxima ia ini ial x0 a solu iei, i eroarea epsilon. Procedura ntoarce aproxima ia xk (dat de metoda Jacobi) a solu iei cu k=
> with(linalg): > mjacobi:=proc(a,b,x0,epsilon) > local n,n1,ni,x1,x2,k,i,j,p,suma; > n:=vectdim(x0); > ni:=0; > for i to n do > suma:=0; > for j to i-1 do > suma:=suma+abs(a[i,j]) od; > for j from i+1 to n do > suma:=suma+abs(a[i,j]) od; > if a[i,i]=0 then print(`Metoda nu se aplica`); > RETURN(NULL) fi;
ln (eps ) +1 . ln (n 1, )
85
Mdlina Roxana Buneci > suma:=suma/abs(a[i,i]); > if ni<suma then ni:=suma fi; > od; > n1:=0; > for j to n do > suma:=0; > for i to j-1 do suma:=suma+abs(a[i,j]/a[i,i]) od;
> for i from j+1 to n do suma:=suma+abs(a[i,j]/a[i,i]) od; > if > od; > if ni>n1 then ni:=n1 fi; > if ni>=1 then print (`Metoda nu se aplica`); RETURN fi; > k:=floor(ln(epsilon)/ln(ni))+1; > x1:=vector(n); x2:=vector(n); > for i to n do x1[i]:=x0[i] od; > for p to k do > for i to n do > x2[i]:=b[i]; > for j to i-1 do > x2[i]:=x2[i]-a[i,j]*x1[j] od; > for j from i+1 to n do > x2[i]:=x2[i]-a[i,j]*x1[j] od; > x2[i]:=x2[i]/a[i,i]; od; > for i to n do x1[i]:=x2[i] od > od; > RETURN(evalm(x2)) > end; n1<suma then n1:=suma fi;
5x2 + x3 = -2
-x1 + x2 + 8x3 = 14
> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);
3 a := 1 -1
1 5 1
1 1 8
86
b := [ 4, -2, 14 ]
> linsolve(a,b);
[ 1, -1, 2 ]
> x0:=vector(3,[0,0,0.1]);
x0 := [ 0, 0, 0.1 ]
> mjacobi (a,b,x0,0.001);
x1 := [ 0, 1, 2345 ]
> mjacobi (a,b,x1,10^(-3));
a1,1
0 0
0 0
0 0
k x1 +1
a2,1 a2,2 0
:..................................................
x k +1 2 x k +1 n
= Pxk + b
Deci
k x1 +1 =
1 1 n 1 n ((Pxk)1 + b1) = ( P1, jx k + b1) = ( P1, jx k + b1) = j j a1,1 a1,1 j=1 a1,1 j=2
87
x ik +1 =
= =
i1 n i1 1 1 ((Pxk)i + bi - a i, jx k +1 ) = ( Pi, jx k + bi - a i, jx k +1 ) j j j a i,i a i,i j=1 j=1 j=1 n i1 1 ( Pi, jx k + bi - a i,jx k +1 ) j j a i,i j=i +1 j=1 n i1 1 ( a i, jx k + bi - a i,jx k +1 ) j j a i,i j=i +1 j=1 n i1 1 ( bi - a i, jx k - a i, jx k +1 ) j j a i,i j=i +1 j=1
n consecin , irul (xk)k construit prin metoda Gauss-Seidel este: x0 dat pentru k0,
k x1 +1 =
x ik +1 =
Ca i n cazul metodei Jacobi dac A este diagonal dominant atunci irul ob inut prin metoda Gauss-Seidel converge la solu ia exact a sistemului Ax=b. De asemenea dac A este o matrice simetric i are elementele de pe diagonala principal pozitive, atunci metoda Gauss-Seidel converge dac i numai dac matricea A este pozitiv definit. Procedura Maple de mai jos are drept parametri, matricea sistemului presupus diagonal dominant, vectorul termenilor liberi, aproxima ia ini ial x0 a solu iei, i eroarea epsilon. Procedura ntoarce aproxima ia xk (dat de metoda Gauss Seidel) a solu iei cu
ln (epsilon ) +1 . k= ln N 1 P
88
Metode Numerice > with(linalg): > mgaussseidel := proc(a, b,x0, epsilon) > local n, ni, x1, k, i, j, p, suma; > n:=rowdim(a); > ni := 0; > for i to n do > suma := 0; > for j to i - 1 do suma := suma + abs(a[i, j])od; > for j from i + 1 to n do suma := suma + abs(a[i, j]) > od; > if a[i, i] = 0 then > print(`Metoda nu se aplica`); RETURN(NULL) fi; > suma := suma/abs(a[i, i]); > if ni < suma then ni := suma fi > od; > if 1 <= ni then > print(`Matricea nu este diagonal dominanta`); > RETURN (NULL) fi;
> k := floor(ln(epsilon)/ln(ni)) + 1; > x1 := vector(n); > for i to n do x1[i]:=x0[i] od; > for p to k do x1[1] := b[1]; > for j from 2 to n do > x1[1] := x1[1] - a[1, j]*x1[j] od; > x1[1] := x[1]/a[1, 1]; > for i from 2 to n do > x1[i] := b[i]; > for j from i + 1 to n do > x1[i] := x1[i] - a[i, j]*x1[j] od; > for j to i - 1 do x1[i] := x1[i] - a[i, j]*x1[j] od; > x1[i] := x1[i]/a[i, i] > od; > od; > RETURN(evalm(x1)) > end;
89
3 x1 + x2 + x1 +
x3 = 4
5x2 + x3 = -2
-x1 + x2 + 8x3 = 14
> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);
3 a := 1 -1
> linsolve(a,b);
1 5 1
1 1 8
[ 1, -1, 2 ]
> x0:=vector(3,[0,0,0.1]);
x0 := [ 0, 0, 0.1 ]
> mgaussseidel(a,b,x0,10^(-3));
x1 := [ 0, 1, 2345 ]
> mgaussseidel (a,b,x1,10^(-3));
[ 1.000000000 , -1.000000000 , 2.000000000 ] Metoda Gauss-Seidel care implic modificarea unei necunoscute la fiecare moment de timp este preferabil metodei Jacobi care implic modificarea tuturor necunoscutelor n acelai timp dac se dispune de un calculator serie obinuit. Metoda Jacobi este preferabil metodei Gauss Seidel c-se dispune de un calculator paralel.
90
Metode Numerice
Presupunem date a, bR, f: [a,b] R. Problema pe care o studiem este determinarea numerelor reale x[a,b] cu proprietatea c f(x) = 0. Numim un numr real x*[a,b] cu proprietatea c f(x*) = 0, solu ie (sau rdcin) a ecua iei f(x) = 0 sau zerou al func iei f pe intervalul [a,b]. Dac f : [a,b] R, este o func ie continu cu proprietatea c f(a)f(b) < 0. Atunci exist cel pu in o rdcin x* (a,b) a ecua iei f(x) = 0. Rdcina ecua iei f(x) = 0 nu este neaprat unic. Presupunem c f : [a,b] R este o func ie derivabil, x*(a,b) o rdcin a
ecua iei f(x) = 0 i x = x* + h o aproxima ie a lui x*. Aplicnd formula lui Taylor
rezult c f( x ) = f(x*) + f (x*)h + o(h), unde lim
i
x -x* 1 (f( x ) - f(x*)). (x*) f 1 . Dac > 0 i f (x)
91
| x - x*|
1 . f (x*)
(unde x* este o rdcin a ecua iei f(x) = 0). n general, | x -x*| i |f( x )| nu sunt simultan mici (| x -x*| este eroarea absolut cu care x aproximeaz x*, iar |f( x )|
indic reziduu corespunztor lui x ). Dac problema este bine condi ionat (
mic), atunci reziduu mic implic eroare absolut | x -x*| mic.
1 f (x*)
e k +1 ek
r
= C.
r = 1 i 0 < C<1, rata convergen ei se spune liniar r = 1 i C = 0 (sau r > 1), rata convergen ei se spune superliniar r = 2, rata convergen ei se spune ptratic
92
Metode Numerice
Fie f : [a,b] R, o func ie continu cu proprietatea c f(a)f(b) < 0. Atunci exist cel pu in o rdcin x* (a,b) a ecua iei f(x)=0. Pentru gsirea rdcinii se micoreaz la fiecare pas intervalul n care func ia i schimb semnul. Metoda bisec iei presupune njumt irea la fiecare pas a acestui interval. Astfel
a+b al intervalului (a,b). 2
se determin mijlocul c =
dac f(c)f(a)<0, atunci se continu algoritmul cu intervalul [a,c] dac f(c)f(b)<0, atunci se continu algoritmul cu intervalul [c,b] dac f(c) =0 s-a determinat o rdcin a ecua iei f(x) = 0.
Se construiete astfel un ir de intervale (In)n , In = [an, bn], cu lungimea lui In egal cu jumtate din lungimea lui In-1. Fiecare din aceste intervale con ine o solu ie a ecua iei f(x) = 0. Presupunem c se d o precizie >0. Considerm c cn mijlocul intervalului In este o aproxima ie satisfctoare a solu iei ecua iei f(x) = 0 dac lungimea lui In este mai mic dect . Dac notm Ln = |bn - an| lungimea intervalului In, avem Ln = numai dac
Algoritm
Date de intrare: f continu, a, b cu f(a)f(b)<0 (precizie) Date de ieire: c mijlocul intervalului In = [an, bn] cu | an-bn |< (c este o aproxima ie a unei rdcini x* (a,b) a ecua iei f(x) = 0 cu eroarea absolut |x*-c| <
). 2
93
ln ( b a ) nmax:= +1; ln ( 2 )
1 ). 2
Procedur MAPLE
> bisectie:=proc(f,A,B,epsilon) > local c,a,b,nmax,j; > a:=A; b:=B; > nmax:=floor(ln(abs(b-a)/epsilon)/ln(2))+1; > for j from 0 to nmax do > c:=(a+b)/2; > if f(c)=0 then a:=c;b:=c;else > if evalf(f(c)*f(a))<0 then b:=c else a:=c fi fi > od; > c:=(a+b)/2; > RETURN(c) > end;
Utilizm aceast procedur pentru determinarea rdcinilor reale ecua iei: x8 3x-3 = 0. Reprezentm grafic func ia x->x8 3x-3 pentru a localiza rdcinile.
> with(plots): > plot(x^8-3*x-3,x,color=black);
94
Metode Numerice
> plot(x^8-3*x-3,x=-5..5,color=black);
> plot(x^8-3*x-3,x=-2..2,color=black);
> plot(x^8-3*x-3,x=-1.5..1.5,color=black);
95
Se observ c ecua ia are dou rdcini reale. Una n intervalul (-1.5, -0.5) i alta n intervalul (1,1.5).
> f:=(x-> x^8-3*x-3);
f := x x 8 3 x 3
> bisectie(f,1,3/2,10^(-3));
5207 4096
> evalf(bisectie(f,1,3/2,10^(-3)));
1.271240234
> bisectie(f,1,1.5,10^(-3));
1.271240234
> bisectie(f,-1.5,0,10^(-3));
-0.8801879883
> fsolve(f(x),x);
-0.8800582880 , 1.271068437
> evalf(bisectie(f,1,3/2,10^(-10)));
1.271068437
> evalf(bisectie(f,1,-3/2,10^(-10)));
Fie f : [a,b] R, o func ie continu cu proprietatea c f(a)f(b) < 0. Rdcina ecua iei f(x)=0 se caut ca i n cazul metodei bisec iei prin micorarea la fiecare pas a intervalului n care func ia i schimb semnul. Metoda coardei presupune urmtoarele:
se determin punctul c n care coarda AB intersecteaz axa Ox, unde A(a,f(a)) i B(b,f(b)). dac f(c)f(a)<0, atunci se continu algoritmul cu intervalul [a,c] dac f(c)f(b)<0, atunci se continu algoritmul cu intervalul [c,b]
96
Metode Numerice
c1
c2
S determinm coordonatele punctului C de intersec ie a dreptei AB cu axa Ox, unde A(a,f(a)) i B(b,f(b)) . Ox: y = 0 AB:
xa y f (a ) = b a f (b ) f (a )
i
x0 = b, xn = xn-1 -
Dac m1 > 0, M1 > 0 sunt astfel nct m1 |f(x)| M1 i dac x* este unica solu ie a ecua iei f(x) = 0, atunci eroarea absolut cu care termenul xn aproximeaz x* satisface inegalit ile:
97
|x*-xn| |x*-xn|
f (x n ) m1 M 1 m1 x n x n 1 m1
Demonstra ie. Deoarece f (x) 0 pentru orice x [a, b], rezult c f este
fie strict pozitiv, fie strict negativ, deci f este strict monoton. innd cont i de faptul c f(a)f(b) < 0, rezult c ecua ia f(x) = 0 are o unic solu ie x*. Presupunem c f(a)f(a)< 0 i c f(a)< 0 (nlocuind eventual f cu f). Deoarece f(x) 0 pentru orice x [a, b] i f(a)>0, rezult c f este strict pozitiv. Din faptul c f este strict monoton i f(a) < 0 < f(b), rezult c f este strict pozitiv. Dac B este punctul de coordonate (b,f(b)) i Cn-1 punctul de coordonate (xn-1, f(xn-1)), atunci xn este abscisa punctului de intersec ie a coardei BCn-1 cu axa Ox. Ca urmare f(xn-1) < 0. Deoarece f este o func ie Rolle pe intervalul [xn-1, b], conform teoremei lui Lagrange exist dn-1 ( xn-1, b) astfel nct f(xn-1) f(b) = f (dn-1)(xn-1 b). Avem xn = xn-1 f ( x n 1 ) f (x n 1 ) (xn-1-b) = xn-1 > xn-1. f ( d n 1 ) f (x n 1 ) f (b )
Deci irul (xn)n este cresctor i mrginit (termenii irului apar in intervalului (a,x*)). Fie x limita irului (xn)n. Trecnd la limit n xn = xn-1 ob inem
f (x n 1 ) (xn-1-b) f (x n 1 ) f (b )
x= x -
f (x) ( x -b), f ( x ) f ( b)
de unde rezult f( x ) = 0. Deoarece x* este unica rdcin a ecua iei f(x) = 0 din intervalul (a, b) rezult c x* = x . Analog se arat c dac f(b)f(b)<0 irul definit prin x0 = b, xn = xn-1 este strict descresctor ctre x*.
f (x n 1 ) (xn-1-a) f (x n 1 ) f (a )
98
Metode Numerice
Conform teoremei lui Lagrange pentru orice x[a, b] exist dx ntre x i x* astfel nct f(x*) f(x) = (x* - x) f (dx). Ca urmare,
|x* - xn| =
f (x n ) m1
Conform teoremei lui Lagrange exist n(xn-1, x*) i n (xn-1, b) astfel nct: f(x*) f(xn-1) = (x* - xn-1) f (n) f(xn-1) f(b) = (xn-1 - b) f (n) innd cont de f(x*) - f(xn-1) = ob inem (x* - xn-1) f (n) = f (n) (xn xn-1) f ( x n 1 ) f ( b ) x n 1 b (xn xn-1).
i deci
(x* - xn) = (x* - xn-1) + (xn-1 - xn) =
=(
f (n ) - 1) (xn xn-1), f ( n )
99
de unde | x* - xn | =
i
x0 = b, xn = xn-1 f (x n 1 ) (xn-1-a), dac f(b)f(b)<0 f (x n 1 ) f (a )
x0 = a
x1
x2
1.1.
100
Metode Numerice
x0 = a
x1
x2
1.2.
i Cn-1(xn-1, f(xn-1)). Aadar avem subcazurile 2.1. f > 0 (f strict descresctoare) 2.2. f < 0 (f strict cresctoare) 2.3.
x2
x1
x0 = b
2.1.
101
x2
x1
x0 = b
2.2
Algoritm
Date de intrare:
(precizie)
Date de ieire:
xN aproxima ie a unicei rdcini x* (a,b) a ecua iei f(x) = 0, unde x0 = a, xn = xn-1 x0 = b, xn = xn-1 f (x n 1 ) (xn-1-b), dac f(a)f(a)<0 f (x n 1 ) f (b ) f (x n 1 ) (xn-1-a), dac f(b)f(b)<0 f (x n 1 ) f (a )
iar N este cel mai mic numr natural cu proprietatea c |xN xN-1| <
102
Metode Numerice
Procedur MAPLE
> mcoarda:= proc(f,a,b,epsilon) > local x1, x2; > if evalf(f(a)*(D@@2)(f)(a))<0 then > x1:=b; x2:=a; > while evalf(abs(x1-x2))>=epsilon do > x1:=x2; > x2:= x1-f(x1)*(x1-b)/(f(x1)-f(b)) > od; > else > x1:=a; x2:=b; > while evalf(abs(x1-x2))>=epsilon do > x1:=x2; > x2:= x1-f(x1)*(x1-a)/(f(x1)-f(a)) > od; > fi; > RETURN(x2) > end;
103
Aplicm aceast procedur pentru determinarea rdcinilor reale ale ecua iei: x8 3x-3 = 0. n sec iunea precedent rdcinile au fost localizate n intervalele (-1.5, -0.5) i (1,1.5).
> f:=(x-> x^8-3*x-3);
f := x x 8 3 x 3
> mcoarda(f,1,1.5,10^(-3));
1.270281421
> mcoarda(f,-1.5,0,10^(-3));
-0.8741520730
> fsolve(f(x),x);
-0.8800582880 , 1.271068437
> mcoarda(f,1,1.5,10^(-10));
1.271068437
> mcoarda(f,-1.5,0,10^(-10));
Metoda tangentei este utilizat pentru determinarea unei rdcini a ecua iei f(x) = 0. Presupunem c f este derivabil i c derivata nu se anuleaz. Rdcina ecua iei este determinat ca limita unui ir. Se pleac de la un punct x0 dat. Presupunnd c s-a construit termenul xn-1, termenul xn se determin ca fiind abscisa intersec iei dintre tangenta la graficul func iei n xn-1 i axa Ox.
xn
xn-1
104
Metode Numerice
Ecua ia tangentei n xn-1 este: y f(xn-1) = f (xn-1)(x xn-1) Deci intersec ia cu axa Ox se afl rezolvnd sistemul
xn = xn-1 -
Convergen a irului este determinat de termenul ini ial x0. Urmtoarea teorem stabilete condi ii suficiente pentru convergen a metodei tangentei.
unde x0 [a, b] este ales astfel nct f(x0)f(x0) > 0. n plus, oricare ar fi n 1 eroarea absolut cu care termenul xn aproximeaz x* verific urmtoarele inegalit i: |x* - xn| |x* - xn| unde m1 = inf
f (x n ) m1
M2 (x n x n 1 )2 2 m1
x[a,b]
f ( x ) i M2 = sup f ( x ) .
x[a,b]
105
strict negativ, deci f este strict monoton. innd cont i de faptul c f(a) < 0 i f(b)
( x * x n ) f( ) x * x n f (xn) + n 1! 2!
f ( xn ) > xn + x* - xn = x*. f ( xn )
Ca urmare xn > x* pentru orice n 0. Deoarece f este strict cresctoare, f(xn) > f(x*) = 0,
i n consecin ,
xn+1 = xn f (xn ) < xn pentru orice n 0. f ( xn )
Aadar irul (xn)n este strict descresctor i mrginit inferior, deci este convergent. Fie x limita irului (xn)n. Avem x0 > x x*. Trecnd la limit n xn = xn-1 ob inem x= x f (x) , f (x)
f ( x n 1 ) f ( x n 1 )
de unde rezult f( x ) = 0. Deoarece x* este unica rdcin a ecua iei f(x) = 0 din intervalul [a, b] rezult c x* = x . Similar se trateaz cazul f < 0.
106
Metode Numerice
Conform teoremei lui Lagrange pentru orice x[a,b] exist dx ntre x i x* astfel nct f(x*) f(x) = (x* - x) f (dx). Ca urmare,
|x* - xn| =
f (x n ) m1
Aplicnd formula lui Taylor rezult c exist n ntre xn i xn-1 astfel nct
f ( x n 1 ) sau echivalent f ( x n 1 ) f ( x n 1 ) , f ( x n 1 )
xn - xn-1 = ob inem
( x n x n 1 )2 f( ).
2!
n
|x* - xn|
f (x n ) m1
f ( x n 1 ) ,n1 f ( x n 1 )
unde x0 [a, b] este ales astfel nct f(x0)f(x0) > 0. Din teorema anterioar rezult c (xn)n converge la x* unica solu ie a ecua iei f(x) = 0. Aplicnd formula lui Taylor rezult c exist n ntre xn i x* astfel nct
107
f ( n ) 1 (x*-xn)2, (xn ) 2 f
| f ( x *) | M 2 = 2 | f ( x *) | 2m1 n | x * x n |2
lim | x * x n +1 | unde m1 = inf
x[a,b]
f ( x ) i M2 = sup f ( x ) .
x[a,b]
unde x0 [a, b] este ales astfel nct f(x0)f(x0) > 0. Atunci irul (xn)n converge la x* unica solu ie a ecua iei f(x) = 0. Pentru orice n 1, xn reprezint abscisa punctului de intersec ie a axei Ox cu tangenta la graficul lui f n punctul de coordonate (xn-1, f(xn-1)). Deoarece f i f nu se anuleaz pe [a, b], rezult c sunt fie strict pozitive fie strict negative. Aadar avem
Cazul 1. f > 0 (f strict convex) 1.1. f > 0 (f strict cresctoare) 1.2. f < 0 (f strict descresctoare)
108
Metode Numerice
x2
x1
x0
1.1.
f > 0, f > 0
x0
x1
x2
1.2.
f < 0, f > 0
Cazul 2. f < 0 (f strict concav) 2.1. f > 0 (f strict cresctoare) 2.2. f < 0 (f strict descresctoare)
109
x0
x1
x2
2.1.
f > 0, f < 0
x2
x1
x0
2.2. f < 0, f < 0 Deci pentru aplicarea metodei tangentei n rezolvarea ecua iei f(x) = 0 trebuie
stabilite intervalele de monotonie i intervalele de convexitate/concavitate pentru func ia f. Dac a i b sunt capetele unui astfel de interval i dac f(a)f(b)<0, atunci se alege n intervalul [a, b] un punct x0 astfel nct f(x0)f(x0)>0. irul construit rin
110
Metode Numerice
metoda tangentei, avnd termenul ini ial x0 converge la unica rdcin a ecua iei f(x) = 0, situat n intervalul [a, b].
Algoritm
Date de intrare: f - n condi iile 1.1,1.2,2.1 sau 2.2 x0 - f(x0)f(x0)>0
f (x1) ; f (x1)
Prezentm n continuare o variant a acestui algoritm pentru cazul n care f nu verific neaprat condi iile suficiente de convergen . Introducem ca dat suplimentar de intrare numrul maxim de termeni din ir ce urmeaz a fi calcula i (Nmax). Condi ia de oprire se transform | xn - xn-1 |2 < sau n > Nmax
x1 := x0; x2 : = x1 n : = 1;
f (x1) ; f (x1)
111
ct timp (| x2 x1 |2 ) i (n Nmax) execut x1 := x2; x2 : = x1 n : = n + 1; Trebuie verificat la ieirea din ciclu dac f(x2) 0. Dac problema este bine condi ionat, aceasta condi ie va asigura acurate ea aproxima iei.
f (x1) ; f (x1)
Proceduri MAPLE
> mtangenta:=proc(f,x0,epsilon) > local x1,x2,df; > df:=D(f);x1:=x0;x2:=x1-f(x1)/df(x1); > while evalf((x2-x1)^2)>=epsilon do > x1:=x2;x2:=x1-f(x1)/df(x1) > od; > RETURN(x2) > end;
> mtangentaN:=proc(f,x0,epsilon,Nmax) > local x1,x2,n,df; > df:=D(f);x1:=x0;x2:=x1-f(x1)/df(x1);n:=1; > while (evalf((x2-x1)^2)>=epsilon)and (n<=Nmax) do > x1:=x2;x2:=x1-f(x1)/df(x1) ;n:=n+1; print(evalf(x2)) > od; > print(`Numar de termeni calculati`, n-1); > RETURN(x2) > end;
112
Metode Numerice
> plot(exp(x)+2*x+1,x=-2..2,color=black);
> f1:=(x->exp(x)+2*x+1);
f1 := x e x + 2 x + 1
> mtangenta(f1,0.1,10^(-5));
-0.7388349460
> fsolve(f1(x),x);
-0.7388350311
> plot(sin(x)+x-1,x,color=black);
> f2:=(x->sin(x)+x-1);
f2 := x sin( x ) + x 1
> mtangenta(f2,1.1,10^(-8)); 113
0.5109734294
> fsolve(f2(x),x);
0.5109734294
> mtangentaN(f2,1.1,10^(-8),10);
19.33165959 9.366076806 -4881.864603 -2422.713182 14288.93783 5139.034940 2315.137476 -96996.81022 0.1024903391 10 8 -0.5376704605 10 8
-0.5376704787 10 8
114
Metode Numerice
cu proprietatea c f(x) = 0 sau echivalent f1(x1, x2, ..., xn) = 0 f2(x1, x2, ..., xn) = 0 ............................... fn(x1, x2, ..., xn) = 0 Numim solu ie a sistemului (de n ecua ii cu n necunoscute) f(x) = 0 pe G un vector x*G Rn cu proprietatea c f(x*) = 0,. Presupunem c G Rn este o mul ime deschis, |||| o norm pe Rn care induce o norm pe L(Rn, Rn) ) Mn,n(R) notat tot ||||, f = (f1, f2, ..., fn) : G Rn este o func ie diferen iabil i x*G o solu ie a sistemului f(x) = 0. De asemenea fie x = x* + h G (hRn cu ||h||=1, R) o aproxima ie a lui x*. Notm cu Jf(x) jacobianul func iei f n punctul x, adic matricea
|| o ( ) || =0. Ca urmare, 0
f( x ) - f(x*) - o() = Jf(x*)( x -x*) Jf(x*)-1(f( x ) - f(x*) - o()) =( x -x*)
i
|| x -x*|| || Jf(x*)-1|| f( x ) - f(x*)||.
Deci factorul de condi ionare absolut al problemei f(x) = 0 este|| Jf(x)-1||. Dac > 0 i x este un numr real cu proprietatea c |f( x )| atunci | x - x*| || Jf(x*)-1||
(unde x* este o solu ie a sistemului f(x) = 0). n general, || x -x*|| i ||f( x )|| nu sunt simultan mici (|| x -x*|| este eroarea absolut cu care x aproximeaz x*, iar ||f( x )||
indic reziduu corespunztor lui x ). Dac problema este bine condi ionat (adic
115
dac norma || Jf(x*)-1|| este mic), atunci reziduu mic implic faptul c eroarea
lim
|| ek +1 || || ek ||r
= C.
Dac r = 1 i C<1, rata convergen ei se spune liniar r=1 i C = 0 (sau dac r > 1), rata convergen ei se spune superliniar r = 2, rata convergen ei se spune ptratic
Teorem 5.6. (metoda punctului fix). Fie (X,d) un spa iu metric complet i fie f : X X o contrac ie. Atunci exist i este unic x* punct fix pentru f. Punctul
x* este limita unui ir construit dup cum urmeaz: x0 X dat xn = f(xn-1), n 1. Mai mult, dac numrul q (0,1) este astfel nct d(f(x), f(y)) qd(x,y) pentru orice x,y X, atunci pentru orice n1 avem
116
Metode Numerice
1. d(x*, xn)
q d(xn, xn-1) 1 q
qn d(x1, x0) 1 q
2. d(x*, xn)
nct d(f(x), f(y)) qd(x,y) pentru orice x,y X. Artm unicitatea punctului fix. Presupunem prin absurd c x* i y* sunt puncte fixe ale lui f i c x* y*. Atunci f(x*) = x* i f(y*) = y* i avem d(x*, y*) = d(f(x*), f(y*)) q d(x*, y*) < d(x*, y*), ceea ce este o contradic ie. n consecin , punctul fix (dac exist) este unic. Artm c irul (xn)n este convergent i limita lui este punct fix pentru f. Pentru orice k0 i orice n 0, avem d(xn+k, xn+k-1) = d(f(xn+k-1), f(xn+k-2)) q d(xn+k-1, xn+k-2) ... qk-1d(xn+1, xn).
1 qk d(xn+1, xn). 1 q
Din faptul c d(xn+1, xn) = d(f(xn), f(xn-1)) q d(xn, xn-1) ... qn d(x1, x0) i din rela ia (1) rezult d(xn+k, xn) Ca urmare d(xn+k, xn) 1 n q d(x1, x0) 1 q
(2).
117
nct qn <
pentru orice n n i orice k0. Deci (xn)n este ir Cauchy i deoarece X este spa iu complet rezult c (xn)n este convergent. Notm x* = lim x n . Artm c x* este
n
punct fix pentru f. Func ia f fiind contrac ie este func ie continu. Trecnd la limit cu n n xn = f(xn-1) ob inem
n
de unde innd cont c x* = lim x n = lim x n 1 rezult x* = f(x*), adic x* este punct fix pentru f. Din rela ia (1) rezult d(xn+k, xn) 1 qk 1 qk d(xn+1, xn) . q d(xn, xn-1) 1 q 1 q
n continuare folosind i faptul c d(xn, xn-1) qn-1d(x1, x0) se ob ine d(x*, xn) qn d(x1, x0). 1 q
Pentru a arta ultima afirma ia din teorem inem seama de d(x*, xn) = d(f(x*), f(xn-1)) q d(x*, xn-1).
118
Metode Numerice
numr q (0,1) este astfel nct ||f(x) - f(y)|| q||x -y|| pentru orice x,y S Atunci exist i este unic x* punct fix pentru f i pentru orice x0E, irul definit recursiv prin xn = f(xn-1), n 1 converge la x*. Mai mult, pentru orice n1 avem 1. ||x*- xn|| 2. ||x*- xn|| q ||xn - xn-1|| 1 q
qn ||x1- x0|| 1 q
E atunci (S,d) (unde d(x,y) = || x-y||) este spa iu metric complet. n consecin , afirma iile rezult aplicnd direct teorema precedent.
Algoritm:
Date de intrare: f (contrac ie) x0 (termenul ini ial al irului) (precizia ce determin condi ia de oprire: se calculeaz termenii irului pn la xN cu proprietatea ||xN-xN-1|| < ). Date de ieire: xN (aproxima ie satisfctore (determinat de ) pentru punctul fix). x1:=x0; x2:=f(x1);
ct timp x 2 x1 execut
x1:=x2; x2:=f(x1);
119
La ieire x2 este aproxima ie pentru x*, punctul fix al lui f. Faptul c f este contrac ie asigur terminarea programului ntr-un numr finit de pai. Pentru a evita ciclarea n situa ia n care s-ar ncerca folosirea algoritmului pentru o func ie care nu este contrac ie, se poate stabili de la nceput un numr maxim de pai ce urmeaz a fi executa i. De asemenea se poate afia la fiecare pas diferen a dintre termenii consecutivi curen i. (pentru a observa c irul nu converge dac f nu e contrac ie). Astfel se poate folosi urmtoarea variant a algoritmului: Date de intrare: f (contrac ie) x0 (termenul ini ial al irului) (precizia) Nmax (numr maxim de termeni ai irului ce urmeaz a fi calcula i) Condi ia de oprire: se calculeaz termenii irului pn la xN cu proprietatea ||xN-xN-1|| < sau N Nmax). Date de ieire: xN (dac f este contrac ie, xN este aproxima ie satisfctore - determinat de i Nmax - pentru punctul fix al lui f). x1:=x0; x2:=f(x1); n:=1;
Dac f este contrac ie i Nmax suficient de mare, la ieirea din ciclu, x2 este aproxima ie pentru x*, punctul fix al lui f.
120
Metode Numerice
y = f(x) y=x
x0 x2 x4 x3
x1
Propozi ie 5.9. Fie a, b dou numere reale cu a < b i fie f: [a, b] [a,b] R o func ie derivabil cu proprietatea c sup | f (x) | < 1. Atunci f este contrac ie.
x(a,b)
Demonstra ie. Notm q = sup | f (x) | . Avem q (0,1). Fie x, y [a, b].
x(a,b)
Aplicnd teorema lui Lagrange, rezult c exist ntre x i y astfel nct f(x) f(y) = f () (x y), de unde ob inem
Exemple.
1) S se rezolve (n mul imea numerelor reale) ecua ia urmtoare aplicnd metoda punctului fix x3 x -1 = 0. Se poate arta c ecua ia x3 x -1 = 0 are o singur rdcin real, i c aceast rdcin este n intervalul (1,2). Ecua ia se poate scrie: x3 = x+1 x = 3 x +1
121
1 1 i deci 3 3 (x + 1)2
sup | f (x) | =
x(1,2)
1 1 <1 3 34
Ca urmare f este contrac ie pe intervalul [1,2]. Deci solu ia ecua iei poate fi aflat ca limita irului (xn)n, cu xn = f(xn-1) = 3 x n 1 + 1 , x0[1,2]. 2) S se rezolve (n mul imea numerelor reale) ecua ia urmtoare aplicnd metoda punctului fix x cos(x) = 0 Notm g(x) = x cos(x). Cum cos(x) [-1, 1], solu iile ecua iei x cos(x) = 0 se gsesc n intervalul [-1, 1]. Deoarece g (x) = 1 + sin(x) > 0 pentru x din intervalul [-1, 1], rezult c g este strict cresctore pe [-1, 1] i deci ecua ia x cos(x) = 0 are cel mult o rdcin. Cum g(0)g( rdcin n intervalul [0, f (x) =
1 (1 sin(x)) i deci 2
sup
x(0, 2)
| f (x) | =
1 <1 2
1 xn = f(xn-1) = ( xn-1 +cos(xn-1)), x0[0, ]. 2 2 Procedura MAPLE de mai jos implementeaz metoda punctului fix pentru o contrac ie pe un interval nchis al lui R.
122
Metode Numerice > punctfix:=proc(f,x0, epsilon) > local x1,x2; > x1:=x0; > x2:=f(x1); > while evalf(abs(x2-x1))>=epsilon do > x1:=x2; > x2:=f(x1) > od; > RETURN(x2); > end;
Exemplificm aplicarea procedurii pentru contrac iile f1: [1,2] [1,2], definit prin f1(x) = 3 x + 1 . f2: [0,
f1 := x ( x + 1 )
> punctfix(f1,1.5,10^(-5));
( 1/ 3 )
1.324719474
> fsolve(f1(x)=x,x);
1.324717957
> f2:=x->1/2*(x+cos(x));
f2 := x
> punctfix(f2,1.,10^(-5));
1 1 x + cos( x ) 2 2
0.7390856959
> fsolve(f2(x)=x,x);
0.7390851332 Procedura de mai jos implementeaz metoda punctului fix pentru o contrac ie pe
Rm.
> punctfixM:=proc(f,x0,epsilon,Nmax) > local m,x1, x2,n, norma,i; > m:=nops(x0);
123
Mdlina Roxana Buneci > x1:=x0; > x2:=[seq(f[i](op(x1)), i=1..m)]; > n:=1; > norma:=0; > for i from 1 to m do norma:=norma + abs(x2[i]-x1[i]) od; > while (evalf(norma) >= epsilon) and (n < Nmax) do > x1:=x2; > x2:=[seq(f[i](op(x1)), i=1..m)]; > n:=n+1; > norma:=0; > for i from 1 to m do norma:=norma + abs(x2[i]-x1[i]) od; > od; > RETURN(x2) > end;
Deoarece | f | este continu, exist I astfel nct sup | f (x) | = | f ()| <1. Dac mai artm i c f(I) I, rezult c f|I este contrac ie. Aplicnd formula lui Lagrange rezult c pentru orice x I exist x ntre x i x* astfel nct f(x) - f(x*) = f (x)(x-x*) f(x) - x* = f (x)(x-x*)
, 2
, x* + ] = I. 2 2
124
Metode Numerice
| g (x*)| =
f (x *)f (x *) f (x *)
2
=0 < 1.
Din propozi ia precedent rezult c exist un interval nchis I J0 J astfel nct x*I i g|I : I I este contrac ie. Ca urmare irul definit prin recuren xn= g(xn-1), n1 converge la x* pentru orice termen ini ial x0I. Din defini ia lui g rezult c xn = xn-1 1 f(xn-1), n 1, f (x n 1 )
125
fi . (x) x j 1i,jm
Atunci f este contrac ie. Demonstra ie. Notm q = sup || Jf (x) || . Avem q (0,1). Fie x, y S.
xS
||f(x) f(y)|| sup || Jf (x + (y x)) || ||x y|| sup || Jf (x) || ||x y||
[0,1]
xS
q||x y||.
. 2
Deoarece ||Jf|| este continu i S compact, exist S astfel nct sup || Jf (x) || = ||Jf ()|| <1.
xS
Dac mai artm i c f(S) S, rezult c f|S este contrac ie. Aplicnd formula lui Taylor rezult c pentru orice x S exist x = x* + x(x-x*) S astfel nct f(x) = f(x*) + Jf(x)(x-x*) f(x) = x* + Jf(x)(x-x*)
126
Metode Numerice
f(x) - x* = Jf(x)(x-x*)
i m necunoscute:
f(x) = 0, unde f : G Rm, G Rm. La fel ca n sec iunile precedente convenim s notm cu x1, x2,, xn, un
n cele ce urmeaz presupunem c matricea Jf(x) este inversabil pentru x G. Metoda Newton const n aproximarea solu iei ecua iei considerate cu xn, unde xn = xn-1 Jf(xn-1)-1 f(xn-1)
(*)
iar aproxima ia ini ial x0G este suficient de apropiat de solu ia sistemului. Observa ii. 1) Presupunem c f este de clas C2 i sistemul f(x) = 0 admite o solu ie x* G cu proprietatea c Jf(x*) este matrice inversabil (sau echivalent det(Jf(x*)) 0). Atunci exist o vecintate deschis V G a lui x* astfel nct pentru orice x V s avem Jf(x) este inversabil. Considerm func ia
127
g: V Rm, definit prin g(x) = x Jf(x)-1 f(x). Avem g(x*) = x* - Jf(x*)-1 f(x*) = x*, deci x* punct fix pentru g. Cum
(**)
j=1
fi x n 1 x j
( x nj x nj 1 ) = fi ( x n1 ) ,
i = 1,2,, m
Dac se folosete rela ia (*) pentru determinarea lui xn este necesar s se calculeze inversa matricei Jf(xn-1). Dac se folosete rela ia (**), este necesar s se rezolve un sistem liniar cu m ecua ii, i necunoscutele x n 1 = x n x n 1 , k = 1, , m. k k k Rezolvarea acestui sistem necesit un numr mai mic de opera ii dect inversarea matricei Jf(xn-1). Folosim rela ia (**) se nlocuiete rezolvarea sistemului neliniar prin rezolvarea succesiv a unor sisteme liniare. 3) Una din dificult ile metodei este necesitatea determinrii derivatelor par iale f i (x ) , componentele matricei Jf(x) (dac se utilizeaz un mediu de x j
128
Metode Numerice
posibilitate de eliminare a acestei dificult i este aproximarea derivatelor par iale prin diferen e finite f i (x ) 1 f i x + h ij e j f i (x ) = ij (x ) x j h ij
( (
unde hij sunt parametri specifici discretizrii considerate, iar ej =(0,..,0,1,00)t sunt vectorii bazei canonice. n acest fel Jf(x) se nlocuiete prin J(x) = (ij(x))1i,jm Metoda ob inut n acest caz se numete metoda iterativ discret a lui Newton: xn = xn-1 J(xn-1)-1 f(xn-1), n 1. Metoda Newton este o metod frecvent folosit deoarece este foarte rapid convergent (rata convergen ei este ptratic). Dar ca i n cazul metodei tangentei convergen a metodei depinde de alegerea aproxima iei ini iale. Aproxima ia ini ial trebuie luat ct mai aproape de solu ia problemei, eventual utiliznd o alt metod de gsire a solu iei. n urmtoarele teoreme se presupune c s-a fixat o norm pe
Rm, notat
, iar pe spa iile de operatori liniari L(Rm, Rm), L(Rm, L(Rm, Rm)) se
consider normele operatoriale induse. Pentru x Rm i r > 0, se noteaz B(x,r) mul imea:
{y R m , {y R m ,
yx <r
yx r
Teorem 5.14. (Metoda Newton). Fie G Rm o mul ime deschis, f : G Rm o func ie de clas C2, cu proprietatea c exist M > 0 astfel ca d 2f ( x ) M
pentru orice x G. Presupunem c ecua ia f(x) = 0 admite o solu ie x* astfel nct Jf(x*) s fie inversabil. Atunci pentru orice q (0, 1) exist r, > 0 astfel nct Jf(x) este inversabil pentru orice x B(x*,r), irul (xn)n, definit prin xn = xn-1 Jf(xn-1)-1 f(xn-1), n 1
129
rmne n B(x*,r) oricare ar fi x0 B(x*,r) i converge la x*. n plus, au loc urmtoarele rela ii
xn x *
xn x *
2 2n q M
1 f xn
( )
2 M n x x n 1 . 2
Parametrii procedurii mnewton (de mai jos) sunt func ia f (se presupune c se rezolv sistemul f(x) = 0) x0 = termenul ini ial din irul definit de (**) epsilon = precizia Nmax = numrul maxim de termeni din ir ce vor fi calcula i Se calculeaz n termeni, cu n verificnd ( x n x n 1 < epsilon) sau (nNmax). Comanda
2
>subs(expr1,expr2);
substituie subexpresia expr1 n expresia expr2. Comanda
>norm(a, t);
calculeaz norma t, unde t =1, 2, infinity a vectorului (sau matricei) a. Este de asemenea o comanda ce apar ine pachetului linalg.
Procedur MAPLE
> mnewton := proc(f, x0, epsilon, Nmax) > local m,x1, x2, dx, b, fx, fx1, n, i, j, ex, r; > m:=vectdim(x0);x1 := vector(m);x2:=vector(m); > for i to m do x1[i] := x0[i] od; > dx := vector(m); > b := vector(m); > fx := jacobian(f(seq(x[i],i=1..m)), [seq(x[i],i=1..m)]); > fx1 := matrix(m, m); > ex := seq(x[i] = x1[i], i = 1 .. m); > for i to m do
130
Metode Numerice > for j to m do fx1[i, j] := evalf(subs(ex, fx[i, j])) od > od; > b := map(-evalf,f(seq(x1[i],i=1..m))); > dx := linsolve(fx1, b, 'r'); > if r <> m then print(`Metoda nu se aplica`); RETURN(NULL) fi; > for i to m do x2[i] := x1[i] + dx[i] od; > n := 1; > print(x2); > while epsilon <= norm(dx, infinity)^2 and n < Nmax do > for i to m do x1[i] := x2[i] od; > ex := seq(x[i] = x1[i], i = 1 .. m); > for i to m do > for j to m do fx1[i, j] := evalf(subs(ex, fx[i, j])) > od > od; > b := map(-evalf, f(seq(x1[i],i=1..m))); > dx := linsolve(fx1, b, 'r'); > if r <> m then print(`Metoda nu se aplica`); RETURN fi; > for i to m do x2[i] := x1[i] + dx[i] od; > n := n + 1; > print(x2) > od; > print(`Numar de pasi`, n); > b := vector(map(evalf, f(seq(x1[i],i=1..m)))); > print(`Valoarea functiei`, b); > RETURN(evalm(x2)) > end;
f := ( x, y ) [ x 2 y, x 3 5 y ]
> mnewton(f,vector([10,0.1]),10^(-5),9);
131
[ 5.000000017, 25.00000013 ]
> fsolve({f(x,y)[1],f(x,y)[2]},{x=10,y=0.1});
{ x = 5.000000000 , y = 25.00000000 }
> f1:=(x,y)->[x^2+y^2-1,x^3-y];
f1 := ( x , y ) [ x 2 + y 2 1, x 3 y ]
> mnewton(f1,vector([0.9,0.5]),10^(-5),9);
[ 0.8260313586 , 0.5636241619 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=0.9,y=0.5});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewton(f1,vector([1,1]),10^(-5),9);
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewton(f1,vector([-1,1]),10^(-5),20);
[ -0.2500000001 , 1.250000000 ] [ -81.50000065 , -15.25000014 ] [ -54.33007595 , 64.91769907 ] [ -36.21723980 , 24.89070061 ] [ -24.14389039 , 3.68381152 ] [ -16.10992954 , -24.48752262 ]
132
Metode Numerice
[ -10.75342471 , -10.48890844 ] [ -7.178878965 , -3.444508772 ] [ -4.781922755 , 0.617903126 ] [ -3.270919075 , -5.691810662 ] [ -2.260819460 , -2.574374564 ] [ -1.578178423 , -1.088178100 ] [ -1.121843867 , -0.5209805009 ] [ -0.8857962879 , -0.5206567978 ]
[ -0.8296024170 , -0.5627517822 ]
[ -0.8260313579 , -0.5636241623 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=-1,y=1});
{ x = -0.8260313577 , y = -0.5636241622 }
> f2:=(x,y,z)->[x+x^2-2*y*z-0.1,y-y^2+3*x*z+0.2, z+z^2+2*x*y-0.3];
{ x = 0.01282414583 , y = -0.1778006680 , z = 0.2446880443 } Printre dezavantajele metodei Newton prezentate mai nainte se afl necesitatea calculrii la fiecare pas a inversei unei matrice, Jf(xn), sau eventual a rezolvrii unui sistem de ecua ii liniare (aa cum remarcam mai nainte). Un alt dezavantaj este localizarea teoretic a procesului iterativ ntr-o vecintate a solu iei
133
cutate. Metoda Newton simplificat nltur primul inconvenient. Aceast variant a metodei const n aproximarea solu iei cu xn, unde x0, c G, i xn = xn-1 Jf(c)-1 f(xn-1), n 1 metode.
(***)
xn x * qn x0 x *
xn x * 1 f xn
( )
L n +1 x xn
Parametrii procedurii mnewtonsimplif (de mai jos) sunt func ia f (se presupune c se rezolv sistemul f(x) = 0) x0 = termenul ini ial din irul definit de (***) c = punctul n care se evalueaz inversa matricei jacobiene epsilon = precizia Nmax = numrul maxim de termeni din ir ce vor fi calcula i Se calculeaz n termeni, cu n verificnd ( x n x n 1 < epsilon) sau (nNmax).
2
Procedur MAPLE
> mnewtonsimplif := proc(f, x0,c,epsilon, Nmax) > local m,x1, x2, dx, b, fx, fx1, n, i, j, ex, r;
134
> b := vector(m); > fx := jacobian(f(seq(x[i],i=1..m)), [seq(x[i],i=1..m)]); > > fx1 := matrix(m, m); ex := seq(x[i] = c[i], i = 1 .. m);
> for i to m do > for j to m do fx1[i, j] := evalf(subs(ex, fx[i, j])) od > od; > if det(fx1)=0 then print(`Metoda nu se aplica`); RETURN(NULL) fi; > fx1:=inverse(fx1); > dx := evalm(fx1&*b); > for i to m do x2[i] := x1[i] - dx[i] od; > n := 1; > print(x2); > while epsilon <= norm(dx, infinity)^2 and n < Nmax do > for i to m do x1[i] := x2[i] od; > b := map(evalf, f(seq(x1[i],i=1..m))); > dx := evalm(fx1&*b); > for i to m do x2[i] := x1[i] - dx[i] od; > n := n + 1; > print(x2) > od; > print(`Numar de pasi`, n); > ex := seq(x[i] = x2[i], i = 1 .. m); > b := vector(map(evalf, f(seq(x1[i],i=1..m)))); > print(`Valoarea functiei`, b); > RETURN(evalm(x2)) > end; b := map(evalf,f(seq(x1[i],i=1..m)));
f := ( x, y ) [ x 2 y, x 3 5 y ]
> mnewtonsimplif(f,vector([6,0.1]),vector([6,0.1]),10^(-5),20);
[ 5.250000002, 27.00000000 ]
135
[ 5.106445312, 25.83984374 ] [ 5.048619375, 25.38187247 ] [ 5.022801923, 25.17874816 ] [ 5.010817356, 25.08472436 ] [ 5.005158912, 25.04038926 ] [ 5.002466430, 25.01930594 ] [ 5.001180563, 25.00923998 ] [ 5.000565396, 25.00442502 ]
[ 5.000270852 , 25.00211976 ]
[ 5.000270852, 25.00211976 ]
> fsolve({f(x,y)[1],f(x,y)[2]},{x=10,y=0.1});
{ x = 5.000000000 , y = 25.00000000 }
> f1:=(x,y)->[x^2+y^2-1,x^3-y];
f1 := ( x , y ) [ x 2 + y 2 1, x 3 y ]
> mnewtonsimplif(f1,vector([0.9,0.5]),vector([0.9,0.5]),10^(-5),9);
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewtonsimplif(f1,vector([1,1]),vector([1,1]),10^(-5),9);
[ 0.8750000000 , 0.6250000000 ] [ 0.8442382812 , 0.5776367188 ] [ 0.8324169200 , 0.5662568530 ] [ 0.8280863872 , 0.5638050098 ] [ 0.8266269335 , 0.5634628865 ]
Numar de pasi , 5 Valoarea functiei , [ 0.003603154, 0.0040362378 ]
136
Metode Numerice
[ 0.8266269335 , 0.5634628865 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=1,y=1});
{ x = 0.8260313577 , y = 0.5636241622 }
> mnewtonsimplif(f1,vector([-1,1]),vector([-1,1]),10^(-5),20);
[ -0.2500000000 , 1.250000000 ] [ 0.2265625000 , 1.414062500 ] [ 0.6650531295 , 1.327101470 ] [ 0.8806553123 , 0.9409566642 ] [ 0.8443975609 , 0.5742223014 ] [ 0.8197933010 , 0.5282487956 ]
[ 0.8206651612 , 0.5535667326 ]
[ 0.8271727754 , 0.5669722992 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=-1,y=1});
{ y = -0.5636241622 , x = -0.8260313577 }
> f2:=(x,y,z)->[x+x^2-2*y*z-0.1,y-y^2+3*x*z+0.2, z+z^2+2*x*y-0.3];
[ 0.01478969600 , -0.2066006490 , 0.2565247722 ] [ -0.00621510390 , -0.1686979420 , 0.2403061628 ] [ 0.01888306226 , -0.1670604211 , 0.2401559976 ] [ 0.01940230578 , -0.1856954577 , 0.2486343215 ] [ 0.00728302228 , -0.1799894344 , 0.2453868143 ] [ 0.01161288975 , -0.1729652764 , 0.2424070455 ] [ 0.01600913753 , -0.1785281521 , 0.2452560777 ] [ 0.01217347883 , -0.1799067137 , 0.2455656198 ]
137
{ z = 0.2446880443 , x = 0.01282414583 , y = -0.1778006680 } Metoda Newton Kantorovici nu localizeaz procesul iterativ ntr-o vecintate a solu iei problemei. Metoda Newton Kantorovici const n aproximarea rdcinii ecua iei considerate cu xn, unde xn = xn-1 Jf(xn-1)-1 f(xn-1), n 1,
(****)
iar aproxima ia ini ial x0G satisface condi iile din teorema urmtoare.
1 2 1 (1 1 2abM ) . aM
B x 0 , r G, unde r =
Atunci f(x) = 0 are o unic solu ie x* n B(x 0 , r ), irul (xn)n, este corect definit prin xn = xn-1 Jf(xn-1)-1 f(xn-1), n 1, rmne n B(x0 , r) i converge la x*. n plus, are loc urmtoarea rela ie xn x * b 2n 1 , n 1.
138
Metode Numerice
VI.1.1. Defini ie. Eroarea de interpolare. Defini ie. Fie x0, x1, , xn n+1 puncte distincte dou cte dou din
intervalul [a, b] (numite noduri), i fie yi = f(xi) pentru orice i = 0,1,n. Se numete polinom de interpolare asociat nodurilor x0, x1, , xn i valorilor y0=f(x0), y1= f(x1), , yn=f(xn) un polinom Pn care ndeplinete urmtoarele condi ii grad(Pn) n Pn(xi) = yi, i = 0, 1, , n . Polinomul determinat de condi iile anterioare exist i este unic. ntr-adevr, deoarece grad(Pn) n, exist an, an-1, ...a0 R astfel nct Pn(X) = anXn + an-1Xn-1 + + a1X + a0 Rela iile Pn(xi) = yi, i = 0, 1, , n conduc la sistemul:
139
a0 + a1x0 + a2 x 2 + + an x n = y0 0 0
2 n a0 + a1x1 + a2 x 1 + + an x 1 = y1
2 n 1 x1 x 1 x 1
0 j<i n
(x
xj
xn x 2 x n n n
(fiind un determinant Vandermonde). Deci 0, i n consecin sistemul (*) este compatibil determinat, adic polinomul de interpolare Pn este unic determinat. Coeficien ii polinomului de interpolare pot fi determina i rezolvnd sistemul (*), dar dac n este mare, atunci volumul de calcul este mare. De aceea se utilizeaz diferite forme comode ale polinoamelor care conduc la polinoame de interpolare Lagrange, Newton, etc. Teorema urmtoare stabilete eroarea maxim cu care polinomul Pn aproximeaz func ia f:
. Fie x0, x1, , xn n+1 puncte distincte dou cte dou din intervalul [a,
b], i yi = f(xi) pentru orice i=0,1,n. Fie Pn polinomul de interpolare asociat nodurilor x0, x1, , xn i valorilor y0=f(x0), y1= f(x1), , yn=f(xn). Atunci oricare ar fi x[a,b], exist x(a,b) astfel nct f(x) Pn(x) =
140
Metode Numerice
| f(x) Pn(x) |
t[ a,b ]
sup f (
n +1)
(t)
|(x x0) (x x1) (x xn)|.
( n + 1) !
Demonstra ie. Fie x [a, b]. Dac x { x0, x1, , xn}, atunci
f( x ) = Pn( x )
i
( x x0) ( x x1) ( x xn) = 0, ca urmare f( x ) - Pn( x ) = 0 = f (n +1) ( ) ( x x0) ( x x1) ( x xn) ( n + 1) !
pentru orice (a,b). Presupunem c x { x0, x1, , xn} i considerm func ia g:[a, b] R, definit prin g(x) = f(x) Pn(x) - c (x x0) (x x1) (x xn), unde constanta c va fi determinata astfel nct g( x ) = 0 sau echivalent 0 = g( x ) = f( x ) Pn( x ) - c( x x0) ( x x1) ( x xn) c=
Deci g( x ) = 0 i g(xi) = 0 pentru orice i =0, 1, ..., n. Aadar g se anuleaz n n+2 puncte distincte. Deoarece g este o func ie Rolle, rezult c derivata g se anuleaz n n+1 puncte distincte din intervalul (a,b). Repetnd ra ionamentul cu g , rezult c g se anuleaz n n puncte distincte din (a, b). Ra ionnd similar g(3) se anuleaz n n-1 puncte distincte din (a, b), g(4) se anuleaz n n-2 puncte distincte din (a, b), i aa mai departe. Se ob ine c exist x (a, b) astfel nct g(n+1)( x ) = 0.
(n Pe de alt parte deoarece gradul lui Pn este cel mult n, rezult c Pn +1) (x) = 0
pentru orice x [a, b] i deoarece x (x x0) (x x1) (x xn) este o func ie polinomial de grad n+1 cu coeficientul termenului de grad maxim 1, rezult c a n+1 derivat a sa este (n+1)!. n consecin , pentru orice x[a, b], avem
141
n particular, pentru x = x se ob ine 0 = g(n+1)( x ) = f(n+1)( x ) - c(n+1)!, de unde c= Cum pe de alt parte avem c= Rezult c
f (n +1) ( x )
( n + 1) !
f (n +1) ( x )
( n + 1) !
sup f (
n +1)
(t)
|(x x0) (x x1) (x xn)|.
|f( x ) Pn( x )|
( n + 1) !
ba n
Fie Pn polinomul de asociat nodurilor x0, x1, , xn i valorilor y0=f(x0), y1= f(x1), , yn=f(xn). Atunci oricare ar fi x [a, b], avem:
142
Metode Numerice
| f(x) Pn(x) |
t[ a,b ]
sup f (
n +1)
(t)
|(x x0) (x x1) (x xn)|.
( n + 1) !
Pentru orice x [a, b] exist i astfel nct x [xi, xi+1] i ca urmare |(x xi) (x xi+1)| De asemenea se poate arta c |(x xj)| (j i + 1) h pentru i < j |(x xj)| (i j ) h pentru j+1 < i h h h2 = . 4 2 2
h n +1 n!, 4
Polinoamele Cebev de prima spe pot fi definite recursiv prin : T0(x) = 1, T1(x) = x, Tn+2(x) = 2xTn+1(x) Tn(x), n 0, sau pot fi definite prin Tn(x) = cos(n arccos(x)). Nodurile Cebev sunt proiec iile pe axa OX a unor puncte egal distan ate situate pe un semicerc:
143
1 2n
pentru orice x [-1, 1]. Se poate arta c pentru oricare alte noduri ci, i=0, ...,n.
ba 2i + 1 b + a , 0 i n. cos + 2 2 2n + 2
| f(x) Pn(x) |
(b a)n +1 2
2n +1
(n + 1)! t[a,b]
sup f (
n +1)
(t) .
144
Metode Numerice
i ca urmare
li(x) =
Forma Lagrange a polinomului de interpolare este: Se observ uor c Ln(xi) = y0l0(xi) + y1l1(xi) + + ynln(xi) = yili(xi) = yi pentru orice i = 0, 1, , n i c grad(Ln) n. Aadar Ln este polinomul de interpolare asociat nodurilor x0, x1, , xn i valorilor y0, y1, , yn. n consecin , polinomul de interpolare asociat nodurilor x0, x1, , xn i valorilor y0, y1, , yn poate fi scris sub forma Ln(x) =
i =0
yi ( x
v : =0;
145
pentru i = 0,n,1 executa t : =yi; pentru j = 0,i - 1,1 executa t: = t * (a xj)/ (xi xj) pentru j = i + 1,n,1 executa t: = t * (a xj)/ (xi xj) v : = v + t;
Exemple
> PLagrange([1,-1,3],[2,-5,-1],2);
7 4
> PLagrange([1,-1,3],[2,-5,-1],-1);
-5
> expand(PLagrange([1,-1,3],[2,-5,-1],X));
5 7 1 X2 + X 4 2 4
146
Metode Numerice
valorilor y0 = f1(x0), y1 = f1(x1), y2 = f1(x2), y3 = f1(x3). De asemenea vom reprezenta grafic func ia f1 i polinomul asociat pe intervalul [0, 2], i apoi pe intervalul [-,3].
> f1:=x->x*cos(x);
f1 := x x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2 4 x1 := 0, , , 2 3 3
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
2 y1 := 0, , , 2 3 3
> expand(PLagrange(x1,y1,X));
27 X 3 27 X 2 +X 8 16 2
> with(plots):
> plot([f1(a),PLagrange(x1,y1,a)],a=0..2*Pi);
> plot([f1(a),PLagrange(x1,y1,a)],a=-Pi..3*Pi);
147
Considerm func ia f2: R R definit prin f2(x) = cos(x) + sin(x). Se poate observa uor c |f(k)(x)| 2 pentru orice xR i orice kN. Vom considera intervalul [0,2] i nodurile echidistante corespunztoare lui n = 3. Eroarea de interpolare este dominat de
> f2:=x->sin(x)+cos(x);
h4 2 2, unde h = 16 3
f2 := x sin( x ) + cos ( x )
> x2:=[seq(2*Pi/3*i,i=0..3)];
2 4 x2 := 0, , , 2 3 3
> y2:=[seq(f2(2*Pi/3*i),i=0..3)];
3 1 3 1 y2 := 1, , , 1 2 2 2 2
> expand(PLagrange(x2,y2,X));
27 X 2 27 X 27 X 3 3 81 X 2 3 27 X 3 +1+ + 8 8 16 2 16 3 16 2
> plot({f2(a),PLagrange(x2,y2,a)},a=0..2*Pi);
148
Metode Numerice
1 1 + x2
func ia i polinoamele de interpolare corespunztoare nodurilor echidistante, respectiv nodurilor Cebev pentru n = 3 pe intervalul [-1, 1]:
> f3:=x->1/(1+x^2);
f3 := x
> x4:=[seq(-1+2*i/3,i=0..3)];
1 1 + x2
-1 1 x4 := -1, , , 1 3 3
> y4:=[seq(evalf(f3(-1+2*i/3)),i=0..3)];
> x5:=[seq(evalf(cos((2*i+1)/(2*3+2)*Pi)),i=0..3)];
149
> plot([f3(a),PLagrange(x4,y4,a),PLagrange(x5,y5,a)],a=-1..1);
Reprezentm grafic func ia i polinoamele de interpolare corespunztoare nodurilor echidistante, pentru n = 3, 6, 9 pe intervalul [-5, 5]:
> x_3:=[seq([seq(-5+10*i/(3*j),i=0..3*j)],j=1..3)];
150
Metode Numerice
y_3 := [ [ 0.03846153846 , 0.2647058824 , 0.2647058824 , 0.03846153846 ], [ 0.03846153846 , 0.08256880734 , 0.2647058824 , 1., 0.2647058824 , 0.08256880734 , 0.03846153846 ], [ 0.03846153846 , 0.06202143951 , 0.1147308782 , 0.2647058824 , 0.7641509434 , 0.7641509434 , 0.2647058824 , 0.1147308782 , 0.06202143951 , 0.03846153846 ] ]
> plot([f3(a),seq(PLagrange(x_3[j],y_3[j],a), j=1..3)],a=-5..5);
Reprezentm grafic func ia i polinoamele de interpolare corespunztoare nodurilor Cebev pentru n = 3, 6, 9 pe intervalul [-5, 5]:
> x_c3:= [seq([seq(evalf(5*cos((2*i+1)/(6*j+2)*Pi)),i=0..3*j)],j=1..3)];
x_c3 := [ [ 4.619397662 , 1.913417162 , -1.913417162 , -4.619397662 ], [ 4.874639561, 3.909157412 , 2.169418697 , 0., -2.169418697 , -3.909157412 , -4.874639561 ], [ 4.938441703 , 4.455032621 , 3.535533905 , 2.269952498 , 0.7821723260 , -0.7821723260 , -2.269952498 , -3.535533905 , -4.455032621 , -4.938441703 ] ]
> y_c3:= [seq([seq(evalf(f3(5*cos((2*i+1)/(6*j+2)*Pi))),i=0..3*j)],j=1..3)];
y_c3 := [ [ 0.04476509230 , 0.2145386291 , 0.2145386291 , 0.04476509230 ], [ 0.04038427927 , 0.06141935837 , 0.1752425253 , 1., 0.1752425253 , 0.06141935837 , 0.04038427927 ], [ 0.03938836726 , 0.04796780633 , 0.07407407407 , 0.1625306849 , 0.6204268538 , 0.6204268538 , 0.1625306849 , 0.07407407407 , 0.04796780633 , 0.03938836726 ] ]
> plot([f3(a),seq(PLagrange(x_c3[j],y_c3[j],a), j=1..3)],a=-5..5);
151
Reprezentm grafic func ia i polinoamele de interpolare corespunztoare nodurilor echidistante, respectiv nodurilor Cebev pentru n = 9 pe intervalul [-5, 5]:
> plot([f3(a),PLagrange(x_3[3],y_3[3],a), PLagrange(x_c3[3],y_c3[3] ,a)],a=-5..5);
Reprezentm grafic func ia i polinoamele de interpolare corespunztoare nodurilor echidistante, pentru n = 5, 10, 15 pe intervalul [-5, 5]:
> x_5:=[seq([seq(-5+10*i/(5*j),i=0..5*j)],j=1..3)];
152
Metode Numerice
x_5 := [ -5, -3, -1, 1, 3, 5 ], [ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 ], -5, -13, -11, -3, -7, -5, -1, -1, 1, 1, 5, 7, 3, 11, 13, 5 3 3 3 3 3 3 3 3 3 3
> y_5:=[seq([seq(evalf(f3(-5+10*i/(5*j))),i=0..5*j)],j=1..3)];
y_5 := [ [ 0.03846153846 , 0.1000000000 , 0.5000000000 , 0.5000000000 , 0.1000000000 , 0.03846153846 ], [ 0.03846153846 , 0.05882352941 , 0.1000000000 , 0.2000000000 , 0.5000000000 , 1., 0.5000000000 , 0.2000000000 , 0.1000000000 , 0.05882352941 , 0.03846153846 ], [ 0.03846153846 , 0.05056179775 , 0.06923076923 , 0.1000000000 , 0.1551724138 , 0.2647058824 , 0.5000000000 , 0.9000000000 , 0.9000000000 , 0.5000000000 , 0.2647058824, 0.1551724138 , 0.1000000000 , 0.06923076923 , 0.05056179775 , 0.03846153846 ] ]
> plot([f3(a),seq(PLagrange(x_5[j],y_5[j],a), j=1..3)],a=-5..5);
Reprezentm grafic func ia i polinoamele de interpolare corespunztoare nodurilor Cebev pentru n = 5, 10, 15 pe intervalul [-5, 5]:
> x_c5:= [seq([seq(evalf(5*cos((2*i+1)/(10*j+2)*Pi)),i=0..5*j)], j=1..3)];
153
x_c5 := [ [ 4.829629132 , 3.535533905 , 1.294095226, -1.294095226 , -3.535533905 , -4.829629132 ], [ 4.949107210 , 4.548159976 , 3.778747872 , 2.703204086, 1.408662782 , 0., -1.408662782 , -2.703204086 , -3.778747872 , -4.548159976 , -4.949107210 ], [ 4.975923634 , 4.784701678 , 4.409606322 , 3.865052266, 3.171966420 , 2.356983682 , 1.451423384 , 0.4900856985 , -0.4900856985 , -1.451423384 , -2.356983682 , -3.171966420 , -3.865052266 , -4.409606322 , -4.784701678 , -4.975923634 ] ]
>y_c5:= [seq([seq(evalf(f3(5*cos((2*i+1)/(10*j+2)*Pi))),i=0..5*j)], j=1..3)];
y_c5 := [ [ 0.04110943251 , 0.07407407407 , 0.3738761582 , 0.3738761582 , 0.07407407407 , 0.04110943251 ], [ 0.03922543546 , 0.04611321154 , 0.06544958589 , 0.1203758761 , 0.3350834928 , 1., 0.3350834928 , 0.1203758761 , 0.06544958589 , 0.04611321154 , 0.03922543546 ], [ 0.03882015305, 0.04185261408 , 0.04891260454 , 0.06274065346 , 0.09040470686 , 0.1525466423 , 0.3218922278 , 0.8063319688 , 0.8063319688 , 0.3218922278 , 0.1525466423 , 0.09040470686 , 0.06274065346 , 0.04891260454 , 0.04185261408 , 0.03882015305 ] ]
> plot([f3(a),seq(PLagrange(x_c5[j],y_c5[j],a), j=1..3)],a=-5..5);
Reprezentm grafic func ia i polinoamele de interpolare corespunztoare nodurilor echidistante, respectiv nodurilor Cebev pentru n = 15 pe intervalul [-5, 5]:
>plot([f3(a),PLagrange(x_5[3],y_5[3],a), PLagrange(x_c5[3],y_c5[3], a)], a=-5..5);
154
Metode Numerice
( ) ( )
( )
f4 := abs Vom vizualiza comportarea polinoamelor de interpolare (sub forma Lagrange) L0,
( ) ( )
( )
155
Procedura grafic_polinoame de mai jos reprezint grafic n + 1 polinoamele de interpolare L0, L1, ..., Ln. Parametrul tip al procedurii determin ce fel de noduri se vor folosi (n + 1 noduri echidistante dac tip = 1 i n + 1 noduri Cebev altfel). Ceilal i parametri ai procedurii sunt func ia f (care se aproximeaz prin polinoame de interpolare), capetele intervalului [a, b] i n care indic numrul de noduri (n+1).
> grafic_polinoame:=proc(f,a,b,tip,n) > local xn,yn,titlu,legenda; > if tip=1 then xn:=[seq(noduri_echidistante(a,b,j),j=0..n)] > else xn:=[seq(noduri_Cebisev(a,b,j),j=0..n)] fi; > yn:=[seq(map(f,xn[j]),j=1..n+1)]; > titlu:=cat(f,`:=x->`,convert(f(x),string) ,`; x0, > convert(n,string),` noduri `); > if tip=1 then titlu:=cat(titlu, `echidistante `) > else titlu:=cat(titlu, `Cebisev `) fi; > titlu:=cat(titlu, `in intervalul [`, convert(a,string), `, `,convert(b,string),`]`);titlu:=cat(titlu,`\ny0=`,f,`(x0), f,`(x1), `)`); > titlu:=cat(titlu, x0, x1, `\nL i = polinomul de interpolare asociat ... , y1=`, x1, ..., x`,
y`,convert(n,string),`=`,f,`(x`,convert(n,string),
nodurilor y1,
...,y`,convert(i,string),
> legenda:=f,seq(cat(`L `,convert(j,string)),j=0..n); > plot([f(t),seq(polinom_Lagrange(xn[j],yn[j],t),j=1..n+1)], > t=a..b,labels=[X,Y],color=[COLOR(RGB,1,0,0),seq(COLOR(RGB,(1> floor(log[5](j))/(floor(log[5](n))+1))*irem(irem(j,7)+1,2),(1> floor(log[5](j))/(floor(log[5](n))+1))*irem(iquo(irem(j,7)+1,2), 2),(1-floor(log[5](j))/(floor(log[5](n))+1))*irem(iquo(irem(j,7)+1, 4),2)),j=1..n+1)],thickness=[2,seq(1,j=0..n)],legend=[legenda], title=titlu,xtickmarks=map(evalf,xn[n]),ytickmarks=map(evalf,yn[n]) ); > end;
Aplicm procedura pentru func ia f1 pe intervalele [0, 2], [-, 3] , func ia f3 pe intervalul [-3, 3] i func ia f4 pe intervalul [-1, 1]. n toate cazurile n = 10 i se consider dou variante: noduri echidistante i noduri Cebev.
> grafic_polinoame(f1,0,2*Pi,1,10);
156
Metode Numerice
> grafic_polinoame(f1,0,2*Pi,2,10);
> grafic_polinoame(f1,-Pi,3*Pi,1,10);
157
> grafic_polinoame(f1,-Pi,3*Pi,2,10);
> grafic_polinoame(f3,-3,3,1,10);
158
Metode Numerice
> grafic_polinoame(f3,-3,3,2,10);
> grafic_polinoame(f4,-1,1,1,10);
159
> grafic_polinoame(f4,-1,1,2,10);
160
Metode Numerice
161
Pentru aplica ii, calculul diferen elor finite este comod dac se construiete tabelul triunghiular urmtor: f(x0) f(x1) f(x2) f(x3) f(xn-3) f(xn-2) f(xn-1) f(xn)
nf(x0)
Astfel
n f ( x ) = ( 1) Cin f ( x + ( n i ) h )
i=0
dar n aplica ii se va folosi tabelul diagonal de mai sus. Pentru determinarea unui coeficientul ci al polinomului de interpolare Pn se utilizeaz diferen a finit de ordinul i a lui Pn n x0. innd cont de Pi+1(x) = Pi(x) + ci+1(x-x0)(x-x1)...(x-xi), i =0, 1,..., n-1, se ob ine ci+1 = yi +1 Pi (x i+1 ) (i + 1)!h i+1 .
i +1f (x 0 )
, i = 0, 1, ..., n-1.
162
Metode Numerice
Aadar
Pn (x) = f (x 0 ) + + ... +
n f (x 0 )
( x x 0 )[ n ]
t=
i se ine seama c
x x0 h
= t ( t 1)( t 2 ) .... ( t i + 1)
n f (x 0 ) t(t 1)...(t n + 1) + .... + n! Dac se efectueaz calculele n aritmetica virgulei mobile, aproximarea func iei f prin polinomul Newton ascendent este avantajoas pentru valorile x din vecintatea lui x0, eroarea fiind mic pentru t n modul mic.
Date de ieire: px - valoarea polinomului n x px : =y0; t : = (x-x0)/h; u: = 1; pentru i = 1,n,1 executa pentru j =0,n-i,1 executa yj := yj+1 yj; u :=u*(t-i+1)/i; px:=px+u*y0 ;
> for j from 0 to n-1-i do > yl[j + 1] := yl[j + 2] - yl[j+1] > od; > u := u*(t i + 1)/i; > px := px + u*yl[1] od; > RETURN(px) > end;
> f1:=x->x*cos(x);
f1 := x x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2 , 4 , 2 x1 := 0, 3 3
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
2 y1 := 0, , , 2 3 3
164
3X 3X 3X 2 1 2 2 X + 2 4
> sort(expand(PNewton1(0,2*Pi/3,y1,X)));
27 X 3 27 X 2 +X 8 16 2
> with(plots):
> plot([f1(a),PNewton1(0,2*Pi/3,y1,a)],a=0..2*Pi);
> plot([f1(a),PNewton1(0,2*Pi/3,y1,a)],a=-Pi..3*Pi);
165
unde ci+1 se determin din condi ia Pi+1(xn-i) = yn-i. Ca urmare polinomul de interpolare asociat nodurilor x0, x1, , xn i valorilor y0,y1, , yn poate fi scris sub forma Pn(x) = c0 + c1(x-xn) + c2(x-xn)(x-xn-1) + .... + cn(x-xn)(x-xn-1)...(x-x1)
166
Metode Numerice
Pentru exprimarea coeficien ilor c0, c1, , cn este necesar cunoaterea no iunii de diferen finit la stnga. Expresia f(x) = f(x) - f(x-h) se numete diferen finit (la stnga) de ordinul nti. Diferen ele finite la
nf(xn) Pentru determinarea unui coeficient ci al polinomului de interpolare Pn se utilizeaz diferen a finit de ordinul i a lui Pn n xn. Se ob ine:
Pn (x) = f (x n ) + + .... +
n f (x n )
( x x1 )[ n ]
t=
Se ob ine
x xn h
167
n f (x n ) t(t + 1)...(t + n 1) n!
Dac se efectueaz calculele n aritmetica virgulei mobile, aproximarea func iei f prin polinomul Newton descendent este avantajoas pentru valorile x din vecintatea lui xn, eroarea fiind mic pentru t n modul mic.
168
> for j from n-1 by -1 to i do > yl[j+1] := yl[j+1] - yl[j] > od; > u := u*(t + i - 1)/i; > px := px + u*yl[n] od; > RETURN(px) > end;
Exemple
> f1:=x->x*cos(x);
f1 := x x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2 , 4 , 2 x1 := 0, 3 3
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
2 y1 := 0, , , 2 3 3
> PNewton2(2*Pi,2*Pi/3,y1,X);
3 (X 2 ) 9 (X 2 ) + 1 2 6 + 4 X + 4 3 (X 2 ) 3 (X 2 ) 3 (X 2 ) + 1 + 2 2 2 + 4
> sort(expand(PNewton2(2*Pi,2*Pi/3,y1,X)));
27 X 3 27 X 2 +X 8 16 2
> with(plots):
> plot([f1(a),pnewton2(2*Pi,2*Pi/3,y1,a)],a=0..2*Pi);
169
> plot([f1(a),PNewton2(2*Pi,2*Pi/3,y1,a)],a=-Pi..3*Pi);
170
Metode Numerice
f (x i , x j ) =
f (x j ) f (x i ) x j xi
, i j
se numete diferen divizat de ordinul nti. Diferen ele divizate de ordin 2 se definesc cu ajutorul diferen elor divizate de ordinul nti: f (x i , x j , x k ) = f (x j , x k ) f (x i , x j ) x k xi
Cunoscnd diferen ele divizate de ordinul m, diferen ele divizate de ordinul m+1 se definesc prin: f (x i 1, x i , x i+1,..., x i+ m ) = f (x i , x i+1,..., x i+ m ) f (x i 1, x i ,..., x i + m1 ) x i + m x i1
n consecin , polinomul de interpolare asociat nodurilor x0, x1, , xn i valorilor y0,y1, , yn poate fi scris sub forma Pn (x) = f (x 0 ) + f (x 0 , x1 )(x x 0 ) + f (x 0 , x1 , x 2 )(x x 0 )(x x1 ) + + .... + f (x 0 , x1 ,..., x n )(x x 0 )(x x1 )...(x x n 1 )
171
Pentru aplica ii, calculul diferen elor divizate este comod dac se construiete tabelul triunghiular urmtor: f(x0) f(x1) f(x2) f(x3) f(xn-2) f(xn-1) f(xn) f(xn-1,xn) f(x0,x1) f(x1,x2) f(x2,x3) f(xn-2,xn-1)
f(xn-2,xn-1,xn)
172
Metode Numerice > y1 := [seq(y[i],i=1..n)]; > v := y1[1]; > u := 1; > for i from 0 to n-2 do > for j from 0 to n-2-i do > y1[j+1]:=(y1[j+2]-y1[j+1])/(x[j+i+2]-x[j+1]) ; > od; > u := u*(a-x[i+1]); v := v + u*y1[1]; > od; > RETURN(v) > end;
Exemple
> f1:=x->x*cos(x);
f1 := x x cos( x )
> x1:=[seq(2*Pi/3*i,i=0..3)];
2 , 4 , 2 x1 := 0, 3 3
> y1:=[seq(f1(2*Pi/3*i),i=0..3)];
2 y1 := 0, , , 2 3 3
> PNewtond(x1,y1,X);
X + 2
2 4 27 X X X 3 3 16 2
> sort(expand(PNewtond(x1,y1,X)));
27 X 3 27 X 2 +X 8 16 2
> with(plots):
> plot([f1(a),PNewtond(x1,y1,a)],a=0..2*Pi);
173
> plot([f1(a),PNewtond(x1,y1,a)],a=-Pi..3*Pi);
174
Metode Numerice
VI.2.1. Caracterizarea elementelor de cea mai bun aproximare pe subspa ii Hilbert. Defini ie. Fie (S, d) un spa iu metric i X o submul ime a sa. Fie x0 un
element al lui S. Se numete element de cea mai bun aproximare a lui x0 pe X un element p0X astfel nct d(p0, x0) = inf d(x, x0)
xX
Reamintim c orice spa iu pre-Hilbert H (spa iu vectorial real sau complex nzestrat cu un produs scalar < , >) este n particular un spa iu metric (distan a d este definit prin d(x,y) = || x y || = x y, x y pentru orice x, yH). n acest
caz dac X o submul ime a lui H i x0H, atunci un element p0X este element de cea mai bun aproximare pentru x0 pe X dac
p0 x 0 = inf x x 0 = inf
xX
xX
x x0 , x x0
175
||p-x0||2 = || p1 + <
1 4
|| p1 x0 + p2 x0||2 +
|| p1 x0 (p2 x0)||2
1 2
|| p1 x0 ||2.
Deci p H0 i ||p-x0|| < || p1 x0 ||, contradic ie cu faptul c p1 este element de cea mai bun aproximare a lui x0 pe H0. Rezult c presupunerea este fals, i n consecin elementul de cea mai bun aproximare este unic.
i ca urmare < p0-x0, p0 - x> = 0 pentru orice xH0. Pentru un xH0 oarecare, avem
||p0-x0||2 = < p0-x0, p0 -x0> = < p0 -x0, p0 - x + x - x0>
= < p0-x0, p0 - x> + < p0 -x0, x- x0> = < p0-x0, x- x0> = |< p0-x0, x- x0>| || p0-x0|| || x- x0||. Deci ||p0-x0||2 || p0-x0|| || x- x0|| pentru orice xH0. mpr ind inegalitatea cu
176
Metode Numerice
|| p0 -x0|| > 0,
ob inem
<p0-x0, y0> 0.
Scriind <p0-x0, y0> = r (cos + isin)= rei cu r>0 i [0, 2], rezult c nlocuind y0 cu eiy0 H0, putem presupune c exist y0H0 astfel nct
p 0 x 0 , y0 y0
2
avem ||p0 - y0 x0||2 < || p0 x0||2 i p0 - y0 H0. Am ob inut astfel o contradic ie cu faptul c p0 este element de cea mai bun aproximare a lui x0 pe H0. n consecin , presupunerea este fals i deci
177
VI. 2.2. Aproximarea n medie prin metoda celor mai mici ptrate
Considerm mul imea func iilor definite pe intervalul [a, b],
F : = {f : [a, b] R } i n+1 puncte distincte x0, x1, , xn din intervalul [a, b]. Spunem c func iile f i g din aceast mul ime sunt egale aproape peste tot (i vor fi identificate) dac f(xi) = g(xi) pentru orice i = 0,1,, n. Mai precis, f ~ g f(xi) = g(xi) pentru orice i = 0,1,, n, definete o rela ie de echivalen pe F. Notm [f] = {g: f ~ g} = { g : [a, b] R, f(xi) = g(xi) pentru orice i = 0,1,, n} clasa de echivalen a lui f. Notm cu cu H mul imea claselor de echivalen relativ la rela ia de echivalen de mai sus. H poate fi nzestrat cu o opera ie de grup abelian dup cum urmeaz: [f] + [g] : = [h], unde h : [a, b] R, h(x) = f(x) + g(x) pentru orice x[a, b]. Artm c defini ia nu depinde de reprezentan i. Fie f1 ~ f2, g1 ~ g2 i pentru i=1,2 fie hi:[a,b]R, hi(x) = fi(x) + gi(x) pentru orice x[a, b]. Avem h1(xj) = f1(xj) + g1(xj) = f2(xj) + g2(xj) = h2(xj) pentru orice j = 0,1,, n. Ca urmare h1 ~ h2, adic [h1] = [h2]. Evident opera ia definit mai sus este asociativ i comutativ. Dac notm o: [a, b] R, o(x) = 0 pentru orice x[a, b], atunci [o] este element neutru. Pentru orice [h], [-h] este simetricul fa de +, unde -h: [a, b] R, (-h)(x) = -h(x) pentru orice x[a, b]. De asemenea H poate fi nzestrat cu o opera ie extern de nmul ire cu scalari reali dup cum urmeaz: [f]: = [h], unde h : [a, b] R, h(x) = f(x) pentru orice x[a, b]. Este uor de observat c defini ia nu depinde de reprezentan i. H nzestrat cu cele dou opera ii definite mai sus devine spa iu vectorial. Fie p o func ie cu urmtoarele propriet i: p(xi) > 0
p(x i ) =1.
i =0
178
Metode Numerice
Dac f1 ~ f2 i g1 ~ g2 atunci
i=0
p ( xi ) f1 ( xi )g1 ( xi )
i=0
p ( xi ) f2 ( xi )g 2 ( xi ) .
p(x i )f (x i )g(x i )
i=0
Func ia p(x) este o func ie pondere introdus n ipoteza c aproximrile f(xi) sunt diferite ca ordin de mrime. Relativ la produsul scalar introdus, norma lui [f] este definit prin
[f ] =
p(x i )f 2 (x i ) .
i =0
n cele ce urmeaz convenim s desemnm o clas de echivalen [f] printrun reprezentant al ei f. Fie 0, 1, m un sistem de m+1 func ii liniar independente definite pe [a,b], cu m n. Convenim s numim spa iul generat de ele spa iul polinoamelor generalizate i s-l notm Hm. Deci un polinom generalizat F Hm este de forma F(x) =
c i i (x ) .
i =0
Aproximarea n medie prin metoda celor mai mici ptrate a unui element fH presupune determinarea elementului de cea mai bun aproximare F0 a lui f pe Hm. Conform defini iei elementul F0 de cea mai bun aproximare a lui f pe Hm trebuie s satisfac condi ia
2 inf p(x i )(f (x i ) F0 (x i ))2 = FH m p(x i )(f (x i ) F(x i )) i=0 i =0 n n
Determinarea coeficien ilor cj ai polinomului generalizat F0 cu ajutorul acestei rela ii este dificil. Se folosete caraterizarea elementului de cea mai bun aproximare dat n sec iunea precedent. Mai precis F0Hm este element de cea mai bun aproximare a lui f pe Hm dac i numai dac <f F0, > = 0 pentru orice Hm. Deoarece {0, 1, ..., m} este o baz a lui Hm, pentru ca F0Hm s fie element de cea mai bun aproximare a lui f pe Hm este suficient ca <f F0, j> = 0 pentru orice j = 0, 1, 2m,
179
ceea ce revine la <f, j> = c0<0, j> + c1<1, j> + + cm<m, j>, j = 0, 1,,m. Notm aij = <i, j> =
n
p(x k ) i (x k ) j (x k )
k =0 n
Pentru determinarea coeficien ilor cj ai polinomului generalizat F0 se rezolv sistemul c0a00 + c1a10 + + cmam0 = b0 c0a01 + c1a11 + + cmam1 = b1 c0a0m + c1a1m + + cmamm = bm Determinantul acestui sistem fiind un determinant Gramm (elementele sale sunt produse scalare) este diferit de zero, deoarece sistemul de func ii 0, 1, m este un sistem liniar independent. Dac j(x) = xj, j =0, 1,, m, m n, i p
m
1 , atunci n +1
F0(x) =
iar sistemul anterior devine c0(n+1) + c1
m
ci x i .
i =0
m m
x i + + cm x im
i=0 m i =0 m
f (x i )
i=0 m
c0 x i + c1 x i2 + + cm x im +1 = x i f (x i )
i=0 i =0 i =0 i =0
c0 x im + c1 x im +1 + + cm x i2m =
i=0 i =0 i=0
x im f (x i )
i =0
180
Metode Numerice
Parametrii procedurii patrate_mici de mai jos sunt: x - lista celor n +1 puncte: x0, x1, , xn y - lista ce con ine valorile func iei f n ce n +1 puncte: x0, x1, , xn (y0 = f(x0), y1 =f(x1), .,yn =f(xn))
181
Mdlina Roxana Buneci > ei:=ei-phi[j+1](x[i+1])*c[j+1] > od; > ei:=ei^2*p[i+1]; ep:=ep+ei > od; > print(`Suma patratelor erorilor (ponderate)`,evalf(ep)); > RETURN([seq(c[i],i=1..m+1)]) > end;
evalueaza i desen. Procedura desen_puncte reprezint grafic cele n+1 puncte date
ini ial: (x0, y0), (x1, y1), ..., (xn, yn). Procedura baza_normal primete drept paramentru un numr natural m i construiete lista func iilor 0, 1, m unde
> evalueaza:=proc(phi,c,a) > local i,m,fx; > m:=nops(phi);fx:=0; > for i from 1 to m do
182
> desen:=proc(f,x,y) > local n,i,d1,d2,d3,x1,x2; > n:=nops(x); > x1:=min(seq(x[i],i=1..n));x2:=max(seq(x[i],i=1..n)); > d1:=pointplot([seq([x[i],y[i]],i=1..n)],symbol=CIRCLE, color=black,thickness=15); > d2:=plot(f(t),t=x1..x2,labels=[X,Y],xtickmarks=map(evalf,x), ytickmarks=map(evalf,y)); > d3:=d1,d2; > display(d3); > end;
Exemple
> x1:=[1,2,3,4,5,6];
x1 := [ 1, 2, 3, 4, 5, 6 ]
> y1:=[0.9,0.98,1.02,1.04,1.10,1.12];
1 1 1 1 1 1 p1 := , , , , , 6 6 6 6 6 6
> desen_puncte(x1,y1);
183
1 := [ 1, x x ]
> c1:=patrate_mici(x1,y1,p1,phi1);
Factorul de conditionare, 119.4666666 Suma patratelor erorilor (ponderate) , 0.0002069841270 c1 := [ 0.8786666680 , 0.0422857140 ]
> evalueaza(phi1,c1,x);
0.8786666680 + 0.0422857140 x
> desen((t->evalueaza(phi1,c1,t)),x1,y);
> phi2:=baza_normal(2,x);
2 := [ 1, x x, x x2 ]
> c2:=patrate_mici(x1,y1,p1,phi2);
184
Metode Numerice
Factorul de conditionare, 15157.80004 Suma patratelor erorilor (ponderate) , 0.0001109523809 c2 := [ 0.8419999980 , 0.0697857165 , -0.00392857178 ]
> evalueaza(phi2,c2,x);
> phi3:=baza_normal(3,x);
3 := [ 1, x x, x x 2, x x3 ]
> c3:=patrate_mici(x1,y1,p1,phi3);
185
Pentru determinarea coeficien ilor cj ai polinomului generalizat F0 se rezolv sistemul Ax = b, cu A = Xt X iar b = Xt Y, unde
... ...
p(x n ) 0(xn)
Iar
p(x n ) 1(xn)
...
p(x n ) m(xn)
186
Metode Numerice
p(x n ) f(xn) Dac func iile 0, 1, m sunt liniar independente, atunci rang(X) = m+1
i matricea A este pozitiv definit. Ca urmare exist i este unic o matrice inferior
triunghiular L cu elementele de pe diagonala principal pozitive astfel nct A = LLt (matricea L se numete factor Cholesky). Rezolvarea sistemului Ax=b revine la rezolvarea a dou sisteme cu matrice triunghiulare: Lz =b, Ltx=z. O variant mai lent (volum de calcul mai mare), dar numeric mai stabil, de rezolvare a sistemului Ax = b este dat de descompunerea QR a matricei A, adic de reprezentarea matricei A sub forma A = QR unde Q este o matrice ortogonal (QtQ = Im+1) iar R o matrice superior triunghiular. Atunci rezolvarea sistemului Ax=b este echivalent cu rezolvarea sistemului Rx =Qtb. Dac A=XtX nu este bine condi ionat, atunci gradul de acurate e al solu iei furnizate de metoda celor mai mici ptrate poate fi foarte sczut.
187
188
Metode Numerice
Restul formulei Taylor de ordin n ataat func iei f n punctul a este func ia
Ra,n : I R definit prin Ra,n(x) = f(x) - Ta,n(x). Egalitatea f(x) = Ta,n(x) + Ra,n(x) valabil pentru orice x I se numete formul Taylor de ordin n ataat func iei f n punctul a. Se demonstreaz c
x a
lim
R a,x
(x a )
189
exist u strict cuprins ntre a i x (sau echivalent exist (0, 1) astfel nct u = a+
(x a)) cu proprietatea c
f (n +1) (u ) (x - a)n+1. (n + 1)!
Ra,n(x) =
Ne propunem s aproximm valorile derivatelor de ordinul nti i doi ale func iei f n punctul xi [a, b] cnd sunt cunoscute valorile func iei n punctele xi-1, xi, xi+1 care nu sunt neaprat echidistante, adic: xi-1 = xi h, xi+1 = xi + h. dar c variaz ntr-un interval fixat. Presupunem c f este de 3 ori derivabil i scriem formula lui Taylor de ordinul 2 pentru f n xi:
f (x) = f (x i ) + f (x i ) f (x i ) f (w x ) (x x i ) + (x x i ) 2 + (x x i )3 . 1! 2! 3!
cu wx stric cuprins ntre x i xi. nlocuim n aceast formul x = xi-1, respectiv x = xi+1 i ob inem rela iile:
f (x i 1 ) = f (x i ) + f (x i+1 ) = f (x i ) +
(7.1) (7.2)
cu u strict cuprins ntre xi-1 i xi i v strict cuprins ntre xi i xi+1. Scznd din a doua rela ie prima rela ie nmul it cu 2 ob inem:
f (x i ) = f (x i+1 ) + f ( x i ) 2 1 2f (x i1 ) + h ( + 1)
f (v) 3 3 f (u) 3 2 h + h 3! 3!
f (x i )
cu eroarea:
f (x i+1 ) + f ( x i ) 2 1 2f (x i1 ) h ( + 1)
2 f (v) f (u) 2 = + h + 1 3! + 1 3!
190
Metode Numerice
care este de ordinul lui h2 (O(h2)). Adunnd la a doua rela ie prima nmul it cu ob inem: f (v) 3 3 f (u) 3 2 f (x i +1 ) + (1 + ) f (x i ) + f (x i 1 ) + h h 3! 3! . f (x i ) = 2 h ( + 1) Putem astfel aproxima valoarea derivatei de ordinul doi al lui f n xi prin
f (x i )
cu eroarea
2 ( f (x i +1 ) (1 + ) f (x i ) + f (x i1 ) ) h 2 ( + 1)
h f (v) 2 f (u) 3 ( + 1) 3
f (x i )
f (x i +1 ) 2f (x i ) + f (x i1 ) h2
n cazul nodurilor echidistante vom art c eroare de aproximare a derivatei de ordinul doi prin formula de mai sus este de ordinul O(h2). Folosind formula lui Taylor de ordinul 3 pentru f n xi, ob inem:
( 4 ) (u) f (x i ) f (x i )h 2 f (x i ) 3 f + f (x i 1 ) = f (x i ) + ( h) + ( h) + h4 1! 2! 3! 4!
f (x i ) f (x i ) 2 f (x i ) 3 f ( 4 ) (v) 4 f (x i +1 ) = f (x i ) + h+ h + h + h 1! 2! 3! 4! rela ii rezult:
4 4 f ( ) (v) 4 f ( ) (u) 4 f (x i +1 ) + 2f (x i ) + f (x i1 ) + h + h 4! 4! f (x i ) = h2
(7.3)
(7.4)
cu u strict cuprins ntre xi-1 i xi i v strict cuprins ntre xi i xi+1. Adunnd cele dou
191
f (x i )
cu eroarea
f (x i +1 ) 2f (x i ) + f (x i1 ) h2
f ( 4 ) (v) f ( 4 ) (u) h2 = + 4! 4!
de ordinul lui h2: O(h2). Ne propunem acum s aproximm valorile derivatelor de ordinul nti i doi ale func iei f n punctul xi [a, b] cnd sunt cunoscute valorile func iei n punctele xi, xi+1, xi+2 care nu sunt neaprat echidistante, adic: xi = xi+1 h, xi+2 = xi+1 + h. cu Presupunem c f este de 3 ori derivabil i scriem formula lui Taylor de ordinul 2 ataat lui f n xi:
f (x) = f (x i ) +
f (x i ) f (x i ) f (w x ) (x x i ) + (x x i )2 + (x x i )3 . 1! 2! 3!
cu wx stric cuprins ntre x i xi. nlocuim n aceast formul x = xi+1, respectiv x = xi+2 i ob inem rela iile: f (x i +1 ) = f (x i ) + f (x i+ 2 ) = f (x i ) + f (x i ) f (x i )h 2 f (u) 3 h+ + h 1! 2! 3!
(7.5)
cu u strict cuprins ntre xi i xi+1 i v strict cuprins ntre xi i xi+2. Scznd din rela ia
192
Metode Numerice
f (x i )
f (x i+ 2 ) (1 + ) 2 f (x i +1 ) 2 + 2 f ( x i ) h ( + 1)
cu eroarea:
f (v) ( + 1) 2 f (u) ( + 1) 2 = h 3! 3!
Adunnd la rela ia (7.6) rela ia (7.5) nmul it cu -(1+) ob inem: f (x i ) = 2 f (x i+ 2 ) + f (x i ) ( + 1)f (x i +1 ) h 2 ( + 1) . f (v) f (u) ( + 1)3 h 3 + ( + 1)h 3 3! 3! +2 2 h ( + 1) Putem astfel aproxima valoarea derivatei de ordinul doi al lui f n xi prin
f (x i ) 2
f (x i+ 2 ) ( + 1)f (x i+1 ) + f (x i ) h 2 ( + 1)
cu eroarea
f (v) ( + 1) 2 f (u) 1 = + h 3! 3!
Dac nodurile sunt echidistante (adic dac = 1) se ob in urmtoarele formule de aproximare:
f (x i+ 2 ) + 4f ( x i+1 ) 3f (x i ) 2h f (x i + 2 ) 2f (x i+1 ) + f (x i ) h2
Similar ne propunem s aproximm valorile derivatelor de ordinul nti i doi ale func iei f n punctul xi [a, b] cnd sunt cunoscute valorile func iei n punctele
193
xi-2, xi-1, xi care nu sunt neaprat echidistante, adic: xi = xi-1 + h, xi-2 = xi-1 h Presupunem c f este de 3 ori derivabil i scriem formula lui Taylor de ordinul 2 pentru f n xi:
f (x i 1 ) = f (x i )
f (x i 2 ) = f (x i )
f (x i ) f (x i )h 2 f (u) 3 h+ h 1! 2! 3!
(7.7)
cu u strict cuprins ntre xi i xi+1 i v strict cuprins ntre xi i xi+2. Scznd din rela ia
( 2 + 2 ) f ( xi ) (1 + )2 f (xi1 ) + f (xi2 ) f (x )
i
h ( + 1)
cu eroarea:
2 h
Adunnd la rela ia (7.8) rela ia (7.7) nmul it cu -(1+) ob inem: f (x i ) = 2 f (x i2 ) + f (x i ) ( + 1)f (x i 1 ) h 2 ( + 1) . f (v) f (u) ( + 1)3 h 3 + ( + 1)h 3 3! 3! +2 2 h ( + 1) Putem astfel aproxima valoarea derivatei de ordinul doi al lui f n xi prin
194
Metode Numerice
f (x i ) 2
f (x i ) ( + 1)f (x i1 ) + f (x i2 ) h 2 ( + 1)
cu eroarea
3f (x i ) 4f (x i 1 ) + f ( x i 2 ) 2h
Folosind acest tip de tehnici, se poate ob ine o mare varietate de formule aproximative pentru valorile derivatelor de orice ordin n xi. Prezentm mai jos cteva astfel de formule pentru cazul nodurilor echidistante. Formul de aproximare a derivatei prin diferen e finite centrale Eroare O(h2)
O(h4) O(h2) O(h4) O(h2) O(h4)
f (x i )
f (x i )
f (x i +1 ) f (x i 1 ) 2h
f (x i+1 ) + 8f (x i+1 ) 8f (x i1 ) + f (x i 2 ) 12h
f (x i )
f (x i ) f (x i ) f (x i )
f (x i +1 ) 2f (x i ) + f (x i1 ) h2
f (x i+ 2 ) + 16f (x i +1 ) 30f (x i ) + 16f (x i1 ) f (x i 2 ) 12h 2 f (x i+ 2 ) 2f (x i +1 ) + 2f (x i1 ) f (x i 2 ) 2h 3 f (x i +3 ) + 8f (x i + 2 ) 13f (x i+1 ) + 13f (x i 1 ) 8f (x i 2 ) + f (x i3 ) 8h 3
195
Formul de aproximare a derivatei prin diferen e finite progresive f (x i ) f (x i ) f (x i ) f (x i ) f (x i ) f (x i ) f (x i+1 ) f (x i ) h f (x i+ 2 ) + 4f ( x i+1 ) 3f (x i ) 2h f (x i + 2 ) 2f (x i+1 ) + f (x i ) h2 f (x i +3 ) + 4f (x i + 2 ) 5f (x i+1 ) + 2f (x i ) h2 f (x i+3 ) 3f (x i+ 2 ) + 3f (x i+1 ) f (x i ) h3 3f (x i+ 4 ) + 14f (x i +3 ) 24f (x i+ 2 ) + 18f (x i +1 ) 5f (x i ) 2h 3
196
Metode Numerice
Exemple
> x1:=[seq(-1+2*i/5,i=0..5)];
197
-3 -1 1 3 x1 := -1, , , , , 1 5 5 5 5
> f1:=t->ln(1+t^2);
f1 := t ln( 1 + t 2 )
> y1:=[seq(evalf(f1(-1+2*i/5)),i=0..5)];
-15 -5 5 15 z1 := , , , 17 13 13 17
> z2:=[seq((D@@2)(f1)(-1+2*i/5),i=1..4)];
Cazul nodurilor echidistante: Procedur MAPLE pentru determinarea valorilor aproximative ale derivatei de ordinul 1 utiliznd o formula de aproximare prin diferen e finite centrale
Procedura de1 admite drept parametri pasul h al discretizrii i lista y ce con ine valorile y1 = f(x1), y1 = f(x1), ., yn= f(xn) (xi = xi + (i-1)h). Procedura returneaz lista aproxima iilor derivatei de ordinul I a lui f n punctele x2, x3, ..., xn-1.
> de1:=proc(h,y) > local df,i,n;
198
Metode Numerice > n:=nops(y);df:=[seq(1,i=1..n-2)]; > for i from 2 to n-1 do > df[i-1]:=(y[i+1]-y[i-1])/(2*h) > od; > RETURN(df); > end;
Procedur MAPLE pentru determinarea valorilor aproximative ale derivatei de ordinul 2 utiliznd o formula de aproximare prin diferen e finite centrale
Procedura de2 admite drept parametri drept parametri pasul h al discretizrii i lista y ce con ine valorile y1 = f(x1), y1 = f(x1), ., yn= f(xn) (xi = xi + (i-1)h). Procedura ntoarce lista aproxima iilor derivatei de ordinul al II-lea a lui f n punctele x2, x3, ..., xn-1.
> de2:=proc(h,y) > local df,i,n; > n:=nops(y);df:=[seq(1,i=1..n-2)]; > for i from 2 to n-1 do > df[i-1]:=(y[i+1]-2*y[i]+y[i-1])/(h*h) > od; > RETURN(df); > end;
Exemple
> x2:=[seq(1+2*i/5,i=0..5)];
7 9 11 13 x2 := 1, , , , , 3 5 5 5 5
> f2:=t->1/(1+t^2);
f2 := t
>
1 1 + t2
y2:=[seq(evalf(f2(1+2*i/5)),i=0..5)];
199
200
> plot([D(f2),t->de1(10^(-8),[f2(t-10^(-8)),f2(t),f2(t+10^(8))])[1]],1..3);
201
Ceea ce vedem n ultimele dou grafice se datoreaz aritmeticii virgulei mobile. Aa cum am artat n primul capitol eroarea de calcul este suma dintre eroarea de trunchiere i eroarea de rotunjire, dar de obicei una dintre acestea predomin. De obicei exist o valoare optimal a pasului de discretizare h. Pentru valori mai mici ale lui h eroarea total crete din cauza creterii erorii de rotunjire, iar pentru valori mai mari ale lui h eroarea total crete din cauza creterii erorii de trunchiere. Pentru a eviden ia acest aspect considerm procedurile eroare1 (respectiv eroare2) de mai jos care returneaz eroarea cu care este aproximat derivata de ordinul 1 (respectiv 2) a func iei f n punctul x cnd se aplic o formul de aproximare prin diferen e finite centrale (nodurile sunt x-h,x,x+h). n exemple ce urmeaz se poate face compara ie ntre situa ia n care calculul se execut simbolic (i doar rezultatele sunt afiate n virgul mobil) i situa ia n care calculul se execut n virgul mobil.
> eroare1:=proc(f,x,h) > RETURN(D(f)(x)-de1(h,[f(x-h),f(x),f(x+h)])[1]) > end;
202
Metode Numerice
> map(evalf,[seq(eroare1(f2,3/2,10^(-i)),i=1..6)]);
203
> map(evalf,[seq(eroare2(f2,3/2,10^(-i)),i=1..5)]);
204
Metode Numerice
(h) = L +
a 2k h 2k .
k =1
Atunci (h) reprezint o aproxima ie pentru L cu eroare de ordinul O(h2). n cele ce urmeaz vom arta cum s ob inem o aproxima ie pentru care eroarea s fie de de ordinul O(h2(n+1)), cu n dat. Notm
h D(n,0) = 2n
i definim
D(n,m) =
4m D ( n, m 1) D ( n 1, m 1) 4m 1
, 1 m n.
h a k,m 2n k = m +1
D(n,m) = L + O(h2(n+1)).
Cu alte cuvinte D(n,n) este o aproxima ie a lui L cu eroare de ordinul O(h2(n+1)). Pentru calculul recursiv al valorilor D(n,m) se poate folosi tabelul triunghiular: D(0,0) D(1,0) D(1,1) D(2,0) D(2,1) D(2,2) D(n,0) D(n,1) D(n,2) D(n,n)
205
h Prima coloan a acestui tabel poate fi calculat direct cu defini ia: D(n,0) = 2n
de elementul din stnga de pe aceeai linie i de pe linia de deasupra din stnga. S exemplificm aplicarea acestui procedeu pentru mbunt irea formulei de aproximare a derivatei de ordinul 1: f (x) ( h ) = Dac f este analitic avem:
2k +1) f( (h) = f (x) + ( x ) h 2k . k =1 ( 2k + 1) !
f (x + h) f (x h) . 2h
Deci putem aplica extrapolare Richardson.Vom aproxima f (x) cu D(1,1). Dar 4D (1, 0 ) D ( 0, 0 ) 3
D(1,1) =
h 4 ( h ) 2 = . 3
206
Metode Numerice
= f (x 0 ) + +
4f (x 0 ) 4 (t 6t 3 + 11t 2 6t) 4!
Notm g(t) = P4(x0 +th). Avem g (t) = P4 (x0 +th)h g (t) = P4 (x0 +th)h2. Pe de alt parte g ( t ) = f (x 0 ) + + 2f (x 0 ) 3f (x 0 ) 2 (2t 1) + (3t 6t + 2) + 2 6
= f (x 0 ) + 2f (x 0 ) + 4f (x 0 ) iar g ( t ) = +
(2t 3 9t 2 + 11t 3) 12
2f (x 0 ) 3f (x 0 ) 2+ (6t 6) + 2 6
= 2f (x 0 ) + 3f (x 0 ) ( t 1) + 4f (x 0 ) n consecin avem:
207
+ 4f (x 0 )
f (x) = f (x0+ht) 1
(2t 3 9t 2 + 11t 3) ) 12
(6t 2 18t + 11) ). 12
( 2f (x 0 ) + 3f (x 0 ) ( t 1) + 4f (x 0 ) 2 h
208
Metode Numerice
continu strict pozitiv numit pondere. Considerm x0, x1, , xn n+1 puncte distincte din intervalul [a, b], i notm yi = f(xi) pentru orice i = 0,1,n.
b
f (x)(x)dx
a
printr-o combina ie liniar de valori ale func iei f n punctele x0, x1, , xn, i.e
b a
f (x)(x)dx
n n
f (x)(x)dx Ln (x)(x)dx
a n n b b a
209
Deci notm dac Ai = (x)li ( x ) dx , atunci f (x)(x)dx A0 f(x0) + A1 f(x1) + ... + Anf(xn). n cele ce urmeaz ne propunem s calculm eroarea cu
b a
care
Ln (x)(x)dx
xi = avem
b a
Ln (x)(x)dx
=
a
n
( x ) f ( xi )
i=0 b
= f ( xi ) ( x )
i =0 a
i ob inem
b a
Ln (x)(x)dx
1
f (x)(x)dx
(t t ) (t t )(t t ) (t t ) ba n a +b ba f (xi ) ( 2 + 2 t) (t t 0) (t t i1)(t it+1 ) (t nt ) dt. 2 i =0 i 0 i i 1 i i +1 i n
1 1
210
Metode Numerice
Presupunem c f este de clas Cn+1. Pentru a evalua restul formulei inem seama c eroarea cu care polinomul de interpolare aproximeaz func ia este dat de
|f(x) Ln(x)|
unde M = sup |f(n+1)(x)|
x[a,b]
M (x x 0 )(x x1 ) (n + 1)!
(x x n ) ,
|Rn(f)|
M ba (n + 1)! 2
n+2 1
a +b ba + t (t t 0 )(t t1 ) 2 2
(t t n )dt ,
Aproximnd sub integral func ia cu polinomul de interpolare Lagrange i fcnd schimbarea de variabil x=a+ ob inem ba (n) (n) f (x)(x)dx ( b a ) Hi f ( xi ) = ( b a ) Hi f a + i n i=0 i =0 a unde
n ( n ) 1 ( 1) Hi = 0 t ( t 1) ... ( t i + 1)( t i 1) ... ( t n )dt n ( n i ) !i! n i
ba t, n
n t ( t 1) ... ( t n ) 1 ( 1) dt 0 n ( n i ) !i! t i
n i
211
i =0
Hi(
n)
Dac f este o aplica ie de clas Cn+1 are loc urmtoarea formul de evaluare a restului:
ba (n) f (x)(x)dx ( b a ) Hi f a + i n i =0 a
1 ba ( n + 1)! n De re inut c exist
n +2 n
t(t 1)(t 2)
continue
func ii
b
pentru
care
irul
a f ( x )dx .
f (x)dx (b-a) f
cu o eroare
a+b 2
( b a )2
4
x[ a,b ]
sup f ' ( x ) .
Considerm o diviziune (x0, x1, ., xn) a intervalului [a, b] cu puncte echidistante (xi = a +
ba i, i = 0, 1, 2, , n.) i aplicm pe fiecare subinterval [xi, n
212
Metode Numerice
x
x i + x i+1 2
n 1
f (x)dx
Restul (eroarea) este dat de:
b a n 1 x i + x i +1 f 2 . n i =0
a
=
f ( x ) dx
b a n 1 x i + x i+1 f 2 = n i =0
n 1 x i +1 i =0
x
n 1 i =0
b a n 1 x i + x i+1 f ( x ) dx f 2 n i=0 f ( x ) dx b a x i + x i +1 f n 2
x x
i
x i +1
i
n 1 x i +1 i =0
f ( x ) dx
b a x i + x i+1 f n 2
n 1 x i +1 i =0
x + x i +1 f ( x ) dx ( x i+1 x i ) f i 2
sup
x[x i ,x i +1 ]
n 1 i =0
( xi+1 x i )2
4
n 1
| f (x) |
sup | f (x) |
x[a,b]
( x i+1 x i )2
4
i =0 n 1
= sup | f (x) |
x[a,b]
( b a )2
4n 2
i =0
= sup | f (x) |
x[a,b]
( b a )2
4n
213
x[ a,b ]
sup f ' ( x )
x + x i+1 f i 2
xi
xi+1
Proceduri MAPLE pentru calculul valorii aproximative a unei integrale definite folosind formula dreptunghiurilor:
Procedura dreptunghiuri1 are drept parametri func ia care se integreaz, limitele de integrare, i numrul de subintervale din diviziune. Procedura ntoarce valoarea aproximativ a integralei ob inut aplicnd formula dreptunghiurilor. Procedura dreptunghiuri2 este similar, cu singura deosebire c n locul numrului
214
Metode Numerice
> dreptunghiuri2:=proc(f,a,b,eps) > local i,iab,h,h0,n;n:=floor(1/4*(b-a)^2/eps)+1; > print(`Numar de pasi`,n); h:=(b-a)/n;iab:=0;h0:=a+1/2*h; > for i from 0 to n-1 do > iab:=iab+evalf(f(h0+i*h)) > od; > iab:=iab*h; > RETURN(evalf(iab)) > end;
Exemple
> f:=(x->x^7*ln(x)+x*cos(x));
f := x x 7 ln( x ) + x cos ( x )
> evalf(int(f(x),x=2..3));
778.3339881
> dreptunghiuri1(f,2,3,5);
768.4434052
> dreptunghiuri1(f,2,3,50);
778.2346340
> dreptunghiuri1(f,2,3,500);
778.3329936
> dreptunghiuri2(f,2,3,0.01);
Numar de pasi , 26
777.9666004
215
778.3300446
> dreptunghiuri2(f,2,3,0.0001);
778.3339476
> g:=(x->exp(-x^2));
( x 2 )
g := x e
> evalf(int(g(x),x=-1..1));
1.493648266
> dreptunghiuri1(g,-1,1,5);
1.503548970
> dreptunghiuri1(g,-1,1,10);
1.496106505
> dreptunghiuri1(g,-1,1,500);
1.493649246
> dreptunghiuri2(g,-1,1,0.01);
1.493672307
> dreptunghiuri2(g,-1,1,0.001);
1.493648512
> dreptunghiuri2(g,-1,1,0.0001);
1.493648267
> with(student):
> middlesum(g(x),x=-1..1,5);
2i 4 4/5 + 5 2 e 5 i = 0 2
> evalf(middlesum(g(x),x=-1..1,5));
1.503548970
> middlebox(g(x),x=-1..1,5);
216
Metode Numerice
> middlesum(g(x),x=-1..1,10);
9 9/10 + i 5 1 e 5 i = 0 2
> evalf(middlesum(g(x),x=-1..1,10));
1.496106505
> middlebox(g(x),x=-1..1,10);
Comanda middlesum(g(x), x=a..b,n) din pachetul student ntoarce aproxima ia integralei g(x)dx ob inut prin aplicarea formulei dreptunghiurilor utiliznd n
a b
subintervale. Comanda middlebox(g(x), x=a..b,n) reprezint grafic dreptunghiurile utilizate n formulei dreptunghiurilor.
217
= Deci f (x)dx
a b
ba (f(a) +f(b)). 2
ba (f(a) +f(b)). 2
Eroarea este
( b a ) 1 (t 1)(t + 1)dt = ba 1 sup f " ( x ) | f (x)dx (f(a) +f(b)) | 2 2! x[ a,b] 8 a 1 ( b a ) 1 t 2 1dt = 1 sup f " x ( b a ) 2 1 t 2 1dt 1 sup f " ( x ) = ( ) 2! x[ a,b] 8 2! x[ a,b] 8 1 0
= sup f " ( x )
x[ a,b ] 3 3
( b a )3
8
1 0
1 t
dt = sup f " ( x )
x[ a,b ]
( b a )3
8
31 t1 t 0 3 0
= sup f " ( x )
x[ a,b ]
( b a )3 .
12
Deci | f (x)dx a b
ba (f(a) +f(b)) | 2
( b a )3
12
x[ a,b ]
sup f " ( x ) .
218
Metode Numerice
Considerm o diviziune (x0, x1, ., xn) a intervalului [a, b] cu puncte echidistante (xi = a +
xii+1 f ( x )dx
innd cont c
n 1
f (x)dx
Restul (eroarea) este dat de:
ba n
f ( a ) + f ( b ) n 1 + f ( xi ) . 2 i=1
f ( x ) dx
b a f ( a ) + f ( b ) n 1 + f ( xi ) = n 2 i=1
n 1 x i +1 i =0
f ( x ) dx
b a f ( a ) + f ( b ) n 1 + f ( xi ) n 2 i=1
n 1 x i +1 i =0
n 1 x x f ( x ) dx i +1 i ( f ( x i ) + f ( x i +1 ) ) 2 i =0
n 1 x i +1 i =0
n 1 x i +1 i =0
n 1 i =0
( xi+1 x i )3
12
n 1
sup
x[x i ,x i +1 ]
sup | f (x) |
x[a,b]
( x i+1 x i )3
12
i =0
219
= sup | f (x) |
x[a,b]
( b a )3
12n 3
i =0
( b a )3
12n 2
x[ a,b ]
sup f " ( x ) .
f(xi+1) f(xi)
xi
xi+1
Procedura trapeze1 are drept parametri func ia care se integreaz, limitele de integrare, i numrul de subintervale din diviziune. Procedura ntoarce
220
Metode Numerice
> trapeze2:=proc(f,a,b,eps) > local i,iab,h,n;n:=floor(abs((b-a)^3/(12*eps))^(1/2))+1; > print(`Numar de pasi`,n); h:=(b-a)/n;iab:=0; > for i from 1 to n-1 do > iab:=iab+evalf(f(a+i*h)) > od; > iab:=iab+(f(a)+f(b))/2;iab:=iab*h; > RETURN(evalf(iab)) > end;
Exemple
> f:=(x->x^7*ln(x)+x*cos(x));
f := x x 7 ln( x ) + x cos ( x )
> evalf(int(f(x),x=2..3));
778.3339881
> trapeze1(f,2,3,5);
798.1539466
> trapeze1(f,2,3,50);
778.5326999
> trapeze1(f,2,3,500);
778.3359754
> trapeze2(f,2,3,0.01);
221
Numar de pasi , 3
833.1348363
> trapeze2(f,2,3,0.001);
Numar de pasi , 10
783.2986759
> trapeze2(f,2,3,0.0001);
Numar de pasi , 29
778.9246586
> g:=(x->exp(-x^2));
( x 2 )
g := x e
> evalf(int(g(x),x=0..1));
0.7468241330
> trapeze1(g,0,1,5);
0.7443683397
> trapeze1(g,0,1,50);
0.7467996064
> trapeze1(g,0,1,500);
0.7468238866
> trapeze2(g,0,1,0.01);
Numar de pasi , 3
0.7399864752
> trapeze2(g,0,1,0.001);
Numar de pasi , 10
0.7462107961
> trapeze2(g,0,1,0.0001);
Numar de pasi , 29
0.7467512252
> trapeze2(g,0,1,10^(-8));
0.7468241295
> with(student): > trapezoid(g(x),x=-1..1,5);
4 1 + 2 i 5 2 ( -1 ) 2 + e e 5 5 i = 1
222
1.473924388
> trapezoid(g(x),x=-1..1,10);
9 1 + i 5 1 ( -1 ) 1 + e e 5 5 i = 1
> evalf(trapezoid(g(x),x=-1..1,10));
1.488736679 Comanda trapezoid(g(x), x=a..b,n) din pachetul student ntoarce aproxima ia integralei g(x)dx ob inut prin aplicarea formulei trapezelor utiliznd n
a b
subintervale.
a f ( x )dx
echidistante (xi = a +
ba (f(a) +4 f a + b + f(b)) 2 6
( )
Considerm o diviziune (x0, x1, ., x2n) a intervalului [a, b] cu puncte ba i, i = 0, 1, 2, , 2n.) i aplicm pe fiecare subinterval 2n
x
xii+2 f ( x )dx
innd cont c
f ( x )dx =
2n 2 x i=0 i par
x i+2 f ( x )dx , i
223
f ( x )dx
ba 6n
( b a )5
4
2880n x[ a,b]
4 sup f ( ) ( x ) .
ba 2
n
i, i = 0.. 2n).
n b a f ( a ) + f ( b ) 2 1 . + f ( xi ) f (x)dx 2n 2 i=1 a
aproximeaz
a f ( x ) dx ( n )
unde hn =
(b a)
12
h 2 sup f " ( x ) n
x[ a,b ]
ba 2
n
224
Metode Numerice
b a
= f (x)dx +
1 1 1 1 a2 h 2 + a4 h 4 + a6 h 6 + a8 h 8 +.... n n n n 4 16 64 256
i ca urmare
4 ( n + 1) ( n ) 3 = f (x)dx a b
1 5 21 a4 h 4 a6 h 6 a8 h 8 +.... n n n 4 16 64
n cazul acestei formule de aproximare eroarea de trunchiere este de ordinul O( h 4 ). n Ca i n cazul extrapolrii Richardson formula poate fi nbunt it succesiv. Pentru aceasta notm I (n,0) = (n)
i definim
I(n,m) =
4m I ( n, m 1) I ( n 1, m 1) 4m 1
, 1 m n.
Pentru calculul recursiv al valorilor I(n,m) se poate folosi tabelul triunghiular: I(0,0) I(1,0) I(1,1) I(2,0) I(2,1) I(2,2) I(n,0) I(n,1) I(n,2) I(n,n)
Prima coloan a acestui tabel poate fi calculat direct cu defini ia: I(n,0) =(n). n cazul elementelor de pe celelalte coloane se observ c fiecare dintre ele depinde de elementul din stnga de pe aceeai linie i de pe linia de deasupra din stnga.
225
ba 2k
s fie suficient de
mic (de exemplu mai mic dect 1) i facem calculul recursiv al valorilor I(k+l,m) folosind tabelul triunghiular: I(k,0) I(k+1,0) I(k+2,0) I(k+n,0) I(k+1,1) I(k+2,1) I(k+2,2) I(k+n,1) I(k+n,2)
b a
I(k+n,n) .
De obicei n este mic (n = 2 sau n = 3). ncheiem acest sectiune prezentnd o modalitate mai eficient de calcul a lui I(n,0) = (n). Se observ c
n +1 b a f ( a ) + f ( b ) 2 1 I(n+1,0) = (n+1) = + f ( a + ih n +1 ) 2 2n +1 i=1 n 1 b a f ( a ) + f ( b ) 2 1 = + f ( a + (2i 1)h n +1 ) + f ( a + (2i)h n +1 ) 2 2 2n i =1 n 2n 1 1 b a f ( a ) + f ( b ) 2 1 = + f ( a + ih n ) + f ( a + (2i 1)h n +1 ) 2 2n 2 i=1 i =1
Astfel utiliznd aceast formul recursiv calculul lui I(n+1,0) necesit doar 2n 1 evaluri ale lui f n loc de 2n+1 + 1 cte ar necesita dac s-ar aplica defini ia.
226
Metode Numerice
unde Ai = (x)li ( x ) dx pentru orice i. Dac nu se impune nici o condi ie asupra nodurilor x0, x1, , xn formula de cuadratur
b a
f (x)(x)dx
este exact pentru orice polinom de grad n. Exist ns posibilitatea alegerii a n+1 noduri astfel nct formula de cuadratur s fie exact pentru orice polinoam de grad 2n+1. Gauss a artat c cele n+1 noduri trebuie s fie rdcile unui polinom q de grad n+1 cu proprietatea c
b a
q(x)x
S presupunem c polinomul q are proprietatea de mai sus i s artm c formula de cuadratur pentru care nodurile sunt rdcinile lui q este exact pentru orice polinom f de grad 2n+1. Efectund mpr irea lui f la q rezult c exist polinoamele p i r de grade n astfel nct f(x) = p(x)q(x) + r(x). Pentru orice i fie Ai = (x)li ( x ) dx
a b
227
Formula general de cuadratur fiind exact pentru orice polinom de grad n avem
b a b a
f (x)(x)dx =
( p ( x ) q ( x ) + r ( x ) ) (x)dx
b a
Ai r ( x i )
i =0 n
Ai f ( x i ) = Ai ( p ( x i ) q ( x i ) + r ( x i ) ) =
i =0 i =0
Ai r ( x i ) .
i =0
f (x)(x)dx =
Ai f ( x i ) .
i =0
Teorema 8. (cuadratura Gauss) Fie : [a, b]R o pondere. Fie {xi}i cele
n+1 noduri ale polinomului qn+1 de grad n+1 cu prorietatea c q n +1 (x)x k (x)dx =
a b
= (x)
a
228
Metode Numerice
b a
f (x)(x)dx
Restul (eroarea) este dat de
f (x)(x)dx Ai f ( x i )
a i=0
() b 2 q ( x ) ( x ) dx ( 2n + 2 )! n +1 a
pentru un anumit (a, b). Particularizm n continuare ponderea 1. Dac (x) = 1 pe intevalul [a,b], atunci polinomele qn care satisfac condi iile din teorema precedent sunt polinoamele Legendre Ln. Expresia acestor polinoame este dat de Ln(x) = n! d n ( x a )n ( x b )n n ( 2n )! dx
Restul (eroarea) formulei de cuadratur n situa ia n care se folosesc ca noduri rdcinile lui Ln este dat de
( n!)4 ( b a )2n +1 f ( 2n ) ( ) . 3 ( 2n ) ! ( 2n + 1)
2.
Dac (x) =
1 1 x2
satisfac condi iile din teorema precedent sunt polinoamele Cebev de spe a I Tn. Polinoamele Cebev de prima spe pot fi definite recursiv prin : T0(x) = 1, T1(x) = x, Tn+2(x) = 2xTn+1(x) Tn(x), n 0, sau pot fi definite prin Tn(x) = cos(n arccos(x)). Rdcinile polinomului Cebev de grad n+1 sunt:
2i + 1 xi = cos , 0 i n. 2n + 2
n acest caz Ai =
pentru orice i = 0,..., n. n +1
229
3.
Dac (x) = 1 x 2 pe intervalul [-1, 1], atunci polinomele qn care satisfac condi iile din teorema precedent sunt polinoamele Cebev de spe a a II-a Un. Polinoamele Cebev de prima spe pot fi definite recursiv prin : U0(x) = 1, U1(x) = 2x, Un+2(x) = 2xUn+1(x) Un(x), n
0, sau pot fi definite prin Un(x) =
. Rdcinile
i +1 xi = cos , 0 i n. n+2
n acest caz Ai = 4.
i +1 sin 2 pentru orice i = 0,..., n. n+2 n+2
Dac (x) =(1-x)(1+x) (, > -1) pe intervalul (-1,1), atunci polinomele qn care satisfac condi iile din teorema precedent sunt polinoamele Jacobi.
ba b+a x. 2 2
f ( x, y ) dxdy
D
b (x)
230
Metode Numerice
(x)
unde F(x) =
j = 0, 1, , m. Aplicnd integralei
f ( x, y ) dxdy
D
unde F(xi) =
(x ) 2( x i) f ( x i , y )dy .
1 i
f ( x, y ) dxdy Ai Bijf ( x i , y j ) .
D
n mi
i =0 j=0
231
Vom ob ine valoarea aproximativ a integralei func iei f pe dreptunghiul de vrfuri (xi, yi), (xi, yi+1) , (xi+1, yi) i (xi+1, yi+1) prin aplicarea repetat a formulei trapezelor:
x
Iij =
i +1 y
yj
j+1
x k f ( x, y ) dy dx i+1 f x, y j + f x, y j+1 x i 2
((
)) (
) dx
x k x = i +1 f x, y j dx + i+1 f x, y j+1 dx x 2 xi i
((
) (
) (
) (
))
f ( x, y ) dxdy =
D
n 1m 1 i =0 j=0
Iij
n 1m 1
((
) (
) (
) (
))
ba 2n dc 2m
Dac pentru calculul integralei Iij cu i i j pare se aplic formula Simpson repetat se ob ine
x
Iij =
i+2 y x i
y j
j+ 2
f ( x, y ) dy dx
x k i+ 2 f x, y j + 4f x, y j+1 + f x, y j+ 2 dx x 6 i
((
(
) (
))
x x k x = i + 2 f x, y j dx + 4 i + 2 f x, y j+1 dx + i + 2 f x, y j+ 2 dx x x 3 xi i i
232
Metode Numerice
hk (f x i , y j + f x i + 2 , y j + f x i , y j+ 2 + f x i + 2 , y j+ 2 + 9
) ( ) ( ) ( ) + 4 ( f ( x i +1, y j ) + f ( x i +1y j+1 ) + f ( x i+ 2 , y j+1 ) + f ( x i +1, y j+ 2 ) ) + + 16f ( x i+1, y j+1 )) ( ) ( ) ( ) ( ) + 4 ( f ( x i +1, y j ) + f ( x i+1y j+1 ) + f ( x i + 2 , y j+1 ) + f ( x i +1, y j+ 2 ) ) + + 16f ( x i +1, y j+1 ))
f ( x, y ) dxdy =
D
Notm Fij = hk (f x i , y j + f x i+ 2 , y j + f x i , y j+ 2 + f x i + 2 , y j+ 2 + 9
Atunci
n 1m 1 i =0 j=0
I2i,2 j F2i,2 j
i =0 j=0
n 1m 1
Procedura dtrapeze are drept parametri func ia care se integreaz, limitele de integrare, i numerele n i m care determin punctele din re ea. Procedura returneaz valoarea aproximativ a integralei duble ob inut prin aplicarea repetat a formulei trapezelor.
> dtrapeze := proc(f, a, b, c, d, n, m) > local i, j, iabcd, h, k; > iabcd := 0; > h := (b - a)/n; > k := (d - c)/m; > for i from 0 to n - 1 do for j from 0 to m - 1 do iabcd := > iabcd + f(a + i*h, c + j*k)+ f(a + i*h, c + (j + 1)*k) + f(a + (i + 1)*h, c + j*k) + f(a + (i + 1)*h, c + (j + 1)*k) > od > od; > iabcd := 1/4*iabcd*h*k; > RETURN(evalf(iabcd)) > end;
Exemple
> f:=((x,y)->x^7*ln(x+y)+x*y*cos(x));
233
f := ( x, y ) x 7 ln( x + y ) + x y cos( x )
> evalf(int(int(f(x,y),y=1..3),x=2..3));
2418.125737
> evalf(dtrapeze(f,2,3,1,3,5,10));
2470.913760
> dtrapeze(f,2.,3.,1.,3.,5,10);
2470.913767
234
Metode Numerice
sesiunii MAPLE se face selectnd Exit din meniul File, sau prin clic pe butonul de
Foile de programare MAPLE constau n cinci tipuri de zone: text, input (intrare), ouput (ieire), 2D graphics (grafic 2D), 3D graphics (grafic 3D), i
animation (anima ie). n zona text se introduce textul necesar documentrii. Zona
input este zona n care se introduc comenzile MAPLE i este recunoscut dup promptul > prezent n marginea din stnga. ntinderea zonei input sau a zonei text este artat printr-o bar vertical n partea stng. Comutarea ntre cele dou zone se poate face cu ajutorul tastei func ionale F5 sau din bara de meniu. Zona output este generat automat la furnizarea rspunsului. Colec ia de butoane i informa ia afiat n bara de context (sub bara de instrumente) depind de con inutul curent definit tipul de zon n care se gsete cursorul. Informa ia despre foia de programare curent este afiat n bara de stare, n partea de jos a ecranului. MAPLE este un mediu interpretat. Explicm n continuare ce nseamn aceasta. Pentru ca un program (indiferent de limbajul n care este scris) s poat fi executat de calculator este necesar s fi tradus n limbaj main. Exist trei modalit i principale pentru a ob ine aceast traducere: interpretarea, asamblarea
236
Metode Numerice
i rezultatele.
MAPLE dispune de peste 2000 de func ii predefinite i comenzi. Fiecare
comand inert i rolul ei este doar de afiare matematic a unei expresii. Cele mai
multe comenzi MAPLE necesit o list de parametri la intrare. Aceast list poate con ine de exemplu, numere, expresii, mul imi, etc., sau poate s nu con in nici un parametru. Indiferent de numrul de parametri specifica i, ei trebuie inclui ntre paranteze rotunde (). Toate comenzile au numr minim de parametri de tip precizat, de cele mai multe ori ntr-o ordine precizat. Multe comenzi pot fi utilizate cu un numr de parametri mai mare strict dect acest numr minim de parametri. Aceti extra parametri reprezint de obicei op iuni de control al func ionrii comenzii respective. Comenzile MAPLE pot fi folosite ca parametri. Acestea sunt evaluate i rezultatele lor sunt inserate n lista de parametri. Comenzile MAPLE se pot clasifica n trei categorii: 1. 2. Comenzi care se ncarc automat la deschiderea unei sesiuni Comenzi din biblioteca extins. nainte de a le folosi acestea trebuie MAPLE. Acestea pot fi apelate direct aa cum s-a precizat mai sus. mai nti ncrcate n memorie cu ajutorul comenzii readlib sub forma > readlib(nume_comanda); 3.
Comenzi care apar in unor pachete specializate. Exist dou prin specificarea pachetului sub forma:
237
> with(nume_pachet); are ca urmare ncrcarea n memorie i afiarea n zona ouput a tuturor comenzilor din pachet. Pn la ncheierea sesiunii MAPLE acestea pot fi utilizate ca i cele din prima categorie. Din cele de mai sus rezult c nu este ntotdeauna suficient s se cunoasc numele unei comenzii. Uneori ea trebuie ncrcat din bibliotec sau dintr-un pachet. Dac nu s-a fcut acest lucru i s-a introdus comanda, MAPLE nu genereaz un mesaj de eroare, ci afieaz n zona output, comanda introdus n zona input. n acest caz trebuie verificat dac este scris corect comanda (inclusiv dac literele mari i mici se potrivesc), sau trebuie ncrcat n memorie. Informa ii asupra modului corect de introducere a unei comenzi se pot ob ine cu ajutorul comenzii
help. Exist mai mute modalit i de utilizare a acestei comenzi. Este recomandabil,
urmtoarea form: > ? nume_comanda O comand de forma:
>?
afieaz informa ii generale despre structura help-ului. Alt variant presupune un apel de forma > help(`nume_comanda`); De remarcat faptul c numele comenzii este inclus ntre apostrofuri ntoarse (backquotes).
238
Metode Numerice
* / ** sau ^
Tabelul precedent con ine operatorii aritmetici de baz din MAPLE. Preceden a operatorilor este aceeai ca n majoritatea limbajelor de programare. Mai nti sunt evaluate expresiile din paranteze. n lista urmtoare prioritatea cade de sus n jos: 1. (operator unar) 2. **, ^ 3. *, / 4. +, -(scdere) De remarcat faptul c exponen ierea succesiv nu e valid. Astfel MAPLE nu poate evalua x^y^z. O expresie de acest fel trebuie introdus sub forma x^(y^z). Ori de cte ori exist ambiguit i trebuie utilizate ( ). Urmtorul tabel prezint func iile de baz din MAPLE ce pot interveni n expresiile aritmetice. Nota ie MAPLE abs(x) iquo(x,y) irem(x,y) trunc(x) Semnifica ie |x| (modulul) partea ntreag a mpr irii x/y restul mpr irii lui x la y cel mai mare numr ntreg x, dac x 0, sau cel mai mic numr ntreg x, dac x < 0 frac(x) round(x) floor(x) ceil(x) x-trunc(x) rotunjete pe x la cel mai apropiat ntreg cel mai mare numr ntreg x cel mai mic numr ntreg x
239
sqrt(x) sau x^(1/2) exp(x) ln(x) sau log(x) sin(x) cos(x) tan(x) ex
x
lnx (logaritm natural) sinx cosx tgx
Facem cteva remarci asupra func iilor irem i iqou (deoarece nu respect ntocmai teorema mpr irii cu rest). Astfel dac m i n sunt dou numere ntregi, n este nenul i r este numrul ntreg returnat de irem, atunci este satisfcut rela ia: m = n*q + r, abs(r) < abs(n) i m*r 0. Dac m i n nu sunt amndou numere ntregi, atunci irem rmne neevaluat. Ambele func ii pot fi utilizate i cu cte trei parametri. Dac al treilea parametru este prezent n func ia irem, atunci lui i se asigneaz ctul, iar n cazul func iei iquo i se asigneaz restul mpr irii. Exemple:
> irem(29,4,'q');
1
> q;
7
> iquo(29,4,'r');
7
> r;
1
> irem(-29,4);
-1
> irem(29,-4);
1
> irem(-29,-4);
-1
> iquo(-29,4);
-7
> iquo(29,-4);
240
Metode Numerice
-7
> iquo(-29,-4);
7 Func iile rem i quo se aplic polinoamelor i reprezint analoagele func iilor irem i iquo. Acestea cer obligatoriu al treilea parametru ce indic nedeterminata n raport cu care se consider polinomul. Op ional admit al patrulea parametru, cu acelai rol ca parametru 3 din func iile irem i iquo. Asfel dac a i b sunt dou polinoame, b este nenul, r restul returnat de rem i q este ctul returnat de quo, atunci este satisfcut rela ia: a = b*q + r, grad(r) < grad(n) Exemple:
> rem(x^5+2*x+1, x^2+x+1, x, 'q');
x
> q;
x3 x2 + 1
> quo(x^5+2*x+1, x^2+x+1, x);
x3 x2 + 1
> quo(x^5+2*y+z, x^2+x+1, x,'r');
x3 x2 + 1
> r;
2y+z1x Func ia factorial(k) calculeaz k! (k factorial, 12k). Acelai efect n are i k!, dup cum rezult din exemplele de mai jos:
> factorial(4);
24
> 4!;
24
> 6!;
720
> factorial(factorial(3))=3!!;
720 = 720 Tabelul de mai jos con ine cteva constante MAPLE: Constant Nota ia matematic
241
constanta lui Euler adevr, n cazul evalurii booleene fals, n cazul evalurii booleene
Numrul complex i (i2 = -1) este desemnat n MAPLE prin I. De re inut c pi (scris cu liter mic) se refer la litera greceasc . Tipul booleean n MAPLE are dou valori: true i false. Expresiile booleene (logice) pot fi formate cu ajutorul operatorilor de compara ie i operatorilor logici. Urmtoarele dou tabele con in aceti operatori. Operator egal diferit mai mare mai mare egal mai mic mai mic egal Operator Nega ie (non) unar Conjunc ie (i) disjunc ie (sau) Simbol = <> > >= < <= Simbol not and or Exemple x=y x<>y x>y x>=y x<y x<=y Exemple not x x and y x or y
Ordinea de efectuare a opera iilor este: not, and, or. n MAPLE exist expresii similare cu expresiile din C formate cu operatorul virgul. Astfel o secven de expresii n MAPLE este un ir de expresii separate ntre ele prin virgul. Cele mai multe func ii din MAPLE cer la intrare o secven de expresii, i ntorc un rezultat ce con ine o secven de instruc iuni. Cel mai simplu mod de a crea o secven de instruc iuni este:
> 1,2,3,4,5; 242
Metode Numerice
1, 2 , 3, 4 , 5
> a=1,b=a+2,c+2;
a = 1, b = a + 2 , c + 2
Alternativ, exist alte dou moduri de a crea secven e de instruc iuni n MAPLE: cu ajutorul operatorului $ sau cu ajutorul comenzii seq. Urmtoarele exemple sunt edificatoare:
> a$5;
a, a , a, a , a
> $2..7;
2, 3 , 4, 5, 6 , 7
> i^2$i=1..4;
1, 4, 9, 16
> seq(i!,i=1..4);
1, 2, 6, 24
> seq(i!!,i=1..4);
1, 2, 720, 620448401733239439360000
243
> 123;
123
> -6789;
-6789
> 123456789123456789012;
123456789123456789012
2 3
> 6/7;
6 7
> 4/6;
2 3
> 4/2;
2
> -39/13;
-3 Se observ c MAPLE face automat simplificarea frac iilor. Reprezentarea unei constante n virgul mobil con ine n general cmpurile urmtoare:
244
Metode Numerice
Se poate omite partea ntreag sau partea frac ionar, dar nu amndou. De asemenea, se poate omite punctul zecimal sau litera e(E) i exponentul, dar nu amndou.
2.3
> 678.96e-9;
0.67896 10 -6
> .1234;
0.1234
> 123E56;
0.123 10 59
> 1.;
1.
Constante n virgul mobil pot fi ob inute i cu comanda Float. Aceast comand are forma Float(mantisa,exponent);
0.123 10 59 Expresiile aritmetice cu operanzi constante ntregi sau ra ionale sunt evaluate exact n MAPLE (rezultatul este o constant ra ional sau o constant ntreag). Exemple:
> 1/3+4/5;
17 15
> 1/3+8;
25 3
> 1/3+2/3;
1
245
n cazul n care expresia con ine constante n virgul mobil, atunci constantele ntregi i cele ra ionale (care apar eventual n expresie) sunt convertite n virgul mobil (sunt aproximate cu constante n virgul mobil). Rezultatul expresiei este n acest caz o constant n virgul mobil. Exemple:
> 1/3.+4/5;
1.133333333
> 1./3+8;
8.333333333
> 1/3+2/3.;
1.000000000
> 20+45.75e-2;
20.4575 Orice numr real nenul x poate fi scris sub form normalizat, n baza 10: x = m 10p cu 0,1m<1, (m = mantisa). n calcule se re in de obicei un numr finit de cifre zecimale ale mantisei. Numrul de cifre care se re in se numete numr de cifre
0.1428571429
> Digits:=20;
Digits := 20
> 1./7;
0.14285714285714285714 Deci MAPLE poate lucra n virgul mobil cu o precizie teoretic infinit. Pentru a determina evaluarea unei expresii n virgul mobil (chiar dac to i operanzii din expresie sunt ntregi sau ra ionali) se poate folosi comanda evalf. evalf(expresie) determin evaluarea expresiei la o valoare n virgul mobil, cu numrul de cifre semnificative stabilit de variabila Digits.
246
Metode Numerice
evalf(expresie,n) determin evaluarea expresiei la o valoare n virgul mobil, utiliznd n de cifre semnificative (valoarea variabilei Digits nu este afectat). Exemple:
> evalf(1/7);
0.1428571429
> evalf(1/7,20);
0.14285714285714285714
> evalf(Pi);
3.141592654
> evalf(Pi,30);
eval evalueaz n ntregime o expresie evala evalueaz algebric o expresie evalf evalueaz numeric o expresie evalb evalueaz boolean o expresie evalm evalueaz matriceal o expresie evalc evalueaz n mul imea numerelor complexe o expresie
n MAPLE un ir de caractere (string) const dintr-o succesiune de caractere cuprinse ntre apostrofuri ntoarse (backquote) (`) sau ntre ghilimele (). Operatorul de concatenare pentru irurile de caractere n MAPLE este || (de asemenea se poate utiliza comanda cat). Exemple:
> `Acesta este un string in MAPLE`;
1+2=?
> `acesta este`||` un string`;
caracter este un caracter alfabetic (A-Z, a-z). Lungimea maxim a unui identificator este dependent de sistem . MAPLE este case-sensitive, ceea ce nsemn c identificatorul nume este diferit de identificatorul Nume. MAPLE con ine un numr de identificatori predefini i (identificatori rezerva i). O list a acestora poate fi ob inut cu comanda
> ?ininame
sau
> help(`ininame`);
f (x )dx f (n )
n =1
int(f(x),x=a..b)
integral definit
a f ( x ) dx f (k )
k =a b
sum(f(k),k=a..b) sum de la a la b
limit(f(x), x=a)
x a
lim f ( x )
Diff, Int, Sum, Limit reprezint comenzile inerte corespunztoare. Comanda limit admite un al treilea parametru op ional (dac acesta este left se calculeaz limita la stnga, dac este right se calculeaz limita la dreapta
248
Metode Numerice
Exemple:
> diff(sin(x),x);
cos( x )
> diff(cox(x),y);
0
> diff(x*sin(cos(x)),x);
1 x
> Diff(ln(x),x);
d ln( x ) dx
> Diff(ln(x),x) = diff(ln(x),x);
d 1 ln( x ) = dx x
> Diff(sin(x)*tan(y),x,y)= diff(sin(x)*tan(y),x,y);
cos( x )
> Int( sin(x), x );
sin( x ) dx
> int( sin(x), x=0..Pi );
2
> Int( x^2*ln(x), x=1..3 )=int( x^2*ln(x), x=1..3 );
3
x 2 ln( x ) dx = 9 ln( 3 ) 26 9 1
> Int( Int(exp(-x^2-y^2), x=0..infinity ), y=0..infinity)
exp(-x^2-y^2), x=0..infinity ), y=0..infinity); =int(int(
249
0
> sum(k^2,k=1..4);
( x 2 y 2 ) e dx d y = 4 0 30
> Sum(k^2,k=1..4);
k2
k=1
> Sum(k^2,k=1..n)=sum(k^2,k=1..n);
k=1
k2 =
( n + 1 )3 ( n + 1 )2 n 1 + + 6 6 3 2
> sum(1/k^2,k=1..infinity);
2 6
> Sum(1/k!,k=0..infinity)=sum(1/k!,k=0..infinity);
k=0
1 =e k! 1
x0
lim
sin( x ) x
x0
lim
sin( x ) =1 x
x0
lim
cos( 2 x ) 1 = -2 x2
lim e x =
lim
ex = 0
250
Metode Numerice
x0
lim
1 = undefined x 1 = x 1 = x
x 0-
lim
x 0+
lim
X 8 2 X 4 Y 4 + Y8
> factor(X^6-Y^6);
( X Y ) ( X + Y ) ( X 2 + X Y + Y2 ) ( X 2 X Y + Y2 )
> simplify((X^6-Y^6)/(X^2+X*Y+Y^2));
X 4 Y X 3 + Y3 X Y4
251
[ animate, animate3d, animatecurve, arrow, changecoords , complexplot, complexplot3d, conformal , conformal3d , contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, display3d, fieldplot, fieldplot3d, gradplot, gradplot3d, graphplot3d, implicitplot, implicitplot3d, inequal, interactive, listcontplot, listcontplot3d, listdensityplot, listplot, listplot3d, loglogplot, logplot, matrixplot, odeplot, pareto, plotcompare, pointplot, pointplot3d, polarplot, polygonplot, polygonplot3d, polyhedra_supported , polyhedraplot, replot, rootlocus , semilogplot, setoptions, setoptions3d, spacecurve , sparsematrixplot , sphereplot , surfdata , textplot, textplot3d, tubeplot ] Prezentm cteva exemple cu comenzile plot, plot3d i animate3d. Plot este destinat reprezentrilor grafice n plan i poate fi folosit sub mai multe forme. Prezentm de fiecare dat numrul minim de parametri ceru i. Nota ie MAPLE plot(f(x),x = a..b) plot([f(x),g(x),],x = a..b) plot([f(t),g(t),t = a..b]) Curba/Curbele reprezentate y = f(x), x[a,b] y = f(x),y = g(x), x[a,b]
x = f (t ) t [a , b ] y = g (t )
Reprezentarea grafic se face conform cu op iunile (de stil, culoare, axe, coordonate, rezolu ie ) indicate n comand sau n raport cu cele implicite. Unele din aceste op iuni se pot stabili i din meniul contextual: se introduce comanda de reprezentare grafic a curbei, iar apoi se selecteaz din bara de context, sau prin clic cu butonul drept al mouse-ului pe grafic, op iunile dorite. Implicit se folosesc coordonatele carteziene. Dac se dorete utilizarea altor coordonate, acestea trebuie specificate, prin introducerea n lista de op iuni sub forma coords = nume_coordonate. O op iune de forma discont=true, determin apelul comenzii Discont pentru determinarea punctelor de discontinuitate a func iei ce se reprezint grafic. Exemple:
> plot(sin(x)*ln(x), x=Pi..8*Pi, color=black);
252
Metode Numerice
>plot([sin(t),cos(t),t=0..2*Pi],title=`cerc`,color=black);
253
>plot(sin(x)/x, x=-3*Pi..3*Pi,discont=true,color=black);
Comanda plot3d este destinat reprezentrii grafice a suprafe elor n spa iu tridimensional. Ca i n cazul comenzii plot reprezentarea grafic se face conform cu op iunile indicate n comand sau n raport cu cele implicite. Unele din aceste op iuni se pot stabili i din meniul contextual. Comanda plot3d poate fi folosit sub mai multe forme. Prezentm de fiecare dat numrul minim de parametri ceru i. Nota ie MAPLE plot3d(f(x,y),x = a..b,y=c..d) Suprafa a/Suprafe ele reprezentate z = f(x,y), (x,y)[a,b][c,d] plot({f(x,y),g(x,y)},x = a..b,y=c..d) z = f(x,y),z=g(x,y) (x,y)[a,b][c,d] plot([f(u,v),g(u,v),h(u,v)],u=a..b,v=c.. d)
x = f (u , v ) y = g (u , v ) z = h (u, v )
254
Metode Numerice
Exemple
>plot3d(cos(x)*sin(y),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi);
>plot3d([v*cos(u),v*sin(u),v*ln(u)],u=Pi..4*Pi,v=0..1);
Comenzile animate i animate3d sunt destinate anima iei n plan i spa iu. Comanda animate3d(f(x,y,t),x=a..b,y=b..c,t=t1..t2) creeaz anima ie cu ajutorul cadrelor ob inute prin reprezentarea grafic a suprafe elor zt = f(x,y,t), (x,y)[a,b][c,d] pentru valori ale lui t n intervalul [t1,t2]. Numrul de cadre poate fi stabilit cu ajutorul op iunii frames (implicit sunt 8). Exemplu:
>animate3d(cos(x)*sin(t*y),x=-Pi..Pi,y=-Pi..Pi,t=1..2);
255
sin( )
> eval(sin(x), x=Pi);
0 Comanda >nops(expr); ntoarce numrul de operanzi ai expresiei expr Comanda >op(i, expr);
256
Metode Numerice
extrage un operand din expresia expr: dac i > 0, comanda extrage cel de al i-lea operand dac i < 0, comanda extrage cel de al nops(expr) +i +1 operand n cazul func iilor, dac i = 0, comanda returneaz numele func iei dac i > nops(expr) sau i < -nops(expr) se genereaz mesaj de eroare
Comanda >op(i..j, expr); ntoarce irul operanzilor de la operandul i la operandul j. Comanda >subsop(i=expr1, expr); ntoarce expresia ob inut prin nlocuirea unui operand al expresiei expr cu expresia expr1 dac i > 0, se nlocuiete cel de al i-lea operand dac i < 0, se nlocuiete cel de al nops(expr) +i +1 operand
Comanda >subsop(i1=expr1, i2=expr2,..., ik=exprk, expr); ntoarce expresia ob inut prin nlocuirea simultan a operanzilor expresiei expr desemna i de i1, i2, ... ik (n acelai mod ca mai sus) cu expresiile expri1, ..., exprik (respectiv). Exemple:
> expr:=u*v+cos(u*v)/exp(-u^2);
expr := u v +
> nops(expr);
cos( u v ) e
2 ( u )
2
> op(1,expr);
uv
> op(2,expr);
cos( u v ) e
> subsop(2=u+v,expr);
2 ( u )
257
uv+u+v
> expr;
uv+
cos( u v ) e
2 ( u )
Definirea unei legturi fuc ionale n MAPLE se face sub forma >nume_functie: (lista variabile) -> expresie; Comanda >nume_functie(lista argumente curente); ntoarce valoarea func iei nume_func ie pentru argumentele precizate. Operatorii pentru adunarea, nmul irea, compunerea func iilor sunt +, *, respectiv, @. Operatorul pentru compunere repetat este @@. Astfel dac f este o func ie i n un numr natural, atunci dac n > 0, f @@ n reprezint compunerea de n ori a func iei f cu ea nsi. dac n = 0, f @@ 0 reprezint func ia identic dac n < 0 i f este inversabil, atunci f @@ n reprezint compunerea de -n ori a inversei func iei f cu ea nsi (inversa func ie este dat de invfunc[f]). Comanda >unapply(expr, x); ntoarce func ia x -> expr, iar comanda >unapply(expr, x, y, ...); ntoarce func ia (x,y, ...) -> expr Exemple:
> f:=x->x^3+cos(x)*x^(1/3)+exp(-x^2);
( 1 /3 ) 2 ( x )
f := x x3 + cos( x ) x
> nops(f);
+e
1
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
258
Metode Numerice
2 2 ( x y )
g := ( x, y ) x2 e
> nops(g);
+ cos( x ) sin( y )
1
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
h := ( u, v, w ) sin( u ) cos( w ) v + u
> f(1);
( -1 )
1 + cos( 1 ) + e
> f(1.);
1.908181747
> evalf(f(1));
1.908181747
> evalf(f(1),50);
1.9081817470395820389964603776044374711781215516497
> f(alpha);
2 ( )
3 + cos( )
> g(Pi/2,3);
( 1 /3 )
+e
1 2 e 4
> evalf(g(Pi/2,3));
2 4 9
0.00002582324018
> g(2,3);
( -13 )
4e
> g(2,3.);
+ cos( 2 ) sin( 3 )
-0.05871760362
> evalf(g(2,3));
-0.05871760362
> h(Pi/3,2,Pi/4);
259
3 2
> evalf(h(Pi/3,2,Pi/4));
2.271942423
> h(alpha,beta,gamma);
sin( ) cos( ) +
> h(alpha,3,Pi/4);
3 sin( ) 2 + 2
> expresie:=u*v^2+cos(Pi/u*v)/u^(1/2);
v cos u expresie := u v 2 + u
> f1:=unapply(expresie,u);
v cos u f1 := u u v2 + u
> f1(1);
v 2 + cos( v )
> f2:=unapply(expresie,u,v);
v cos u f2 := ( u, v ) u v 2 + u
> f2(1,2/3);
-1 18
> f2(alpha, 2);
2 cos 4+
> f3:=unapply(expresie,v);
v cos u f3 := v u v2 + u
> f3(1);
260
Metode Numerice
cos u u+ u
A.6.2. Liste
Listele (lists) n MAPLE sunt iruri ordonate de expresii, separate ntre ele
prin virgul i incluse ntre paranteze drepte []. Ordinea expresiilor este dat de pozi ia n care apar n list. Dac L este o list L[i] desemneaz elementul de pe pozi ia i. Lista vid este desemnat prin []. Se pot efectua urmtoarele opera ii cu liste:
Exemple:
> L:=[1,-1,1,2,3,-1,1,1];
L := [ 1, -1, 1, 2, 3, -1, 1, 1 ]
> nops(L);
8
> L[2];
-1
> op(2,L);
-1
> op(3..6,L);
1, 2, 3, -1
> L[3..6];
[ 1, 2, 3, -1 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
261
> L1:=[5,op(L)];
L1 := [ 5, 1, -1, 1, 2, 3, -1, 1, 1 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> L2:=[op(L),5];
L2 := [ 1, -1, 1, 2, 3, -1, 1, 1, 5 ]
> L;
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> L[3]:=8;
L3 := 8
> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> subsop(4=10,L);
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> L3:=subsop(6=NULL,L);
L3 := [ 1, -1, 8, 2, 3, 1, 1 ]
> L3;
[ 1, -1, 8, 2, 3, 1, 1 ]
> L;
[ 1, -1, 8, 2, 3, -1, 1, 1 ]
> op(-3,L);
-1
Mul imea vid este desemnat prin {}. Se pot efectua urmtoarele opera ii cu
mul imi:
262
Metode Numerice
Exemple:
> A:={1,2,-3,-7,12};
A := { -7, -3, 1, 2, 12 }
> nops(A);
5
> op(3,A);
1
> B:={0,-1,2,-7,11,15,16};
{ -7, -3, 1, 2, 12 }
> {-7, -3, 1, 2, 12};
{ -7, -3, 1, 2, 12 }
> B;
{ -7, 2 }
> B minus A;
{ }
263
A.6.4. Tablouri
Tablourile (tables) n MAPLE sunt structuri de date ai cror membri sunt
indexa i.
Exemple:
> t:=table([(culoare1)=red,(culoare2)=green, (culoare3)=blue]);
green
Un tablou cu zero sau mai multe dimensiuni, pentru care fiecare dimensiune are domeniu ntreg se numete n MAPLE array. Pentru a crea un array se poate apela func ia array sub forma:
v := array( 1 .. 4, [ ] )
> v[2];
v2
> v[2]:=3;
v2 := 3
> evalm(v);
[ v1, 3, v3, v4 ]
> A := array(1..2,1..2);
A := array( 1 .. 2, 1 .. 2, [ ] )
> A[1,2] := x;
A1, 2 := x
> A[1,1];
A1 , 1
> A[1,2];
264
A1, 1 A 2, 1
x A2, 2
1 A := x
x x2
Vectorii i matricele pot fi crea i i cu comenzile vector i matrix din pachetul linalg. Vectorii n MAPLE sunt tablouri unidimensionale cu indexate de la 1. Comanda
x := [ 1, -1, 0 ]
> x[1];
1
> y:=vector(3);
y := array( 1 .. 3, [ ] )
> y[1];
y1
> M:=matrix(3,2,[[1,2],[3,4],[5,6]]);
1 M := 3 5
> M[1,2];
2 4 6
265
Comanda
f := x x 3 + cos( x ) x
2 2 ( x y )
+e
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
g := ( x, y ) x2 e
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
+ cos( x ) sin( y )
h := ( u, v, w ) sin( u ) cos( w ) v + u
> with(linalg): > x:=vector(3,[1,-1,0]);
x := [ 1, -1, 0 ]
> map(f,x);
( -1 ) ( 1/ 3 ) ( -1 )
[ 1 + cos( 1 ) + e
> map(g,x,Pi/3);
, 1 + cos( 1 ) ( -1 )
+e
, 1]
2 1 2 1 9 9 1 1 3 e + cos( 1 ) 3 , e + cos( 1 ) 3 , 2 2 2
> map(h,x,2,Pi/2);
[ 1, -1, 0 ]
> map(h,x,2,Pi/4); 266
Metode Numerice
[ sin( 1 ) 2 + 1, sin( 1 ) 2 1, 0 ]
> M:={Pi,-Pi,Pi/2,-Pi/2};
M := { ,
> map(h,M,3,Pi/3);
, , } 2 2
{ ,
> map2(g,Pi/3, x);
3 3 , + , } 2 2 2 2
2 2 2 1 1 2 1 9 1 9 1 2 1 1 2 9 e + sin( 1 ), e sin( 1 ), e 9 2 9 2 9
[ 2, 2 , 2 ]
> map(h,2, x,Pi/4);
1 sin( 2 ) 2 x + 2 2
> M:={Pi,-Pi,Pi/2,-Pi/2};
M := { ,
> map(h,3,M,Pi/3);
, , } 2 2
1 sin( 3 ) { , , , } + 3 2 2 2
> expr:=u*v+cos(u*v)/exp(-u^2);
expr := u v +
> applyop(f,1,expr);
cos( u v ) e
2 ( u )
u 3 v3 + cos( u v ) ( u v )
> applyop(g,1,expr,Pi/3);
( 1/3 )
+e
2 2 ( u v )
cos( u v ) e
2 ( u )
u 2 v2 e
2 2 2 u v 9
1 cos( u v ) cos( u v ) 3 + 2 2 ( u ) e
> applyop(g,2,expr,0);
267
uv+
cos( u v ) 2 e (e
2 ( u )
uv+
> L:=[1,-1,1,2,3,-1,1,1];
cos( u v ) e
2 ( u )
L := [ 1, -1, 1, 2, 3, -1, 1, 1 ]
> op(1,L);
1
> applyop(f,1,L);
( -1 )
[ 1 + cos( 1 ) + e
> op(3,L);
, -1, 1, 2, 3, -1, 1, 1 ] 1
> applyop(f,3,L);
[ 1, -1, 1 + cos( 1 ) + e
> applyop(g,3,L, Pi/2);
( -1 )
, 2, 3, -1, 1, 1 ]
[ 1, -1, e
> applyop(h,3,L, 2,Pi/3);
2 ( 1 )
, 2, 3, -1, 1, 1 ]
[ 1, -1, 1, 2, 3, -1, 1, 1 ]
> applyop(h,-1,L, 2,Pi/3);
268
Metode Numerice
Decizia are forma: if condi ie then instruc iuni1 else instruc iuni2 fi; if condi ie then instruc iuni1 else instruc iuni2 end if;
Da
condi ie
Nu Instruc iuni2
Instruc iuni1
Condi ia este o expresie logic (format cu operatori logici sau rela ionali). Modul de execu ie al deciziei (precum rezult din subschema logic de mai sus) este urmtorul:
1. 2. 3.
se evalueaz condi ia dac rezultatul este adevrat se execut instruc iuni1, n caz contrar se execut instruc iuni2. se trece la comanda care urmeaz dup decizie
269
condi ie
instruc iuni
Nu
1. se evalueaz condi ia 2. dac rezultatul este adevrat se execut instruc iuni 3. se trece la comanda care urmeaz dup decizie Un extra element elif ( innd loc de else+if) poate fi adugat n decizie, ob innd:
if/then/elif/then/else/fi
Exemple:
> a := 3; b := 7;
a := 3 b := 7
> if (a > b) then a else b fi;
7
> if (a > b) then c:=7 fi; > c;
c
> if (a > b) then c:=7 elif (a<b) then c:=9 fi;
c := 9 Exist dou instruc iuni repetitive n MAPLE: for i while. For are mai multe forme:
(1)
for i from ei by p to ef do instruc iuni od; for i from ei by p to ef do instruc iuni end do;
unde i este variabila de contorizare, p este pasul cu care se face incrementarea (decrementarea), iar ei (respectiv ef ) este o expresie care determin valoarea
270
Metode Numerice
ini ial (respectiv final) a contorului. Modul de execu ie al acestei instruc iuni este urmtorul:
1. 2.
se execut atribuirea i : = ei se evalueaz condi ia i ef dac p > 0 (sau i ef dac p < 0), i dac este ndeplinit aceast condi ie se trece la pasul 3, altfel se trece la pasul 5
3. 4. 5.
se execut instruc iuni se execut atribuirea i := i + p se execut comanda care urmeaz dup for
i := ei
i ef
Nu
Da
instruc iuni
i: = i + p
i := ei
i ef
Nu
Da
instruc iuni
i: = i + p
Construc iile from ei i by p pot lipsi, caz n care ei se ia 1 i pasul se consider egal cu 1.
271
(2)
for i from ei by p while condi ie do instruc iuni od; for i from ei by p while condi ie do instruc iuni end do;
Modul de execu ie al acestei instruc iuni este urmtorul: 1. 2. 3. 4. 5. se execut atribuirea i : = ei se evalueaz condi ia trecut dup while, i dac este ndeplinit, se trece la pasul 3, altfel se trece la pasul 5 se execut instruc iuni se execut atribuirea i := i + p se execut comanda care urmeaz dup for
condi ie Nu
Da
instruc iuni
i: = i + p
Ca i nainte construc iile from ei i by p poate lipsi, caz n care ei se ia 1, iar pasul se consider egal cu 1. Condi ia este dat printr-o expresie boolean. Ambele clauze to i while pot fi prezente n instruc iunea for:
(3)
n acest caz
for i from ei by p to ef while condi ie do instruc iuni od; for i from ei by p to ef while condi ie do instruc iuni end do;
1. se execut atribuirea i : = ei 2. se evalueaz condi ia i ef dac p > 0 (sau i ef dac p < 0), i condi ia trecut dup while; dac amndou sunt ndeplinite se trece la pasul 3, altfel se trece la pasul 5 3. se execut instruc iuni 4. se execut atribuirea i := i + p 5. se execut comanda care urmeaz dup for
272
Metode Numerice
n cazul urmtoarei instruc iuni for contorul i parcurge toate elementele unei liste sau unei mul imi (expr):
(4)
for i in expr while condi ie do instruc iuni od; for i in expr while condi ie do instruc iuni end do;
Exemple:
> for i from 6 by 2 to 10 do print(i) od;
6 8 10
> suma := 0;
suma := 0
> for i from 11 by 2 while i < 15 do suma := suma + i od;
suma := 11 suma := 24
> L:=[1,5,3];
L := [ 1, 5, 3 ]
> suma:=0;
suma := 0
> for z in L do suma:=suma+z od;
while condi ie do instruc iuni od; while condi ie do instruc iuni end do;
Testul pentru repetarea calculelor se face naintea execu iei grupului de comenzi care trebuie repetate. Dac este ndeplinit condi ia, se execut instruc iunile dup care se reevalueaz condi ia. n caz contrar, se trece la comanda care urmeaz dup ciclul cu test ini ial. Subschema logic echivalent este urmtoarea:
273
condi ie Nu
Da
instruc iuni
x := 234
> while x>0 do x:=iquo(x,10,'r');print(r) od;
x := 23 4 x := 2 3 x := 0 2
274
Metode Numerice
end;
n variantele mai noi de Maple end de la sfrit se va nlocui cu end proc. Nu toate elementele de mai sus sunt obligatorii. Dac este necesar ca procedura s ntoarc o valoare, se poate folosi apelul
RETURN(v)
n irul de instruc iuni din corpul procedurii. Parametrii care apar n scrierea unei proceduri se numesc parametrii
formali, ei avnd un rol descriptiv (un parametru formal este o variabil al crei
nume este cunoscut, dar al crei con inut nu este precizat dect n momentul execu iei). n cadrul listei, parametrii formali sunt separa i prin virgul. Numele procedurii (nume) este un identificator MAPLE. Apelul unei proceduri se face cu comanda: nume (list parametrii actuali) parametrii actuali fiind expresii despr ite ntre ele prin virgul n cadrul listei. n momentul execu iei parametrii actuali substituie parametrii formali. Un apel de procedur determin urmtoarele ac iuni:
se stabilete coresponden a ntre argumente i parametrii se execut instruc iunile subprogramului, pn cnd se ajunge la end sau la o instruc iune RETURN. Efectul acestor instruc iuni (end i RETURN) este ntoarcerea n unitatea de program n care a avut loc apelul, i anume la instruc iunea ce urmeaz imediat acestui apel (precizm c o procedur poate apela la rndul su o alt procedur). Un apel de procedur este corect dac ntre parametrii actuali i cei formali exist o coresponden att ca numr, ct i ca tip i organizare.
275
Exemplu: S presupunem c se d un numr ntreg pozitiv x, i se cere lista cifrelor corespunznd reprezentrii binare a lui x. Procedura urmtoare rezolv aceast problem.
> lbinar:=proc(x) local y,L; y:=x; L:=[]; while y>0 do L:=[irem(y,2,'c'),op(L)];y:=c; od; RETURN(L) end; > lbinar(27);
[ 1, 1, 0 , 1, 1 ]
> lbinar(32);
[ 1, 0, 0 , 0 , 0, 0 ] Procedura lbinarfr de mai jos ntoarce lista primelor n cifre ale reprezentrii binare a unui numr x, cu proprietatea 0x<1.
> lbinarfr:=proc(x,n) local y,i,L; y:=x;L:=[]; for i from 1 to n do y:=y*2; L:=[op(L),floor(y)];y:=frac(y)od; RETURN(L) end; > lbinarfr(0.15,10);
[ 0, 0 , 1, 0, 0, 1, 1 , 0, 0 , 1 ]
Procedura lbin ntoarce lista cifrelor binare corespunztoare unui numr real x. Pentru partea frac ionar a numrului se re in n cifre. Procedura lbin apeleaz procedurile precedente.
> lbin:=proc(x,n) local y,L1,L2,L; y:=abs(x);
276
end;
> lbin(23.15,10);
[ [ 1, 0, 1, 1, 1 ], [ 0, 0, 1, 0, 0, 1, 1, 0, 0, 1 ] ]
277
278
Metode Numerice
BIBLIOGRAFIE
1. K. E. Atkinson, An Introduction to Numerical Analysis, Wiley, New York, 1978. 2. G. Bal,
Lecture
notes,
course
on
numerical
analysis,
2002.
mathematics, In P. G. Ciarlet and F. Cucker, editors, Handbook of Numerical Analysis, volume XI, pages 334. North Holland Elsevier,
Amsterdam, 2003. 4. C. M. Bucur, C.A. Popeea, Gh. Gh. Simion, Matematici Speciale-Calcul
279
13. J. Hoffman, Numerical Methods for Engineers and Scientist, McGraw-Hill, New York, 1992. 14. V. Iorga, Metode numerice. ndrumar de laborator, Institutul Politehnic Bucureti, 1992. 15. G. Marinescu, Analiz numeric, Editura Academiei R.S. Romnia, 1974. 16. M.B. Monagan, K.O. Geddes, K.M. Heal, G. Labahn, S.M. Vorkoetter, J. McCarron and P. DeMarco, Maple 8 Advanced Programming Guide. Waterloo Maple Inc., Waterloo, Ontario, Canada, 2002. 17. S. Pav,
Numerical
Methods
Course
Notes,
2004
(UCSD),
http://scicomp.ucsd.edu/~spav/pub/numas.pdf. 18. M. Popa .a., No iuni de analiz numeric, Sitech Craiova, 2001. 19. M. Postolache, Metode numerice n algebr, Universitatea Politehnic Bucureti, 1993. 20. A. Rusu Casandra .a., Metode numerice pentru calculul structurilor, Editura Universit ii Politehnica Bucureti, 1998. 21. M. Stan .a.,
22. J. Stoer i R. Bulirsch, Introduction to Numerical Analysis (3rd ed.), Springer, 2002.
280
Metode Numerice
INDEX
A
adjunctul unui operator liniar i mrginit, 56 algebr Banach, 54 algoritm polinomial, 16 algoritm stabil, 14 algoritmul Romberg, 224 aplica ie liniar, 54 aproximare a derivatei prin diferen e finite progresive, 192 aproximare a derivatei prin diferen e finite regresive, 194 aproximare a derivatelor prin diferen e finite centrale, 190 aritmetica n virgul mobil, 45 calculul inversei unei matrice prin metoda de eliminare Gauss, 71 catastrophic cancellation, 47 cifr n baza b, 17 cifre semnificative, 36 cod complementar, 32 cod direct, 31 cod invers, 31
D
derivare numeric folosind diferen e finite, 189 derivare numeric folosind interpolarea, 206 desfacere a standard a unei matrice, 82 desfacere a unei matrice, 81 diferen finit divizat, 171 diferen finit la dreapta, 161 diferen finit la stnga, 167
B
baz ortonormal, 55 baz, 17 bit ascuns, 39 bit de semn, 34 bitul cel mai pu in semnificativ, 30 bitul cel mai semnificativ, 30
C
calculul determinantului unei matrice prin metoda de eliminare Gauss, 70
281
dimensiunea unui spa iu Hilbert, 56 dualul unui spa iu normat, 55 element de cea mai bun aproximare, 175
forma normalizat exponentul, 35 forma normalizat mantisa, 35 forma normalizat, 35 formula dreptunghiurilor, 212 formula general de cuadratur, 210 formula lui Simpson, 223 formula trapezelor, 218
E
elemente ortogonale, 55 eroare a datelor, 11 eroare backward, 12 eroare de calcul, 10 eroare de interpolare n cazul nodurilor Cebev, 143 eroare de interpolare n cazul nodurilor echidistante, 142 eroare de interpolare, 140 eroare de metod, 9 eroare de rotunjire, 9 , 11 eroare de trunchiere, 9, 11 eroare forward, 12 eroare inerent, 9 eroarea absolut, 10 eroarea relativ , 10 extrapolare Richardson, 205
I
IEEE-754- dubl precizie (doubleprecission), 41 IEEE-754-simpl precizie (singleprecission), 40 Inf, 39 integrarea numeric, 209
M
matrice diagonal dominant, 84 matrice diagonal, 58 matrice hermitian, 58 matrice inferior Hessenberg, 58 matrice inferior triunghiular, 58 matrice inversabil, 58 matrice nesingular, 58 matrice ortogonal, 58 matrice simetric, 58 matrice superior Hessenberg, 58 matrice superior triunghiular, 58 matrice tridiagonal, 58 matrice unitar, 58 matricea unitate, 57
F
factor de condi ionare n cazul rezolvrii unei ecua ii neliniare, 91 factor de condi ionare n cazul rezolvrii unui sistem neliniar, 105 factorul de condi ionare al unei matrice, 74 factorul de condi ionare, 13 fl(x), 37
282
Metode Numerice
metoda bisec iei (metoda njumt irii intervalului), 93 metoda celor mai mici ptrate, 178 metoda coardei, 96 metoda de eliminare Gauss, 62 metoda Gauss-Seidel, 87 metoda Jacobi, 83 metoda lui Newton, 127, 104 metoda Newton simplificat, 134 metoda Newton-Kantorovici, 138 metoda punctului fix, 116 metoda tangentei, 104 metode directe de rezolvare a sistemelor liniare, 61 metode iterative de rezolvare a sistemelor liniare, 80 minori principali, 60
O
OFL (overflow level), 37 operator liniar i mrginit, 55 ordine lexicografic, 17 overflow, 37
P
pivotare complet, 63 pivotare par ial, 63 polinoame Cebev de spe a a II-a, 230 polinoame Cebev de spe a I, 230 polinoame Jacobi, 230 polinoame Legendre,229 polinom de interpolare, 139 polinom generalizat, 179 polinom Lagrange de interpolare, 144 polinom Newton cu diferen e divizate, 171 polinom Newton de interpolare de spe a a II-a (descendent), 166 polinom Newton de interpolare de spe a I (ascendent), 161 pondere(integrare numeric), 209 pozitiv definit, 60 pozitiv semidefinit, 60 precizie a mainii, 38 precizie, 36 problem bine condi ionat, 13 problem ru condi ionat, 13
N
NaN, 39 negativ definit, 60 negativ semidefinit, 60 noduri Cebev, 143 norma 1 ||||1, 57 norma ||||, 57 norma euclidian ||||2, 57 norm complet, 54 norm operatorial asociat unei matrice, 59 norm, 53 norme echivalente, 54
283
S
sistem de numera ie, 17 sistem ortogonal, 55 sistem ortonormal, 55 sistemul normal al lui Gauss, 180 solu ie a unei ecua ii, 91 solu ie a unui sistem neliniar, 105 spa iu Banach, 54 spa iu Hilbert, 55 spa iu normat, 53 spa iu pre-Hilbert, 55 spa iul operatorilor liniari i mrgini i, 55 spectru, 59 standardul IEEE-754, 39
R
rat de convergen , 92, 116 rat liniar de convergen , 92, 116 rat ptratic de convergen , 92, 116 rat superliniar de convergen , 92, 116 raza spectral, 59 rdcin a unei ecua ii, 91 reprezentare complement fa de 1,31 reprezentare complement fa de 2, 32 reprezentare n virgul mobil normalizat, 37 reprezentare n virgul mobil, 36 reprezentare periodic n baza b, 25 reprezentare semn i valoare absolut, 31 reprezentarea intern a numerelor ntregi fr semn, 29 reprezentarea unui numr ntreg n baza b, 19 reprezentarea unui numr real n baza b, 21 restul formulei generale de cuadratur, 211 rezolvarea unui sistem liniar prin metoda de eliminare Gauss , 67 rotunjire la cel mai apropiat numr n virgul mobil (rotunjire la par), 38
T
transpusa unei matrice, 57 trunchiere, 37
U
UFL (underflow level), 37 underflow, 37
V
valoare proprie, 59 vector propriu, 59
Z
zerou al func iei, 91
284