Documente Academic
Documente Profesional
Documente Cultură
ISBN 978-973-144-289-1
Metode Numerice
CUPRINS
Prefa........................................................................................................................7
I. Noiuni introductive...............................................................................................9
I.1. Elemente de teoria erorilor ......................................................................9
I.2. Condiionarea numeric. Factor de condiionare....................................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 informaiei 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
Metode Numerice
Metode Numerice
PREFA
Analiza numeric are o istorie lung i bogat: Arhimede, Newton sau
Gauss, spre exemplu, avnd contribuii 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 tiinele sociale. Dei a existat
ntotdeauna o strns interaciune ntre matematic, pe de o parte i tiine i
tehnologie, pe de alt parte, aceast interaciune s-a intensificat n ultimele decenii.
Creterea utilizrii metodelor numerice a fost cauzat nu numai de creterea
performanei calculatoarelor, ci i de mbuntirea algoritmilor. Cu toate c exist
produse software performante pentru rezolvarea multor probleme matematice
ntlnite n practic, cunoaterea i nelegerea metodelor numerice rmn eseniale
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 noiuni i rezultate fundamentale ce
in de aproximarea numerelor reale, reprezentarea informaiei n sistemele de calcul
i aritmetica n virgula mobil, rezolvarea sistemelor liniare (prin metode directe i
iterative), rezolvarea ecuaiilor i sistemelor neliniare, aproximarea funciilor (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
comparaii ntre datele de ieire ale procedurilor respective i rezultatele afiate de
comenzile MAPLE destinate rezolvrii acelorai probleme. n multe situaii, pentru
a evidenia erorile de rotunjire, se compar rezultatele obinute utiliznd aritmetica
virgulei mobile cu rezultatele obinute folosind calculul simbolic.
Metode Numerice
I. Noiuni introductive
Metodele numerice reprezint tehnici prin care problemele matematice sunt
reformulate astfel nct s fie rezolvate numai prin operaii aritmetice. Prin trecerea
de la infinit la finit, diferenial la algebric, neliniar la liniar problemele complicate
sunt nlocuite de probleme mai simple care au aceeai sau aproape aceeai soluie.
Astfel soluiile obinute prin aplicarea metodelor numerice reprezint doar
aproximaii ale soluiilor problemelor originale, i deci implic erori.
Erori provenite din simplificarea modelului fizic, pentru a fi descris ntrun model matematic; erori din msurtorile iniiale sau erori din calcule
anterioare. Aceste tipuri de erori se numesc erori inerente.
eroare absolut
valoare exact
. 100 %
x*
Metode Numerice
utiliznd o
f (x )
f (x + h ) f (x )
h
h
, unde M = sup f (t ) pentru t ntr-o
2
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
h
2
+
. Studiem variaia acestei funcii.
2
h
M
1
>0,
-2 2 i deci E (h ) = 0 <=> h = 2
. n plus, E 2
2
M
M
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: soluia aproximativ y* este
considerat soluia exact a unei probleme cu datele iniiale modificate, mai precis
se consider y* = f(x*), unde x* este o perturbaie a lui x.
x*x
x
=
.
x
x
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 %.
12
Metode Numerice
cauzeaz.
Problema este ru condiionat dac modificrile relative care au loc n
soluie pot fi mult mai mari dect cele ale datelor de intrare.
cond =
f (x *) f (x )
f (x )
x * x
x
y
y
=
.
x
x
13
f (x )
f (x )
este stabilitatea.
algoritm nseamn ca acesta este ct mai puin sensibil la perturbaiile din timpul
calculului (erorile de rotunjire sau la alte incertitudini numerice care pot aprea n
procesul de calcul). Se spune c un algoritm de rezolvare a unei probleme este
stabil dac rezultatul produs este soluia 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 perturbaiile date de erorile de
calcul.
Acurateea metodelor
Acurateea se refer la apropierea soluiei calculate de soluia exact a
problemei. Stabilitatea algoritmului nu garanteaz acurateea. Aceasta depinde n
egal msur de buna condiionare a problemei i de stabilitatea algoritmului.
14
Metode Numerice
Inacurateea poate rezulta din aplicarea unui algoritm stabil unei probleme ru
condiionate, ca i din aplicarea unui algoritm instabil unei probleme bine
condiionate.
Aplicarea (cu ajutorul calculatorului) unui algoritm stabil unei probleme
bine condiionat garanteaz obinerea soluiei cu o precizie bun, n sensul c
eroarea relativ a soluiei calculate fa de soluia exact este de ordinul de mrime
al erorilor de reprezentare a datelor n calculator.
n general nu este posibil s obinem simultan un timp de execuie mai scurt precum
(n )
=0
f (n )
(n)
=1
n f ( n )
16
Metode Numerice
Bk
nzestrat cu ordinea
k =0
(n, n-1, , 0 ) < (n, n-1, , 0 ) <=> exist k{0, 1, , n} astfel nct
k < k i i = i pentru i = k + 1, n .
bk 1
b 1
n consecin, < implic fn() < fn(), deci fn este strict cresctoare.
Folosind bijectivitatea funciei 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 }.
Demonstraie. 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 1
b 1
< bn,
Plecnd de la observaia 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 mpriri succesive la b i reinerea resturilor de la sfrit
spre nceput:
x = bq0 + 0,
0 0 < b, q0 0
q0 = bq1 + 1,
0 1 < b, q1 0
qn-1 = b qn + n,
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 = 23 2 + 1
47
23 = 11 2 + 1
46
23
22
11
10
11 = 5 2 + 1
sau
5= 22+1
2= 12+0
1= 02+1
0
Deci 4710 = 1011112.
Conversia de la baza b la baza 10 se face prin nsumarea puterilor lui b
nmulite 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
Seria
b nn
n 1
n
1
(b-1) n i
n
b
b
bn
este
n 1
1
pozitiv i subunitar). Deci F
b
Teorema 2.2. Fie b o baz i F : C [0, ) funcia definit mai sus. Atunci
1. F este surjectiv
2. Pentru orice numr real x > 0 care nu este de forma
v
cu vN i
bn
v
cu vN i n N* , atunci
bn
qn
q
q
q
1
1
x < nn + n , ceea ce implic 0 x - nn < n i lim nn =
n
n
b
b
b
b
b
b
21
b nn
n =0
k
= 0 +
k
k =0 b
n
sn =
Din lim
q k bq k 1
= 0 +
bk
k =1
n
b kk
k =1
q k 1
q
q
q
= 0 + nn - 00 = nn .
k 1
b
b
b
b
qn
= x, rezult c lim sn = x.
n
bn
v
cu vN i n N*.
n
b
n
n
=
x.
Dac
not
m
t
=
n
bn
b kk suma
n =0
k =0
b nn
n =0
k n k
k b k + (b-1)
k = n +1 b
k =0
b kk
k =0
1
1
b
1
= tn + n . Deci
= tn + (b-1) n +1
k
b 1
b
b
k = n +1 b
tn x tn +
1
.
bn
1
v
pentru c x nu este de forma n cu vN i n
n
b
b
1
i tnbn xbn < tnbn + 1. innd cont i de faptul
n
b
b nn
n 0
. Seriile
b nn
n 0
b nn
n
k
qn
=
k
n
b
k =0 b
suma parial a
n0
22
Metode Numerice
v
cu vN i n N*. Fie n0 cel
n
b
n0
n0
v0
.
b n0
b kk
k =0
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
b kk
k =0
w0
ceea ce ar contrazice alegerea lui n0. Lund
b n 0 1
= (0, 1, , n 0 -1, b -1, b -1, ).
obinem
n n0 k
1
b n = b k - b n0 +
n =0
k =0
=x-
b 1
1
= x - n + (b-1)
k
b 0
k = n 0 +1 b
1
k
k = n 0 +1 b
1
1
b
+ (b-1) n 0 +1
= x.
n0
b 1
b
b
1 1
= n.
i
b
i = n +1 b
i
, obinem
i
i =0 b
i
+ bn
i
b
i =0
n
xbn = bn
b ii =
i = n +1
23
b n i i + bn
i=0
i
.
i
i = n +1 b
b n i i
Numrul
i=0
i
[0, 1). Deci
i
i = n +1 b
b n i i = [xbn]. Cu un
i =0
aproape se obine
0 = [xb0] = 0
1 = [xb1] - b[xb0] = 0b + 1 - b0 => 1 = 1
n = [xbn] - b[xbn-1] =
n 1
i=0
i=0
b n i i - b b n i i = n => n = n
(ii)
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
k
1
b
1
w
=
+
(b-1)
+ N = N .
k
k
N 0 +1
b 1 k =0 b
b
b 0
b 0
k =0 b
N0
k n0 k
< k + kk = nn = x
k
k =0 b
k =0 b
n =0 b
k = n 0 +1 b
n0
x =
b nn
n =0
b nn
n =0
, se obine N 0 = N 0 -1, i
deci =.
Dac are loc cazul (ii), atunci evident n = n pentru orice n, i deci = .
24
Metode Numerice
b nn
n =0
Teorem 2.4. Fie b o baz (adic b N, b 2). Un numr real x > 0 este
raional dac i numai dac x admite o reprezentare periodic n baza b.
b nn
n =0
N 1
1
1
1
N+p
b nn + b nn
n =0
n N+p n
+ n
n
n =0 b
n=N b
N 1
b (p+1)n
n =0
n N + p n b p +1
+ n p +1
,
n
b 1
n =0 b
n=N b
N 1
i
Reciproc s considerm un numr raional x = , cu i i j numere naturale, j
j
0. Demonstrm c reprezentarea x =
b nn
n =0
de forma
v
cu vN ne vom referi la acea reprezentare care are proprietatea c
bn
Notm
x0 = x, xn+1 = b(xn - n), n 0.
Se observ c
0 = [x] = [x0]
25
i
i notm cu u0 restul mpririi lui i la j, i cu un restul
j
bu n 1
j
pentru orice n 1. Deoarece un reprezint restul unei mpriri 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 raionament prin inducie 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 demonstraia 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 fracionar 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 fracionar. Conversia prii
fracionare se face prin nmuliri 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 nmuliri repetate, pot apare trei situaii:
26
Metode Numerice
b kk
(aceast situaie
k =1
corespunde cazului x =
v
cu vN i n N*).
n
b
2. {xn} 0, dar se observ o periodicitate, adic una sau un grup de cifre care
se repet ( aceast situaie corespunde cazului x raional dar x
v
bm
pentru
orice vN i m N*).
3.
0
Deci 510 = 1012
0,125 2 = 0,25 = 0 + 0,25
0,25 2 = 0,5
= 0 + 0,5
0,5 2
=1+0
= 1
27
28
Metode Numerice
k-1
+2
k ori
k-2
2k 1
++ 2 =
= 2k 1
2 1
0
Exemple:
k
Domeniul de valori
8 bii = 1 B (byte)
0255
16 bii = 2 B
0.65 535
32 bii = 4 B
0
3E (n hexazecimal)
00111110
3
puin semnificativ. Primul bit din stnga este bitul cel mai semnificativ.
Notm cu relaia de ordine lexicografic pe mulimea 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, relaia de ordine lexicografic este compatibil cu relaia de ordine
numeric natural.
30
0048 (n hexazecimal)
Metode Numerice
Mulimea numerelor ntregi nenegative reprezentabile pe k bii (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 bii).
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 bii i se completeaz primul bit cu 1. n consecin,
mulimea 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:
de ordine
natural.
Pentru a obine codul invers:
1. se obine reprezentarea valorii absolute a numrului ntreg negativ pe
k bii
2. n reprezentarea obinut (la pasul 1) se nlocuiete fiecare bit 0 cu 1
i 1 cu 0
Mulimea 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
k
.... 1 = 2 - 1
x + x = 11
2
k
31
de ordine
natural.
Pentru a obine codul complementar:
1. se obine codul invers pe k bii
2. se adun o unitate la valoarea obinut (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
k
k
.... 1 + 1 = 2 - 1 + 1 = 2
x + x = 11
2
k
de ordine
natural.
De exemplu, pentru k = 16, reprezentrile pentru x = -72 prin cele trei metode se
obin dup cum urmeaz:
7210 = 10010002 =10010002
32
Metode Numerice
10000000 01001000
1
1048 (n hexazecimal)
FFB7 (n hexazecimal)
FFB8 (n hexazecimal)
11111111 10110111
F
Cod complementar(complement fa de 2)
11111111 10111000
F
#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
72 --> 0048
-72 --> FFB8
Observaie: 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
valoare
zecimal
valoare absolut)
216-1= 32767
cod complementar
(compl. fa de 1)
(compl. fa de 2)
0111111=7FFF16
0111111=7FFF16
0111111=7FFF16
32766
0111110=7FFE16
0111110=7FFE16
0111110=7FFE16
0000001=000116
0000001=000116
0000001=000116
+0
0000000=000016
0000000=000016
0000000=000016
-0
1000000=800016
1111111=FFFF16
0000000=000016
-1
1000001=000116
1111110=FFFE16
1111111=FFFF16
-32766
1111110=FFFE16
1000001=800116
1000010=800216
-32767
1111111=FFFF16
1000000=800016
1000001=800116
-32768= -216
1000000=800016
34
Metode Numerice
x = m bE, unde
b = baza
m = mantisa
E = exponentul
1
|m| < 1 (ceea ce nseamn c mantisa este un numr
b
n
care are proprietatea c ar fi N
n
n =0 b
35
p 1
1 2
+ 2 ++ p 1 )bE, k {0, 1, ...b-1} pentru orice k = 0, p 1 , E Z.
b b
b
baza b
precizia p
Emin
Emax
IEEE single-precission
24
-126
127
IEEE double-precission
53
-1022
1023
Cray
48
-16383
16384
calculator HP
10
12
-499
499
mainframe IBM
16
-64
63
36
Metode Numerice
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 modaliti pentru
rotunjire:
p 1
1 2
+ 2 ++ p 1 + )bE; deci
b b
b
p 1
1 2
+ 2 ++ p 1 )bE.
b b
b
37
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
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.
consecin,
compararea
exponenilor
38
(i
numerelor
reale
Metode Numerice
ed
p 1
1 2
+ 2 ++ p 1 )bE se face sub forma
b b
b
01p-1
unde s este semnul lui x (se completeaz cu 0 dac semnul este + i cu 1 dac
semnul este -) iar ed este exponentul obinut prin adunarea unui decalaj D la
exponentul E:
ed = E + D.
p 1
1 2
+ 2 ++ p 1 )2E, p = 24, 53.
2 2
2
numbers"):
(0 +
p 1
1 2
+ 2 ++ p 1 )2E, p = 24, 53,
2 2
2
39
x pentru x < 0.
p 1
1 2
+ 2 ++ p 1 )2E se reprezint intern
2 2
2
ed
1p-1
p 1
1 2
+ 2 ++ p 1 )2E fiind normalizat, exist sigurana c 0 = 1, ceea ce
2
2
2
permite omiterea sa (bit ascuns) pentru creterea preciziei de reprezentare, dar
complic prelucrarea informaiei.
Formatele de reprezentare a numerelor n virgul mobil (conform standardului
IEEE 754) sunt:
Metode Numerice
23
23
1 2
+ 2 ++ 23
. Valoarea v
2 2
2
- 126
; v este o valoare
denormalizat
e10e9 e0
1 2
52
41
52
1 2
+ 2 ++ 52
. Valoarea v
2 2
2
- 1022
; v este o valoare
denormalizat
Exemple:
S se reprezinte n simpl precizie numerele: 228,15
- 27, 25
0,1
1,2
x = 228,15
x = 228 + 0,15
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 bii din parantez sunt utilizai 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
0011 0 110
4
Deci
0100 0010
4
0110
0110 0110
6
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
43
Metode Numerice
printf("\nNumar
in
virgula
mobila:%f\n\tFormat
intern
%08lX
virgula
mobila:%f\n\tFormat
intern
%08lX
virgula
mobila:%f\n\tFormat
intern
%08lX
virgula
mobila:%f\n\tFormat
intern
%08lX
(hexazecimal)",f1,*i);
i=(long int*) &f2;
printf("\nNumar
in
(hexazecimal)",f2,*i);
i=(long int*) &f3;
printf("\nNumar
in
(hexazecimal)",f3,*i);
i=(long int*) &f4;
printf("\nNumar
in
(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
1
. Se reprezint n baza 2, prin x = 0,0001100110011=1,
10
ceea
ce
introduce
eroarea
de
46
Metode Numerice
getch();
}
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
1
10i+1 - 10i =0.
10
( 1)n
(2n + 1)! x 2n +1
n =0
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
Pentru x=2 i eroare 10-7 se obine aproximaia 0.909297 corect a lui sin(2).
Pentru x = 40 i eroare 10-7 se obine aproximaia 523443136.0 a lui sin(40) !
Valoarea corect este 0.745113Acest rezultat se datoreaz fenomenului de
reducere (catastrophic cancellation). Pentru a evidenia diferenele 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
141782
0.9092961362 corect a
155925
Metode Numerice
> evalf(sin(2));
0.9092974268
> sinus(2., 10^(-5));
0.9092961362
> sin(2.);
0.9092974268
Atunci cnd primul parametru al procedurii sinus este ntreg (sau raional)
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 obine:
> evalf(sinus(30,10^(-5)));
-0.9880298724
> evalf(sin(30));
-0.9880316241
> sinus(30., 10^(-5));
-13.41937809
> sin(30.);
-0.9880316241
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
9999
i
+
, 1 i 10:
10000 100000
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 excepie c
punctele
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 execuiei 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
5. sup ||f(x)||< .
x =1
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 spaiu normat. Spaiul L(V, W) este denumit spaiul operatorilor liniari
x , x pentru
orice x din H. Un spaiu pre-Hilbert este un spaiu normat n care norma provine
dintr-un produs scalar, iar un spaiu Hilbert este un spaiu prehilbert complet (cu
norm complet).
Dac H un spaiu 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 spaiului Hilbert H un sistem ortonormal
maximal (n raport cu relaia de incluziune).
55
x, x i x i .
x, x i
x, x i x i , y .
2
Orice dou baze ortonormale ale unui spaiu Hilbert au acelai cardinal.
56
Metode Numerice
||x||1 =
xj
j=1
n
||x||2 = x j
j=1
1/ 2
xjyj
j=1
x j y j ).
j=1
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 *i, j )i,j, ale crei
elemente sunt: a *i , j = a j,i pentru orice 1in, 1jm. Conjugata este caracterizat
prin :
<Ax, y> = <x, A*y> pentru orice xKn i orice yKm.
a1
a2
an
a1
b1
c2
a2
b2
cn
an
Metode Numerice
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 aplicaie liniar:
x =1
||A|| =
max a ij
1 i j=1
||A||1 =
max a ij
1 j i =1
||A||2 =
A*A .
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 distanei euclidiene), n general, n aplicaiile numerice
59
vectorial:
||A||F =
a ij
i , j=1
a11
a12
a1k
a12
a22
a2k
a1k
a2k
akk
60
Metode Numerice
x i
, 1 i n. Artm c aplicarea acestei metode este
( 1) (
Sn
c1(1)c 2( 2 ) ...c n( n )
61
nn
Timp de execuie
n=5
0.5782433079 10-6 s
n=10
0.04765190154 s
n = 15
n = 20
n = 25
>1011 ani
n= 30
>1018 ani
Metode Numerice
A(nmin),
unde A(nmin) are form superior triunghiular, iar A(0) =A. Pentru a se trece de la
A(k)A(k+1):
(k)
Se determin pivotul de la pasul k; acesta este primul element a k,i
de pe coloana k cu proprietatea
(k)
(k)
| a k,i |=max{| a k, j |, kjn}
Se permut liniile i cu k;
(k)
Se aplic regula dreptunghiului (pivotului) cu pivotul a k,k . Astfel:
elementele de pe linia pivotului se mpart la pivot:
a (kk,i+1)
(k)
a k,i
=
, i=k,k+1,m
(k)
a k,k
63
j
(k)
(k)
a k,k
a i,k
a k, j
(k)
(k)
a i, j
(k) (k)
(k) (k)
0 1 a (nn,n) +1 a (nn,m)
(dac m n).
Exemplu
Prin aplicarea procedurii de eliminare gaussian cu pivotare parial asupra matricei
A de mai jos obinem:
A=
L1 L2
-3
-3
1/2
1/2
L2 L3
3/2
-1/2
-7/2
3/2
1/2
1/2
0 -7/2
3/2
64
3/2
-1/2
Metode Numerice
1/2
1/2
-3/7
1/7
1/2
1/2
-3/7
to m do for j
to n do a[i,j]:=A[i,j] od od;
65
A := 2
2
1
-3
> elimpp(A);
1
2
2
1
-3
1
2
-3
1
2
3
2
-7
2
1
2
-1
2
3
2
1
2
-7
2
3
2
1
2
3
2
-1
2
1
2
1
2
-3
7
1
7
1
2
1
0
0
1
0
0
1
0
1
2
-3
7
1
> A1:=matrix(3,2,[3,2,-1,5,2,0]);
A1 := -1
2
> elimpp(A1);
66
Metode Numerice
-1
0
2
3
17
3
-4
3
1
0
0
2
3
1
0
> A2:=matrix(2,3,[1,-1,2,3,4,-2]);
1
A2 :=
3
-1
4
-2
> elimpp(A2);
3
3
-1
4
-2
4
-1
-2
4
3
-7
3
-2
3
8
3
4
3
-2
3
-8
7
1
0
67
.a.m.d. n cazul acestui algoritm pentru fiecare k se efectueaz n+1-k + (n+1-k)(nk) = (n+1-k)2 operaii elementare (prin operaie elementar nelegnd aici o
operaie n virgul mobil de forma ax + b, sau o mprire) . Deci algoritmul
necesit
Nop(n) =
n 1
k =1
j= 2
2
( n + 1 k ) = j2 =
n ( n + 1)( 2n + 1)
-1
6
n3
(sau Nop(n) O(n3) ).
3
x2 + a (22,3) x3+
= a1(1,n) +1
a (22,n) 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 soluia unui sistem liniar cu n ecuaii 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 +
x3 = 3
x1 -
x2 +
2x3 = 2
-x1 -
x2 + 3x3 = 1
> a1:=matrix(3,3,[1,1,1,1,-1,2,-1,-1,3]);
a1 := 1
-1
1
-1
-1
> b1:=vector(3,[3,2,1]);
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 parial.
>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
a2 := 1
12
1
8
1
> determinant(a2);
-48
> det(a2);
-48
Comanda det(A) din pachetul linalg calculeaz determinantul matricei
indicate drept parametru.
In=
0 ---------- 0
0 ---------- 0
--------------------------------------0
---------- 1
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. Soluia acestui
sistem reprezint chiar coloana k a matricei A-1. Astfel pentru aflarea lui A-1 este
necesar s rezolvm n sisteme de ecuaii 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 obinute prin concatenarea
la matricea A a coloanelor bazei canonice din Rn. Coeficienii matricei
A = (A|e1|e2|------|en)
sunt
71
aij, dac 1 i, j n
ai,n+k = ik, dac 1 i, k n
unde
1, i=k
ik=
0,
ik.
----
A(n),
A(n)=
0 1 a (nn,n) +1 a (nn,2) n
bn,k= a (nn, n) + k , 1 k n
n
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;
a3 := 1
2
> inversa(a3);
73
1
2
1
1
2
2
-3
2
-1
2
0
1
2
2
-1
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
2
-1
Ax
Ax
cond(A) = max
min
x 0 x x 0 x .
cond(A) 1
74
Metode Numerice
1in
1in
x
||A-1||,
y
i mrginea superioar a mulimii
x
, Ax = y
y
75
x x *
E
cond(A)
.
x
A
Deci factor de condiionare mic i variaii relative mici ale coeficienilor
matricei implic variaii relative mici ale soluiei. Dac factorul de condiionare
cond(A) este mare, atunci rezolvarea sistemului Ax = b este o problem ru
condiionat.
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 soluie o notm cu x . Atunci
A x = b - b + b
A x = b - b + Ax*
A(x*- x ) = b- b
x*- x = A-1(b- b )
Atunci
Ax *
||x*- x || = || A-1(b- b )|| || A-1|| || (b- b )|| =|| A-1|| || (b- b )||
b
-1
|| A ||
b b
b
||A|| ||x*||,
de unde
b b
x x *
cond(A)
.
x*
b
Deci factor de condiionare mic i variaii relative mici ale termenilor
liberi implic variaii relative mici ale soluiei.
Dac gradul de acuratee a datelor de intrare este compatibil cu precizia
mainii mach, atunci
x x *
cond(A)mach.
x*
76
Metode Numerice
problem ru condiionat
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
887.112
885.781
> A1:=matrix(2,2,[888445/1000,887112/1000,887112/1000,
885781/1000]);
177689
200
A1 :=
110889
125
110889
125
885781
1000
> cond(A1);
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 - diferena este dat doar de reprezentarea
coeficienilor: simbolic (ca numere raionale) n cazul lui A1 i n virgul mobil n
cazul lui A comenzile linsolve(A,b) i linsolve(A1,b) ntorc rezultate diferite.
Soluia corect a sistemului este cea obinut n varianta n care s-a lucrat simbolic:
x1
885781000
x2
-887112000
Revenim la sistemul
Ax = b, cu A nesingular
notm cu x* soluia exact i cu x soluia aproximativ. Vectorul
r = b - A x
se numete reziduu. Avem
||x*- x || = 0 ||r|| = 0,
dar ||x*- x || i ||r|| nu sunt mici simultan. Avem
r = b - A x = Ax* - A x = A(x*- x )
78
Metode Numerice
A-1r = x* - x
1
||r|| =
|| A ||
= cond(A)
|| x* ||
|| x* ||
||r|| cond(A)
||r|| =
|| A |||| x* ||
|| Ax* ||
= cond(A)
|| x* ||
||r||.
|| b ||
de unde rezult
x * x
r
cond(A)
x*
b
Ca urmare factor de condiionare mic (problem bine condiionat) i reziduu mic
implic variaii relative mici ale soluiei.
Exemplu
Considerm sistemul Ax = b, unde
A=
1.001
i
b = 2.001
2
Evident soluia corect a sistemului este
x1
x2
2
=
se observ c
b - Ay =
0.001
0
79
Deci y aparent verific sistemul, dei este diferit de x. Aceasta se datoreaz valorii
factorului de condiionare 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
1.001
> cond(A);
4004.001000
Artm n continuare c dac reziduu este mare atunci variaia relativ a
coeficienilor matricei de intrare A este mare. S presupunem c x este soluia
sistemului (A+E) x = b. Atunci
(A+E) x = b
E x = b -A x
E x = r
de unde
i ca urmare
|| E ||
|| r ||
|| A |||| x || || A ||
n consecin dac a reziduu este mare atunci variaia relativ a coeficienilor
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
condiionat sau nu.
Metode Numerice
Nxk+1 = P xk + b, k 0.
Notm ek = x* xk eroarea absolut cu care xk aproximeaz x*, soluia 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).
Demonstraie. 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,
lim x k = x* pentru orice termen iniial x0 dac i numai dac lim G k e0 =0 pentru
81
orice e0, sau echivalent lim G k =0. Este cunoscut c lim G k =0 dac i numai
k
0 0
a2,2 0 0
..
0
0
L =
0 0 an,n
0 0
a2,1 0
0 0
..
an,1 an,2 an,3 an,n-1 0
82
Metode Numerice
N = D, P = - (L+R)
1
0
a11
N-1 =
-1
0 0 0
a 22
..
N P=
0 0
1
1
0
a11
0 0
0 0
1
a nn
0 0
a 22
..
:......................................................
0 0
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
suficient ca min( G 1 , G
)<1.
Calculm G 1 :
n
G 1 = max{
i, j
,1 jn}
i =1
n
= max{
i =1
i j
a i, j
, 1 jn}
a i ,i
Calculm G :
n
= max{ g i , j ,1 in}
j=1
a i, j
= max{
a i ,i
j=1
j i
,1 in}.
Dac G 1 < 1 sau G <1, atunci (G) <1. Dar condiia G <1 este echivalent cu
a i, j
a
j=1
j i
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 obinut prin metoda
Jacobi converge la soluia exact a sistemului Ax = b. Dac ek = x*- xk este eroarea
absolut cu care xk aproximeaz x*, soluia 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
e0
84
Metode Numerice
x ik +1 = gi, jx kj +
j=1
n
n
a i,j k
bi
b
b
xj + i .
= gi, jx kj - i =
a i,i j=1
a i,i j=1 a i,i
a i,i
ji
ji
x ik +1 =
n
1
(bi - a i, jx kj ), i =1,2,,n, k0.
a i,i
j=1
ji
k=
> with(linalg):
> mjacobi:=proc(a,b,x0,epsilon)
85
od;
n1<suma
> 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;
x3 = 4
5x2 + x3 = -2
-x1 + x2 + 8x3 = 14
> a:=matrix(3,3,[3,1,1,1,5,1,-1,1,8]);
a := 1
-1
86
1
5
1
Metode Numerice
> b:=vector([4,-2,14]);
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));
N = L + D, P = -R.
k
a1,1
0 0
a2,1 a2,2 0
:..................................................
x1k +1
x k2 +1
= Pxk + b
x kn +1
Deci
x1k +1 =
1
1 n
1 n
((Pxk)1 + b1) =
( P1, jx kj + b1) =
( P1, jx kj + b1) =
a1,1
a1,1 j=1
a1,1 j=2
87
x ik +1 =
=
n
i1
1
( Pi, jx kj + bi - a i,jx kj +1 )
a i,i j=i +1
j=1
n
i1
1
( a i, jx kj + bi - a i,jx kj +1 )
a i,i j=i +1
j=1
n
i1
1
( bi - a i, jx kj - a i, jx kj +1 )
a i,i
j=i +1
j=1
x1k +1 =
n
1
(b1 - a1, jx kj )
a1,1
j= 2
x ik +1 =
n
i1
1
( bi - a i,jx kj - a i,jx kj +1 ), i =2,3,,n
a i,i
j=i +1
j=1
Ca i n cazul metodei Jacobi dac A este diagonal dominant atunci irul obinut
prin metoda Gauss-Seidel converge la soluia 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, aproximaia iniial x0 a
soluiei, i eroarea epsilon. Procedura ntoarce aproximaia xk (dat de metoda
Gauss Seidel) a soluiei 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]);
a := 1
-1
1
5
1
> linsolve(a,b);
[ 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));
1703893329976716088550034332273 , -170389332997668792871267240303 ,
1703893329976655609856000000000 170389332997665560985600000000
9087431093208860851748902245101
4543715546604414959616000000000
> map(evalf,mgaussseidel(a,b,x1,10^(-3)));
90
Metode Numerice
o(h)
=0. Ca urmare,
h 0 h
unde lim
i
1
(f( x ) - f(x*)).
f (x*)
x -x*
91
1
. Dac > 0 i
f (x)
| x - x*|
1
.
f (x*)
(unde x* este o rdcin a ecuaiei 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 condiionat (
1
f (x*)
problem ru condiionat
e k +1
ek
= C.
Dac
92
Metode Numerice
se determin mijlocul c =
1
1
1
Ln-1 = ... = n L0 = n |b-a|. Ca urmare Ln < dac i
2
2
2
ln ( b a )
1
|b-a| < sau echivalent n >
.
n
ln ( 2 )
2
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 aproximaie a unei
rdcini x* (a,b) a ecuaiei f(x) = 0 cu eroarea absolut |x*-c| <
93
).
2
ln ( b a )
nmax:=
+1;
ln ( 2 )
a+b
;
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;
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 ecuaia 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)));
-0.8800582880
Comanda MAPLE fsolve(f(x), x) ntoarce rdcinile ecuaiei f(x) = 0.
Metode Numerice
c1
c2
xa
y f (a )
=
b a f (b ) f (a )
ba
f(a)
f (b ) f (a )
f (x n 1 )
(xn-1-b), dac f(a)f(a)<0
f (x n 1 ) f (b )
x0 = b, xn = xn-1 -
f (x n 1 )
(xn-1-a), dac f(b)f(b)<0
f (x n 1 ) f (a )
Dac m1 > 0, M1 > 0 sunt astfel nct m1 |f(x)| M1 i dac x* este unica soluie
a ecuaiei f(x) = 0, atunci eroarea absolut cu care termenul xn aproximeaz x*
satisface inegalitile:
97
|x*-xn|
|x*-xn|
f (x n )
m1
M 1 m1
x n x n 1
m1
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 aparin intervalului
(a,x*)). Fie x limita irului (xn)n. Trecnd la limit n
xn = xn-1 -
f (x n 1 )
(xn-1-b)
f (x n 1 ) f (b )
obinem
x = x -
f ( x )
( x -b),
f ( x ) f ( b )
98
f (x n 1 )
(xn-1-a)
f (x n 1 ) f (a )
Metode Numerice
|x* - xn| =
f ( xn )
f (dn )
f (x n )
m1
xn = xn-1 atunci
- f(xn-1) =
f ( x n 1 ) f ( b )
x n 1 b
(xn xn-1),
f ( x n 1 ) f ( b )
x n 1 b
(xn xn-1).
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) =
f ( x n 1 ) f ( b )
x n 1 b
(xn xn-1).
obinem
(x* - xn-1) f (n) = f (n) (xn xn-1)
i deci
(x* - xn) = (x* - xn-1) + (xn-1 - xn) =
=(
f (n )
- 1) (xn xn-1),
f ( n )
99
f (n )
(xn xn-1) - (xn xn-1)
f ( n )
de unde | x* - xn | =
|f ( n ) f ( n ) |
M m1
| xn xn-1| 1
| xn xn-1|, deoarece
|f ( n ) |
m1
f (x n 1 )
(xn-1-b), dac f(a)f(a)<0
f (x n 1 ) f (b )
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
1.1.
x2
100
Metode Numerice
x0 = a
x1
1.2.
x2
x2
2.1.
x1
101
x0 = b
x2
2.2
x1
x0 = b
Algoritm
Date de intrare:
(precizie)
Date de ieire:
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
f ( x1)
f ( x1) f ( b )
(x1-b),
altfel
x1: = a ; x2: = b;
f ( x1)
f ( x1) f ( a )
(x1-a),
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
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));
xn
xn-1
104
Metode Numerice
y = 0
n consecin ,
xn = xn-1 -
f ( x n 1 )
.
f ( x n 1 )
f ( x n 1 )
,n1
f ( x n 1 )
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
inegaliti:
|x* - xn|
|x* - xn|
unde m1 = inf
x[a,b]
f (x n )
m1
M2
(x n x n 1 )2
2 m1
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)
0 = f(x*) = f(xn) +
( x * x n ) f( )
x * x n
f (xn) +
n
1!
2!
x * x n
f (xn)
1!
de unde
xn+1 = xn -
f ( xn )
> xn + x* - xn = x*.
f ( xn )
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 -
f ( x n 1 )
f ( x n 1 )
obinem
x = x -
f ( x )
,
f ( x )
106
Metode Numerice
|x* - xn| =
f ( xn )
f (dn )
f (x n )
m1
Aplicnd formula lui Taylor rezult c exist n ntre xn i xn-1 astfel nct
2
( x x n 1 ) f( )
x x n 1
f (xn-1) + n
f(xn) = f(xn-1) + n
n
1!
2!
innd cont i de faptul c xn = xn-1 -
f ( x n 1 )
sau echivalent
f ( x n 1 )
xn - xn-1 = -
f ( x n 1 )
,
f ( x n 1 )
obinem
2
f ( x n 1 )
( x x n 1 ) f( )
f (xn-1) + n
f(xn) = f(xn-1) n
f ( x n 1 )
2!
=
( x n x n 1 )2 f( ).
n
2!
Ca urmare
|x* - xn|
f (x n )
m1
M2
1 ( x n x n 1 )
|f(n)|
(xn xn-1)2.
m1
2!
2m1
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 soluie a ecuaiei f(x) = 0. Aplicnd formula lui
Taylor rezult c exist n ntre xn i x* astfel nct
107
( x * x n ) f( ),
x * x n
0 = f(x*) = f(xn) +
f (xn) +
n
1!
2!
de unde
x* - xn = -
f ( x n ) f ( n ) 1
(x*-xn)2,
f ( xn ) f ( xn ) 2
sau echivalent
x* - xn +
f (xn )
f ( n ) 1
=(x*-xn)2.
f ( xn )
f (xn ) 2
Aadar
x* - xn+1 = -
f ( n ) 1
(x*-xn)2,
f (xn ) 2
| f ( x *) | M 2
=
2 | f ( x *) | 2m1
n | x * x n |2
lim
unde m1 = inf
x[a,b]
| x * x n +1 |
f ( x ) i M2 = sup f ( x ) .
x[a,b]
f ( x n 1 )
,n1
f ( x n 1 )
unde x0 [a, b] este ales astfel nct f(x0)f(x0) > 0. Atunci irul (xn)n converge la x*
unica soluie a ecuaiei f(x) = 0. Pentru orice n 1, xn reprezint abscisa punctului
de intersecie 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
108
Metode Numerice
x2
1.1.
x0
1.2.
x1
f > 0, f > 0
x1
x2
f < 0, f > 0
109
x0
x0
x1
x2
f > 0, f < 0
2.1.
x2
x1
x0
2.2.
f < 0, f < 0
Deci pentru aplicarea metodei tangentei n rezolvarea ecuaiei f(x) = 0 trebuie
stabilite intervalele de monotonie i intervalele de convexitate/concavitate pentru
funcia 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
Algoritm
Date de intrare:
f - n condiiile 1.1,1.2,2.1 sau 2.2
x0 - f(x0)f(x0)>0
f (x1)
;
f (x1)
ct timp | x2 x1 |2 execut
x1 := x2;
x2 : = x1 -
f (x1)
;
f (x1)
x1 := x0;
x2 : = x1 -
f (x1)
;
f (x1)
n : = 1;
111
f (x1)
;
f (x1)
n : = n + 1;
Trebuie verificat la ieirea din ciclu dac f(x2) 0. Dac problema este bine
condiionat, aceasta condiie va asigura acurateea aproximaiei.
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);
0.5099954153
0.5109733047
0.5109734294
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
.
i (x)
x j
1i, j n
Aplicnd formula lui Taylor rezult c
f( x ) = f(x*) + Jf(x*)h + o(),
|| o ( ) ||
=0. Ca urmare,
unde lim
i
|| x -x*|| || Jf(x*)-1|| f( x ) - f(x*)||.
Deci factorul de condiionare 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 soluie 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 condiionat (adic
115
dac norma || Jf(x*)-1|| este mic), atunci reziduu mic implic faptul c eroarea
absolut cu care x aproximeaz x*, || x -x*||, este mic.
Metodele iterative de rezolvare a unui sistem de ecuaii f(x)=0 presupun
construcia unui ir (xk)k convergent ctre o rdcin x* a ecuaiei. Eroare absolut
cu care xk aproximeaz x* este ek = x* - xk. Se spune c irul (xk)k converge cu rata
r dac exist o constant C (0, ) astfel nct
lim
|| ek +1 ||
|| ek ||r
= C.
Dac
Teorem 5.6. (metoda punctului fix). Fie (X,d) un spaiu metric complet
i fie f : X X o contracie. 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
2. d(x*, xn)
qn
d(x1, x0)
1 q
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 contradicie. 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
Deci
d(xn+k, xn)
1 qk
d(xn+1, xn) (1).
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
relaia (1) rezult
d(xn+k, xn)
1 qk
1 qk n
1 n
d(xn+1, xn)
q d(x1, x0)
q d(x1, x0).
1 q
1 q
1 q
Ca urmare
d(xn+k, xn)
1 n
q d(x1, x0)
1 q
117
(2).
nct qn <
1 q
. innd cont de relaia (2) obinem
d(x1, x 0 )
d(xn+k, xn) <
pentru orice n n i orice k0. Deci (xn)n este ir Cauchy i deoarece X este spaiu
complet rezult c (xn)n este convergent. Notm x* = lim x n . Artm c x* este
n
punct fix pentru f. Funcia f fiind contracie este funcie continu. Trecnd la limit
cu n n
xn = f(xn-1)
obinem
lim x n = lim f (x n 1 ) = f ( lim x n 1 ) ,
x* = f(x*),
adic x* este punct fix pentru f.
Din relaia (1) rezult
d(xn+k, xn)
1 qk
1 qk
d(xn+1, xn) .
q d(xn, xn-1)
1 q
1 q
q
d(xn, xn-1).
1 q
qn
d(x1, x0).
1 q
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||
q
||xn - xn-1||
1 q
2. ||x*- xn||
qn
||x1- x0||
1 q
E atunci (S,d) (unde d(x,y) = || x-y||) este spaiu metric complet. n consecin,
afirmaiile rezult aplicnd direct teorema precedent.
Algoritm:
Date de intrare:
f (contracie)
x0 (termenul iniial al irului)
(precizia ce determin condiia de oprire: se calculeaz termenii irului
pn la xN cu proprietatea ||xN-xN-1|| < ).
Date de ieire:
xN (aproximaie 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 aproximaie pentru x*, punctul fix al lui f. Faptul c f este
contracie asigur terminarea programului ntr-un numr finit de pai. Pentru a evita
ciclarea n situaia n care s-ar ncerca folosirea algoritmului pentru o funcie care
nu este contracie, se poate stabili de la nceput un numr maxim de pai ce urmeaz
a fi executai. De asemenea se poate afia la fiecare pas diferena dintre termenii
consecutivi cureni. (pentru a observa c irul nu converge dac f nu e contracie).
Astfel se poate folosi urmtoarea variant a algoritmului:
Date de intrare:
f (contracie)
x0 (termenul iniial al irului)
(precizia)
Nmax (numr maxim de termeni ai irului ce urmeaz a fi calculai)
Condiia de oprire: se calculeaz termenii irului pn la xN cu proprietatea
||xN-xN-1|| < sau N Nmax).
Date de ieire:
xN (dac f este contracie, xN este aproximaie satisfctore - determinat de
i Nmax - pentru punctul fix al lui f).
x1:=x0;
x2:=f(x1);
n:=1;
Dac f este contracie i Nmax suficient de mare, la ieirea din ciclu, x2 este
aproximaie pentru x*, punctul fix al lui f.
120
Metode Numerice
y = f(x)
y=x
x0 x2 x4 x3
x1
Propoziie 5.9. Fie a, b dou numere reale cu a < b i fie f: [a, b] [a,b]
R o funcie derivabil cu proprietatea c sup | f (x) | < 1. Atunci f este contracie.
x(a,b)
Exemple.
1) S se rezolve (n mulimea numerelor reale) ecuaia urmtoare aplicnd
metoda punctului fix
x3 x -1 = 0.
Se poate arta c ecuaia x3 x -1 = 0 are o singur rdcin real, i c aceast
rdcin este n intervalul (1,2). Ecuaia se poate scrie:
x3 = x+1
x = 3 x +1
121
sup | f (x) | =
x(1,2)
1
1
i deci
3 3 (x + 1)2
1 1
<1
3 34
Ca urmare f este contracie pe intervalul [1,2]. Deci soluia ecuaiei 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 mulimea numerelor reale) ecuaia urmtoare aplicnd
metoda punctului fix
x cos(x) = 0
Notm g(x) = x cos(x). Cum cos(x) [-1, 1], soluiile ecuaiei 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 ecuaia
x cos(x) = 0
are cel mult o rdcin. Cum g(0)g(
rdcin n intervalul [0,
f (x) =
1
]. Fie f: [0, ] [0, ], f(x) = ( x +cos(x)). Avem
2
2
2
2
1
(1 sin(x)) i deci
2
sup
| f (x) | =
x(0, 2)
1
<1
2
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;
1
] [0, ], f2(x) = ( x +cos(x))
2
2
2
f1 := x ( x + 1 )
( 1/ 3 )
> punctfix(f1,1.5,10^(-5));
1.324719474
> fsolve(f1(x)=x,x);
1.324717957
> f2:=x->1/2*(x+cos(x));
f2 := x
1
1
x + cos( x )
2
2
> punctfix(f2,1.,10^(-5));
0.7390856959
> fsolve(f2(x)=x,x);
0.7390851332
Procedura de mai jos implementeaz metoda punctului fix pentru o contracie pe
Rm.
> punctfixM:=proc(f,x0,epsilon,Nmax)
> local m,x1, x2,n, norma,i;
> m:=nops(x0);
123
, x* + ].
2
2
Deoarece | f | este continu, exist I astfel nct sup | f (x) | = | f ()| <1. Dac
xI
mai artm i c f(I) I, rezult c f|I este contracie. 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
1
f(x). Avem
f (x)
g(x*) = x* -
1
f(x*) = x*,
f (x*)
f (x)f (x)
f (x) 2
rezult c
| g (x*)| =
f (x *)f (x *)
f (x *)
=0 < 1.
1
f(xn-1), n 1,
f (x n 1 )
125
fi
x)
.
(
x j
1i,jm
Atunci f este contracie.
Demonstraie. 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||
xS
[0,1]
q||x y||.
.
2
Dac mai artm i c f(S) S, rezult c f|S este contracie. 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 seciunile precedente convenim s notm cu x1, x2,, xn, un
1i, j m
f
Jf(x) = i (x )
x j
(*)
127
(**)
sau echivalent
fi x n 1
j=1
x j
( x nj x nj 1 ) = fi ( x n1 ) ,
i = 1,2,, m
Dac se folosete relaia (*) pentru determinarea lui xn este necesar s se calculeze
inversa matricei Jf(xn-1). Dac se folosete relaia (**), este necesar s se rezolve un
sistem liniar cu m ecuaii, i necunoscutele x nk 1 = x nk x nk 1 , k = 1, , m.
Rezolvarea acestui sistem necesit un numr mai mic de operaii dect inversarea
matricei Jf(xn-1). Folosim relaia (**) se nlocuiete rezolvarea sistemului neliniar
prin rezolvarea succesiv a unor sisteme liniare.
3) Una din dificultile metodei este necesitatea determinrii derivatelor
pariale
f i
(x ) , componentele matricei Jf(x) (dac se utilizeaz un mediu de
x j
128
Metode Numerice
( (
Rm, notat
{y R m ,
yx <r
{y R m ,
yx r
xn x *
2 2n
q
M
xn x *
1
f xn
( )
2
M n
x x n 1 .
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 aparine 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);
[ 7.500000001, 50.00000002 ]
[ 6.000000002, 33.75000004 ]
[ 5.250000001, 27.00000001 ]
[ 5.021739128, 25.16576084 ]
131
[ 5.000186603, 25.00140155 ]
[ 5.000000017, 25.00000013 ]
Numar de pasi , 6
Valoarea functiei , [ 0.00046451 , 0.0069879 ]
[ 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.8316784870 , 0.5629787234 ]
[ 0.8260617824 , 0.5636079087 ]
[ 0.8260313586 , 0.5636241619 ]
Numar de pasi , 3
Valoarea functiei , [ 0.000031943, 0.0000785347 ]
[ 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);
[ 0.8750000000 , 0.6250000000 ]
[ 0.8290363483 , 0.5643491124 ]
[ 0.8260401080 , 0.5636197732 ]
Numar de pasi , 3
Valoarea functiei , [ 0.005791188, 0.0054486200 ]
[ 0.8260401080 , 0.5636197732 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=1,y=1});
{ 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.8260437059 , -0.5636179649 ]
[ -0.8260313579 , -0.5636241623 ]
Numar de pasi , 17
Valoarea functiei , [ 0.000013414, -0.0000314743 ]
[ -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];
Numar de pasi , 4
Valoarea functiei , [ 0.0000818676 , 0.0000282439 , 0.0000687452 ]
133
(***)
xn x * qn x0 x *
xn x *
( )
1
f xn
L n +1
x
xn
Procedur MAPLE
> mnewtonsimplif := proc(f, x0,c,epsilon, Nmax)
> local m,x1, x2, dx, b, fx, fx1, n, i, j, ex, r;
134
Metode Numerice
>
m:=vectdim(x0);x1 := vector(m);x2:=vector(m);
dx := vector(m);
> b := vector(m);
> fx := jacobian(f(seq(x[i],i=1..m)), [seq(x[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);
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 := 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;
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 ]
Numar de pasi , 10
Valoarea functiei , [ 0.00122926 , 0.0202844 ]
[ 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);
[ 0.8316784870 , 0.5629787234 ]
[ 0.8267332448 , 0.5632460104 ]
[ 0.8261303960 , 0.5635972122 ]
Numar de pasi , 3
Valoarea functiei , [ 0.000733926, 0.0018161243 ]
[ 0.8261303960 , 0.5635972122 ]
> fsolve({f1(x,y)[1],f1(x,y)[2]},{x=0.9,y=0.5});
{ 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.8261112430 , 0.5690490973 ]
[ 0.8271727754 , 0.5669722992 ]
Numar de pasi , 9
Valoarea functiei , [ 0.006276661, -0.0052613953 ]
[ 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];
137
(****)
1
2
B x 0 , r G, unde r =
1
(1 1 2abM ) .
aM
Atunci f(x) = 0 are o unic soluie 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 relaie
xn x *
b
2n 1
138
, n 1.
Metode Numerice
a0 + a1x0 + a2 x 20 + + an x n0 = y0
a0 + a1x1 + a2 x 12 + + an x 1n = y1
(*)
a0 + a1xn + a2 x 2n + + an x nn = yn
Determinatul acestui sistem este
1
=
x0 x 20 x 0n
1 x1 x 12 x 1n
(x
xj
0 j<i n
xn x 2n x nn
clas C
. Fie x0, x1, , xn n+1 puncte distincte dou cte dou din intervalul [a,
f (n +1) ( x )
(x x0) (x x1) (x xn).
( n + 1) !
140
Metode Numerice
sup f (
| f(x) Pn(x) |
n +1)
t[ a,b ]
(t)
|(x x0) (x x1) (x xn)|.
( n + 1) !
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) !
f (x) Pn (x)
.
(x x 0 )(x x1 )...(x x n )
141
f (n +1) ( x )
( n + 1) !
f (x) Pn (x)
.
(x x 0 )(x x1 )...(x x n )
Rezult c
f (n +1) ( x )
f (x) Pn (x)
=
,
(x x 0 )(x x1 )...(x x n )
( n + 1) !
sau echivalent,
f( x ) Pn( x ) =
f (n +1) ( x )
( n + 1) !
n plus,
sup f (
|f( x ) Pn( x )|
n +1)
t[ a,b ]
(t)
|(x x0) (x x1) (x xn)|.
( n + 1) !
h=
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
sup f (
| f(x) Pn(x) |
n +1)
t[ a,b ]
(t)
|(x x0) (x x1) (x xn)|.
( n + 1) !
h h h2
=
.
4
2 2
h n +1
n!,
4
h n +1
n +1
sup f ( ) ( t ) .
4(n + 1) t[a,b]
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 proieciile pe axa OX a unor puncte egal
distanate situate pe un semicerc:
143
1
2n
pentru orice x [-1, 1]. Se poate arta c pentru oricare alte noduri ci, i=0, ...,n.
1
sup |(x c0) (x c1) (x cn)| n .
2
x[ 1,1]
Nodurile Cebev pot fi scalate i translatate pentru a putea fi folosite pe un interval
oarecare [a, b]:
xi =
ba
2i + 1 b + a
, 0 i n.
cos
+
2
2
2n + 2
| f(x) Pn(x) |
(b a)n +1
2
2n +1
sup f (
(n + 1)! t[a,b]
n +1)
(t) .
1, dac i = j
0, dac i j
Pentru orice i = 0, 1, ...n, deoarece li are gradul n i admite drept rdcini pe x0, x1,
..., xi-1, xi+1, ..., xn, rezult c
li(X) = Ai(X x0) (X x1) (X xi-1) (X xi+1) ... (X xn).
144
Metode Numerice
1
,
( x i x 0 ) ( x i x1 ) .... ( x i x i1 )( x i xi+1 ) ...( x i x n )
i ca urmare
li(x) =
yi ( x
i =0
xn
y lista ce conine valorile funciei n punctele x0, x1, ...., xn
y0
y1
yn
yi = f(xi), i = 0,1,, n
a punctul n care se evaluaez polinomul.
Date de ieire:
v - valoarea polinomului n x
v : =0;
145
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
2
4
, x2 =
i x3 = 2. Vom aplica procedura PLagrange pentru a determina
3
3
2
4
, x2 =
i x3 = 2 i
3
3
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
h4
2
2, unde h =
16
3
> f2:=x->sin(x)+cos(x);
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
f3 := x
1
1 + x2
> x4:=[seq(-1+2*i/3,i=0..3)];
-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);
-5 5
-10 -5
5 10
-35 -25 -5 -5 5 5 25 35
x_3 := -5, , , 5 , -5,
, , 0, , , 5 , -5,
,
, , , , , , , 5
3 3
3 3
3 3
9 9 3 9 9 3 9 9
> y_3:=[seq([seq(evalf(f3(-5+10*i/(3*j))),i=0..3*j)],j=1..3)];
150
Metode Numerice
x_c3:=
[seq([seq(evalf(5*cos((2*i+1)/(6*j+2)*Pi)),i=0..3*j)],j=1..3)];
>
[seq([seq(evalf(f3(5*cos((2*i+1)/(6*j+2)*Pi))),i=0..3*j)],j=1..3)];
151
152
Metode Numerice
-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)];
x_c5:=
[seq([seq(evalf(5*cos((2*i+1)/(10*j+2)*Pi)),i=0..5*j)],
j=1..3)];
153
154
Metode Numerice
(n) (n)
n
Fie f : [a, b] R i un ir de diviziuni n = ( x 0 , x1 , , x (n ) ) ale
intervalului [a, b], n 0. Pentru fiecare n se construiete polinomul de interpolare Pn
( ) ( )
( )
(n) (n)
n
(n)
(n)
n
asociat nodurilor x 0 , x1 , , x (n ) i valorilor f x 0 , f x1 , , f x (n ) .
Se pune problema convergenei punctuale sau uniforme a lui Pn la f. n general, Pn
nu converge la f, ns dac f este o funcie ntreag real irul de polinoame Pn
converge uniform la f.
n cele ce urmeaz vom considera trei funcii f1, f3 : R R, definite mai sus
precum i f4 : R R respectiv f4(x) = |x|.
> f4:=x->abs(x);
f4 := abs
Vom vizualiza comportarea polinoamelor de interpolare (sub forma Lagrange) L0,
( ) ( )
(n) (n)
n
(n)
(n)
L1,...,Ln asociate unor noduri x 0 , x1 , , x (n ) i valorilor f x 0 , f x1 , ,
( )
n
f x (n ) (cu exemplificri pentru f {f1, f2, f3}).
155
x1,
..., x`,
...
y1=`,
y`,convert(n,string),`=`,f,`(x`,convert(n,string),
`)`);
>
titlu:=cat(titlu,
nodurilor
y1,
x0,
x1,
`\nL
polinomul
de
interpolare
asociat
...,y`,convert(i,string),
`,
i =0..`,convert(n,string));
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 aplicaii, calculul diferenelor 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)
2f(x0) 2f(x1)
2f(xn-3) 2f(xn-2)
3f(x0)
3f(xn-3)
nf(x0)
Astfel
f (x 0 ) = f (x1 ) f (x 0 )
2f (x 0 ) = f (x1 ) f (x 0 )
= f (x 2 ) f (x1 ) (f (x1 ) f (x 0 ))
= f (x 2 ) 2f (x1 ) + f (x 0 )
3f (x 0 ) = 2f (x1 ) 2f (x 0 )
= f (x 3 ) 3f (x 2 ) + 3f (x1 ) + f (x 0 )
Se poate demonstra uor prin inducie c
n
n f ( x ) = ( 1) Cin f ( x + ( n i ) h )
i=0
yi +1 Pi (x i+1 )
(i + 1)!h i+1
i +1f (x 0 )
(i + 1)!h i +1
, i = 0, 1, ..., n-1.
162
Metode Numerice
Aadar
Pn (x) = f (x 0 ) +
+ ... +
2
3
f (x 0 )
[1] + f (x 0 ) x x [ 2] + f (x 0 ) x x [3] + .... +
x
x
(
(
(
0)
0)
0)
1!h
2!h 2
3!h 3
n f (x 0 )
n
( x x 0 )[ n ]
n!h
Expresia polinomului de interpolare de mai sus poart denumirea de polinom
Newton de spea I (sau ascendent ). Expresia polinomului Newton se poate pune
sub o form mai comod pentru aplicaii, dac se face schimbarea de variabil
t=
x x0
h
i se ine seama c
= t ( t 1)( t 2 ) .... ( t i + 1)
Pn (x) = Pn (x 0 + th)
= f (x 0 ) +
f (x 0 )
2f (x 0 )
3f (x 0 )
t+
t(t 1) +
t(t 1)(t 2) +
1!
2!
3!
n f (x 0 )
t(t 1)...(t n + 1)
+ .... +
n!
Dac se efectueaz calculele n aritmetica virgulei mobile, aproximarea
funciei f prin polinomul Newton ascendent este avantajoas pentru valorile x din
vecintatea lui x0, eroarea fiind mic pentru t n modul mic.
y1
yn
do
> 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
164
Metode Numerice
> PNewton1(0,2*Pi/3,y1,X);
3X
3X
3 X
1
2
X
2
2
+
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
166
Metode Numerice
f(x1)
f(x2)
f(x3)
f(xn-3)
f(xn-2)
f(xn-1)
f(xn)
2f(x2) 2f(x3)
2f(xn-2) 2f(xn)
3f(x3)
3f(xn)
nf(xn)
Pentru determinarea unui coeficient ci al polinomului de interpolare Pn se utilizeaz
diferena finit de ordinul i a lui Pn n xn. Se obine:
Pn (x) = f (x n ) +
+ .... +
3
f (x 0 )
2f (x n )
[ 2] + f (x n ) x x
[3]
x
x
( x x n )[1] +
(
)
(
n
1
n 2 ) +
2
3
1!h
2!h
3!h
n f (x n )
n!h
( x x1 )[ n ]
t=
x xn
h
Se obine
167
Pn (x) = Pn (x n + th)
= f (x n ) +
+ .... +
f (x n ) 2f (x n )
3f (x n )
t+
t(t + 1) +
t(t + 1)(t + 2) +
1!
2!
3!
n f (x n )
t(t + 1)...(t + n 1)
n!
y1
yn
168
Metode Numerice
> u := 1;
> for i from 1 to n-1
do
Exemple
> 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
> 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
f (x j , x k ) f (x i , x j )
x k xi
f (x i , x i+1,..., x i+ m ) f (x i 1, x i ,..., x i + m1 )
x i + m x i1
171
f(x1)
f(x0,x1)
f(x2)
f(x3)
f(xn-2)
f(x1,x2) f(x2,x3)
f(xn-1)
f(xn-2,xn-1)
f(xn)
f(xn-1,xn)
f(xn-2,xn-1,xn)
f(x0,x1,....,xn)
x1
xn
y1
yn
yi = f(xi), i = 0,1,, n
a punctul n care se evaluaez polinomul.
Date de ieire:
v - valoarea polinomului n a
v : =y0; u:= 1;
pentru i = 0,n-1,1 executa
pentru j = 0,n-i-1,1 executa
yj := (yj+1 yj)/(xj+i+1 xj);
u :=u*(a-xi);
v:=v+u*y0 ;
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
x1 := 0,
,
, 2
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
n aceste situaii se poate folosi aproximarea funciei prin metoda celor mai mici
ptrate.
caz dac X o submulime 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
175
x x0 , x x0
rezult c p = p1 +
1
2
1 2
p H0. Avem
2
||p-x0||2 = || p1 +
<
1
4
1 2 0 2 1
p -x || = || p1 x0 + p2 x0||2 <
2
4
|| p1 x0 + p2 x0||2 +
1
4
|| p1 x0 (p2 x0)||2
1
2
|| p1 x0 ||2.
Deci p H0 i ||p-x0|| < || p1 x0 ||, contradicie 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. mprind inegalitatea cu
176
Metode Numerice
|| p0 -x0|| > 0,
obinem
<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
177
VI. 2.2. Aproximarea n medie prin metoda celor mai mici ptrate
Considerm mulimea funciilor definite pe intervalul [a, b],
F : = {f : [a, b] R }
i n+1 puncte distincte x0, x1, , xn din intervalul [a, b]. Spunem c funciile f i g
din aceast mulime 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 relaie 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 mulimea claselor de echivalen relativ
la relaia de echivalen de mai sus. H poate fi nzestrat cu o operaie 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 definiia nu depinde de reprezentani. 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 operaia
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 operaie extern de nmulire 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 definiia nu depinde de reprezentani. H nzestrat cu cele
dou operaii definite mai sus devine spaiu vectorial.
Fie p o funcie cu urmtoarele proprieti:
p(xi) > 0
p(x i ) =1.
i =0
178
Metode Numerice
Dac f1 ~ f2 i g1 ~ g2 atunci
n
p ( xi ) f1 ( xi )g1 ( xi )
i=0
p ( xi ) f2 ( xi )g 2 ( xi ) .
i=0
p(x i )f (x i )g(x i )
i=0
Funcia p(x) este o funcie 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
2
[f ] =
p(x i )f 2 (x i ) .
i =0
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 definiiei elementul F0 de cea mai bun aproximare a lui f pe Hm trebuie s
satisfac condiia
n
179
ceea ce revine la
<f, j> = c0<0, j> + c1<1, j> + + cm<m, j>, j = 0, 1,,m.
Notm
aij = <i, j> =
p(x k ) i (x k ) j (x k )
k =0
n
1
, atunci
n +1
F0(x) =
ci x i .
i =0
i=0
i =0
x i + + cm x im
f (x i )
i=0
i=0
i =0
i =0
i =0
c0 x i + c1 x i2 + + cm x im +1 = x i f (x i )
i=0
i =0
i=0
c0 x im + c1 x im +1 + + cm x i2m =
180
x im f (x i )
i =0
Metode Numerice
181
evalueaza i desen. Procedura desen_puncte reprezint grafic cele n+1 puncte date
iniial: (x0, y0), (x1, y1), ..., (xn, yn). Procedura baza_normal primete drept
paramentru un numr natural m i construiete lista funciilor 0, 1, m unde
> baza_normal:=proc(n,t)
> RETURN([unapply(1,t),seq(unapply(t^j,t),j=1..n)])
> end;
> evalueaza:=proc(phi,c,a)
> local i,m,fx;
> m:=nops(phi);fx:=0;
> for i from 1 to m do
182
Metode Numerice
> fx:=fx+phi[i](a)*c[i] od;
> RETURN(fx)
> end;
> 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);
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
> phi3:=baza_normal(3,x);
3 := [ 1, x x, x x 2, x x3 ]
> c3:=patrate_mici(x1,y1,p1,phi3);
185
X=
p(x 0 ) 0(x0)
p(x 0 ) 1(x0)
...
p(x 0 ) m(xn)
p(x1 ) 0(x1)
p(x1 ) 1(x1)
...
p(x1 ) m(x1)
p(x n ) 0(xn)
p(x n ) 1(xn)
Iar
186
...
p(x n ) m(xn)
Metode Numerice
p(x 0 ) f(x0)
p(x1 ) f(x1)
Y=
p(x n ) f(xn)
Dac funciile 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 condiionat, atunci gradul de acuratee al soluiei
furnizate de metoda celor mai mici ptrate poate fi foarte sczut.
187
188
Metode Numerice
f ' (a )
f " (a )
f (n ) (a )
(x-a) +
(x-a)2 +
(x-a)n.
1!
2!
n!
lim
x a
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) =
f (x i )
f (x i )
f (w x )
(x x i ) +
(x x i ) 2 +
(x x i )3 .
1!
2!
3!
f (x i 1 ) = f (x i ) +
f (x i )
f (x i )h 2 f (u)
(h) +
+
(h)3
1!
2!
3!
(7.1)
f (x i+1 ) = f (x i ) +
f (x i )
f (x i ) 2 2 f (v) 3 3
h +
h +
h
1!
2!
3!
(7.2)
cu u strict cuprins ntre xi-1 i xi i v strict cuprins ntre xi i xi+1. Scznd din a doua
relaie prima relaie nmulit cu 2 obinem:
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 )
f (x i+1 ) + f ( x i ) 2 1 2f (x i1 )
h ( + 1)
cu eroarea:
2 f (v)
f (u) 2
=
+
h
+ 1 3!
+ 1 3!
190
Metode Numerice
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 )
2 ( f (x i +1 ) (1 + ) f (x i ) + f (x i1 ) )
h 2 ( + 1)
cu eroarea
=
h f (v) 2 f (u)
3
( + 1) 3
f (x i )
f (x i +1 ) f (x i 1 )
2h
f (x i +1 ) 2f (x i ) + f (x i1 )
h2
( 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!
(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
relaii 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
191
f (x i )
f (x i +1 ) 2f (x i ) + f (x i1 )
h2
cu eroarea
f ( 4 ) (v) f ( 4 ) (u)
h2
=
+
4!
4!
f (x i )
f (x i )
f (w x )
(x x i ) +
(x x i )2 +
(x x i )3 .
1!
2!
3!
f (x) = f (x i ) +
f (x i )
f (x i )h 2 f (u) 3
h+
+
h
1!
2!
3!
f (x i+ 2 ) = f (x i ) +
f (x i )
f (x i ) 2
f (v)
( + 1)h +
h ( + 1) 2 +
( + 1)3 h 3 (7.6)
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 relaia
f (x i+ 2 ) + f ( x i ) 2 + 2 (1 + ) 2 f (x i+1 )
h ( + 1)
f (v)
f (u) 3
( + 1)3 h 3 +
h (1 + ) 2
3!
3!
h ( + 1)
192
Metode Numerice
f (x i+ 2 ) (1 + ) 2 f (x i +1 ) 2 + 2 f ( x i )
f (x i )
h ( + 1)
cu eroarea:
f (v) ( + 1) 2 f (u) ( + 1) 2
=
h
3!
3!
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)
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!
f (x i )
f (x i+ 2 ) + 4f ( x i+1 ) 3f (x i )
2h
f (x i + 2 ) 2f (x i+1 ) + f (x i )
h2
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 )
f (x i )h 2 f (u) 3
h+
h
1!
2!
3!
f (x i 2 ) = f (x i )
f (x i )
f (x i ) 2
f (v)
( + 1)h +
h ( + 1)2
( + 1)3 h 3 (7.8)
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 relaia
f (x i2 ) + f ( x i ) 2 + 2 (1 + )2 f (x i 1 )
h ( + 1)
f (u) 3
f (v)
h (1 + )2 +
( + 1)3 h 3
3!
3!
h ( + 1)
h ( + 1)
cu eroarea:
3!
3!
2
h
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)
194
Metode Numerice
f (x i ) 2
f (x i ) ( + 1)f (x i1 ) + f (x i2 )
h 2 ( + 1)
cu eroarea
h
3!
3!
3f (x i ) 4f (x i 1 ) + f ( x i 2 )
2h
f (x i )
f (x i 2 ) 2f (x i 1 ) + f (x i )
h2
Eroare
f (x i )
f (x i +1 ) f (x i 1 )
2h
O(h2)
f (x i )
f (x i+1 ) + 8f (x i+1 ) 8f (x i1 ) + f (x i 2 )
12h
O(h4)
f (x i +1 ) 2f (x i ) + f (x i1 )
O(h2)
O(h4)
f (x i )
f (x i )
f (x i )
f (x i )
h2
12h 2
f (x i+ 2 ) 2f (x i +1 ) + 2f (x i1 ) f (x i 2 )
O(h2)
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
O(h4)
f (x i+1 ) f (x i )
h
O(h)
f (x i+ 2 ) + 4f ( x i+1 ) 3f (x i )
O(h2)
2h
O(h)
f (x i + 2 ) 2f (x i+1 ) + f (x i )
f (x i )
h2
f (x i +3 ) + 4f (x i + 2 ) 5f (x i+1 ) + 2f (x i )
f (x i )
O(h2)
h2
f (x i )
f (x i )
f (x i+3 ) 3f (x i+ 2 ) + 3f (x i+1 ) f (x i )
O(h)
h3
3f (x i+ 4 ) + 14f (x i +3 ) 24f (x i+ 2 ) + 18f (x i +1 ) 5f (x i )
O(h2)
2h 3
Eroare
f (x i ) f (x i 1 )
h
O(h)
3f (x i ) 4f (x i1 ) + f ( x i 2 )
O(h2)
f (x i )
f (x i )
Eroare
f (x i )
f (x i )
f (x i )
f (x i )
2h
O(h)
f (x i ) 2f (x i1 ) + f (x i 2 )
h2
2f (x i ) 5f (x i1 ) + 4f (x i 2 ) f (x i 3 )
O(h2)
h2
f (x i ) 3f (x i 1 ) + 3f (x i 2 ) f (x i 3 )
h
O(h)
196
O(h2)
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)];
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;
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
z3:=[seq(D(f2)(1+2*i/5),i=1..4)];
2738
5618 10658 18818
> z4:=[seq((D@@2)(f2)(1+2*i/5),i=1..4)];
101306
297754 778034 1825346
>
map(evalf,de1(2/5,y2));
map(evalf,de2(2/5,y2));
200
Metode Numerice
> plot([(D@@2)(f2),t->de2(2/5,[f2(t-2/5),f2(t),f2(t+2/5)])[1]],
1..3);
> plot([D(f2),t->de1(10^(-8),[f2(t-10^(-8)),f2(t),f2(t+10^(8))])[1]],1..3);
201
202
Metode Numerice
> map(evalf,[seq(eroare1(f2,3/2,10^(-i)),i=1..6)]);
> eroare2:=proc(f,x,h)
> RETURN((D@@2)(f)(x)-de2(h,[f(x-h),f(x),f(x+h)])[1])
> end;
203
> map(evalf,[seq(eroare2(f2,3/2,10^(-i)),i=1..5)]);
204
Metode Numerice
(h) = L +
a 2k h 2k .
k =1
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.
D(n,m) = L +
h
a k,m 2n
k = m +1
2k
D(n,m) = L + O(h2(n+1)).
Cu alte cuvinte D(n,n) este o aproximaie 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 definiia: D(n,0) =
2n
f (x + h) f (x h)
.
2h
D(1,1) =
4D (1, 0 ) D ( 0, 0 )
3
h
4 ( h )
2
=
.
3
h
4 ( h )
2
Ca urmare
reprezint o aproximaie a lui f (x) cu eroare de
3
ordinul O(h4), unde ( h ) =
f (x + h) f (x h)
.
2h
206
Metode Numerice
P4 (x) = P4 (x 0 + th)
= f (x 0 ) +
+
4f (x 0 )
t(t 1)(t 2)(t 3)
4!
= f (x 0 ) +
+
f (x 0 )
2f (x 0 )
3f (x 0 )
t+
t(t 1) +
t(t 1)(t 2) +
1!
2!
3!
f (x 0 )
2f (x 0 ) 2
3f (x 0 ) 3
t+
(t t) +
(t 3t 2 + 2t) +
1!
2!
3!
4f (x 0 ) 4
(t 6t 3 + 11t 2 6t)
4!
2f (x 0 )
3f (x 0 ) 2
(2t 1) +
(3t 6t + 2) +
2
6
4f (x 0 ) 3
(4t 18t 2 + 22t 6)
24
= f (x 0 ) + 2f (x 0 )
+ 4f (x 0 )
(2t 1)
(3t 2 6t + 2)
+ 3f (x 0 )
+
2
6
(2t 3 9t 2 + 11t 3)
12
iar
g ( t ) =
+
2f (x 0 )
3f (x 0 )
2+
(6t 6) +
2
6
4f (x 0 ) 2
(6t 18t + 11)
12
= 2f (x 0 ) + 3f (x 0 ) ( t 1) + 4f (x 0 )
n consecin avem:
(2t 1)
(3t 2 6t + 2)
1
f (x)= f (x0+ht) ( f (x 0 ) + 2f (x 0 )
+ 3f (x 0 )
+
h
2
6
207
+ 4f (x 0 )
f (x) = f (x0+ht)
(2t 3 9t 2 + 11t 3)
)
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 combinaie liniar de valori ale funciei f n punctele x0, x1, , xn, i.e
b
f (x)(x)dx
i =0
i =0
Ln(x) = f ( x i ) li ( x ) = yi
f (x)(x)dx Ln (x)(x)dx
b
i =0
i=0
209
Ln (x)(x)dx
care
xi =
a +b ba
+
t i , ti [-1, 1], i {0, 1, ..., n},
2
2
avem
b
Ln (x)(x)dx
( x ) f ( xi )
i=0
= f ( xi ) ( x )
a
i =0
a +b ba
+
t
2
2
i obinem
b
Ln (x)(x)dx
a
1
(t t 0 ) (t t i 1 )(t t i +1 ) (t t n )
ba n
a +b ba
f (x i ) (
+
t)
dt
2 i =0
2
2
(t i t 0 ) (t i t i 1 )(t i t i+1 ) (t i t n )
Formula
f (x)(x)dx
a
1
(t t 0 ) (t t i1 )(t t i+1 ) (t t n )
ba n
a +b ba
f (x i ) (
+
t)
dt.
2 i =0
2
2
(t i t 0 ) (t i t i1 )(t i t i+1 ) (t i t n )
1
210
Metode Numerice
|f(x) Ln(x)|
M
(x x 0 )(x x1 ) (x x n ) ,
(n + 1)!
|Rn(f)|
M ba
(n + 1)! 2
n+2 1
a +b ba
+
t (t t 0 )(t t1 ) (t t n )dt ,
2
2
ba
i, i = 0, 1, 2, , n.
n
ba
t,
n
obinem
b
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 i
n
( n ) 1 ( 1)
Hi =
t ( t 1) ... ( t i + 1)( t i 1) ... ( t n )dt
n ( n i ) !i! 0
n i
n t ( t 1) ... ( t n )
1 ( 1)
dt
n ( n i ) !i! 0
t i
211
Hi(
n)
i =0
(n)
(n)
= 1 i Hi = H n i , i = 0,1,,n.
Dac f este o aplicaie de clas Cn+1 are loc urmtoarea formul de evaluare a
restului:
b
ba
(n)
f (x)(x)dx ( b a ) Hi f a + i n
i =0
a
1
ba
( n + 1)! n
De
reinut
exist
n +2 n
|f(
t(t 1)(t 2) (t n)dt xsup
[a,b]
n+1)
(x)|.
funcii
(n)
( b a ) Hi f ( x i ) nu converge ctre
i =0
continue
pentru
care
irul
a f ( x )dx .
a+b
(deci t0 = 0). Obinem
2
b
a+b
f (x)dx (b-a) f
a
cu o eroare
( b a )2
4
sup f ' ( x ) .
x[ a,b ]
ba
i, i = 0, 1, 2, , n.) i aplicm pe fiecare subinterval [xi,
n
212
Metode Numerice
x i + x i+1
innd cont c
n 1
x
f ( x )dx = i +1 f ( x )dx , obinem urmtoarea formul de
i =0
f (x)dx
a
b a n 1 x i + x i +1
f 2 .
n i =0
a
=
f ( x ) dx
n 1 x
i +1
i =0
n 1
i =0
i =0
f ( x ) dx
n 1 x
i +1
i =0
n 1
f ( x ) dx
n 1 x
i +1
b a n 1 x i + x i+1
f ( x ) dx
f 2
n i=0
x i +1
b a n 1 x i + x i+1
f 2 =
n i =0
sup | f (x) |
x[a,b]
= sup | f (x) |
x[a,b]
= sup | f (x) |
x[a,b]
b a x i + x i+1
f
n
2
x + x i +1
f ( x ) dx ( x i+1 x i ) f i
( xi+1 x i )2
i =0
b a x i + x i +1
f
n
2
| f (x) |
sup
x[x i ,x i +1 ]
n 1
( x i+1 x i )2
4
i =0
n 1
( b a )2
4n 2
i =0
( b a )2
4n
213
f
x
dx
(
)
f 2 4n
a
n i =0
b
sup f ' ( x )
x[ a,b ]
x + x i+1
f i
xi
xi+1
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));
g := x e
( x 2 )
> 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);
4 4/5 + 2 i
5
2
e
5 i = 0
> 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
> evalf(middlesum(g(x),x=-1..1,10));
1.496106505
> middlebox(g(x),x=-1..1,10);
217
1
1
ba
(t 1)
(t + 1) =
f
(x)dx
f (a)
dt + f (b)
dt
2
(
1)
(1
+
1)
a
1
1
21
21
b
a
(t
1)
(t
+
1)
=
f (a)
+ f (b)
2
4
4
1
1
=
b
Deci f (x)dx
a
ba
(f(a) +f(b)).
2
ba
(f(a) +f(b)).
2
Eroarea este
3
b a) 1
(
ba
1
sup f " ( x )
| f (x)dx (f(a) +f(b)) |
(t 1)(t + 1)dt =
2
2! x[ a,b]
8
a
1
3
b a) 1 2
b a) 1 2
(
(
1
1
sup f " ( x )
f "( x )
2 t 1dt
=
t 1dt = 2! xsup
2! x[ a,b]
8
8
[ a,b]
1
0
= sup f " ( x )
x[ a,b ]
( b a )3
8
1 t
0
dt = sup f " ( x )
x[ a,b ]
( b a )3
8
31
t1 t
0 3
0
( b a )3 .
= sup f " ( x )
12
x[ a,b ]
Deci
b
| f (x)dx a
ba
(f(a) +f(b)) |
2
218
( b a )3
12
sup f " ( x ) .
x[ a,b ]
Metode Numerice
ba
i, i = 0, 1, 2, , n.) i aplicm pe fiecare subinterval [xi,
n
xii+1 f ( x )dx
innd cont c
n 1
x
f ( x )dx = i +1 f ( x )dx , obinem urmtoarea formul de
i =0
ba
n
f (x)dx
a
f ( a ) + f ( b ) n 1
+ f ( xi ) .
2
i=1
f ( x ) dx
n 1 x
i +1
i =0
b a f ( a ) + f ( b ) n 1
+ f ( xi ) =
n
2
i=1
n 1 x
i +1
i =0
n 1 x
i +1
i =0
f ( x ) dx
n 1 x
i +1
i =0
n 1
n 1
x x
f ( x ) dx i +1 i ( f ( x i ) + f ( x i +1 ) )
2
i =0
x x
f ( x ) dx i+1 i ( f ( x i ) + f ( x i+1 ) )
2
f ( x ) dx
( xi+1 x i )3
i =0
12
sup | f (x) |
x[a,b]
b a f ( a ) + f ( b ) n 1
+ f ( xi )
n
2
i=1
x i +1 x i
( f ( x i ) + f ( xi+1 ) )
2
| f (x) |
sup
x[x i ,x i +1 ]
n 1
i =0
( x i+1 x i )3
12
219
= sup | f (x) |
x[a,b]
( b a )3
12n 2
n 1
( b a )3
i =0
12n 3
sup f " ( x ) .
x[ a,b ]
( b a )3
b a f ( a ) + f ( b ) n 1
+ f ( xi )
sup f " ( x )
a f ( x ) dx n
2
12n 2 x[ a,b]
i =1
f(xi+1)
f(xi)
xi
xi+1
x i+1 x i
ba
( f(xi) + f(xi+1)) =
( f(xi) + f(xi+1)),
2
2n
i deci formula trapezelor arat c
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));
g := x e
( x 2 )
> 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
Metode Numerice
> evalf(trapezoid(g(x),x=-1..1,5));
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 aproximaia
b
subintervale.
a+b
, x2 =b (deci t0 = -1 i t1 = 0, t2 =1).
2
Obinem
b
a f ( x )dx
ba
(f(a) +4 f a +2b + f(b))
6
( )
ba
i, i = 0, 1, 2, , 2n.) i aplicm pe fiecare subinterval
2n
xii+2 f ( x )dx
innd cont c
f ( x )dx =
x i+ 2 x i
( f(xi) +4f(xi+1) + f(xi+2))
6
2n 2 x
x i+2 f ( x )dx ,
i
i=0
i par
223
f ( x )dx
ba
6n
n 1
n 1
f
a
+
f
b
+
2
f
x
+
4
( ) ( ) ( 2i ) f ( x 2i1 ) .
i =1
i =1
ba
f
x
dx
f
a
+
f
b
+
2
f
x
+
4
f
x
(
)
(
)
(
)
(
)
(
)
2i
2i
1
a
6n
i=1
i=1
( b a )5
4
4
sup f ( ) ( x ) .
2880n x[ a,b]
ba
2
i, i = 0.. 2n).
b a f ( a ) + f ( b ) 2 1
+ f ( xi ) .
f (x)dx 2n
2
i=1
a
b a f ( a ) + f ( b ) 2 1
2
2n
i=1
aproximeaz
a f ( x ) dx ( n )
unde hn =
ba
2
(b a)
12
h 2n sup f " ( x )
x[ a,b ]
224
Metode Numerice
b
2
(n+1) = f (x)dx + a2 hn+1 + a4 h 4n +1 + a6 h 6n +1 + a8 h 8n +1 +....
a
b
= f (x)dx +
a
1
1
1
1
a2 h 2n +
a4 h 4n +
a6 h 6n +
a8 h 8n +....
4
16
64
256
i ca urmare
4 ( n + 1) ( n )
3
= f (x)dx a
1
5
21
a4 h 4n a6 h 6n a8 h 8n +....
4
16
64
i definim
I(n,m) =
4m I ( n, m 1) I ( n 1, m 1)
4m 1
, 1 m n.
I(n,n)
Prima coloan a acestui tabel poate fi calculat direct cu definiia: 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+1,1)
I(k+2,0)
I(k+2,1) I(k+2,2)
I(k+n,0)
I(k+n,1) I(k+n,2)
I(k+n,n)
b
b a f ( a ) + f ( b ) 2 1
I(n+1,0) = (n+1) =
+ f ( a + ih n +1 )
2
2n +1
i=1
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
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
2 1
1
= I(n,0) + hn+1 f ( a + (2i 1)h n +1 ) .
2
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 definiia.
226
Metode Numerice
i =0
i =0
i =0
f (x)(x)dx
q(x)x
Ai = (x)li ( x ) dx
a
227
Formula general de cuadratur fiind exact pentru orice polinom de grad n avem
b
( p ( x ) q ( x ) + r ( x ) ) (x)dx
f (x)(x)dx =
b
= p ( x ) q ( x ) (x)dx + r ( x ) (x)dx
b
= r ( x ) (x)dx
a
Ai r ( x i )
i =0
Ai f ( x i ) = Ai ( p ( x i ) q ( x i ) + r ( x i ) ) =
Ai r ( x i ) .
i =0
i =0
i =0
f (x)(x)dx =
a
Ai f ( x i ) .
i =0
Teorema 8. (cuadratura Gauss) Fie : [a, b]R o pondere. Fie {xi}i cele
b
n+1 noduri ale polinomului qn+1 de grad n+1 cu prorietatea c q n +1 (x)x k (x)dx =
a
Ai = (x)li ( x ) dx
a
b
= (x)
a
228
Metode Numerice
b
f (x)(x)dx
i=0
f (x)(x)dx Ai f ( x i )
f(
2n + 2 )
() b 2
q ( x ) ( x ) dx
( 2n + 2 )! a n +1
n! d n
n
n
x a ) ( x b )
(
( 2n )! dx
2.
Dac (x) =
1
1 x2
( n!)4 ( b a )2n +1 f ( 2n ) ( )
.
3
( 2n ) ! ( 2n + 1)
2i + 1
xi = cos
, 0 i n.
2n + 2
n acest caz Ai =
229
3.
sin ( ( n + 1) arccos x )
sin ( arccos 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
ba
b+a
x.
2
2
f ( x, y ) dxdy
230
Metode Numerice
unde F(x) =
(x)
j = 0, 1, , m. Aplicnd integralei
f ( x, y ) dxdy
D
Ai F ( x i )
i =0
unde
F(xi) =
(x )
2( x i) f ( x i , y )dy .
1 i
F(xi) Bijf x i , y j
j=0
f ( x, y ) dxdy Ai Bijf ( x i , y j ) .
i =0 j=0
ba
n
yi = c + jk, j = 0, 1, , m, k =
dc
m
Y
d
yi+1
yi
c
a
xi
231
xi+1
i +1 y
Iij =
j+1
yj
x k
f ( x, y ) dy dx i+1 f x, y j + f x, y j+1
x
i 2
((
)) (
) dx
k x
= i +1 f x, y j dx + i+1 f x, y j+1 dx
x
2 xi
i
kh
f x,i y j + f x,i+1 y j + f x i , y j+1 + f x i +1, y j+1
22
((
) (
) (
) (
))
f ( x, y ) dxdy =
D
n 1m 1
n 1m 1
((
))
kh
f x,i y j + f x,i +1 y j + f x i , y j+1 + f x i+1, y j+1 .
i =0 j=0 4
Iij
i =0 j=0
) (
) (
) (
Presupunem c
xi = a + ih, i = 0, 1, , 2n, h =
ba
2n
yi = c + jk, j = 0, 1, , 2m, k =
dc
2m
Dac pentru calculul integralei Iij cu i i j pare se aplic formula Simpson repetat se
obine
x
i+2 y
j+ 2
y j
Iij =
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
((
))
) (
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 ))
Notm
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 ))
Fij =
Atunci
f ( x, y ) dxdy =
D
n 1m 1
n 1m 1
i =0 j=0
i =0 j=0
I2i,2 j F2i,2 j
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
nchidere X.
235
236
Metode Numerice
i rezultatele.
MAPLE dispune de peste 2000 de funcii 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
conine de exemplu, numere, expresii, mulimi, etc., sau poate s nu conin nici un
parametru. Indiferent de numrul de parametri specificai, 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 opiuni de control al funcionrii 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.
MAPLE. Acestea pot fi apelate direct aa cum s-a precizat mai sus.
2.
> nume_pachet[nume_comanda](param1,param2,...);
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. Informaii asupra
modului corect de introducere a unei comenzi se pot obine cu ajutorul comenzii
help. Exist mai mute modaliti de utilizare a acestei comenzi. Este recomandabil,
urmtoarea form:
> ? nume_comanda
O comand de forma:
>?
Operator
Exemple
Adunare
x+y
238
Metode Numerice
Scdere
x-y
Opus
-x
nmulire
x*y
mprire
x/y
** sau ^
Semnificaie
abs(x)
|x| (modulul)
iquo(x,y)
irem(x,y)
trunc(x)
frac(x)
x-trunc(x)
round(x)
floor(x)
ceil(x)
239
exp(x)
ex
sin(x)
sinx
cos(x)
cosx
tan(x)
tgx
Facem cteva remarci asupra funciilor irem i iqou (deoarece nu respect
ntocmai teorema mpririi 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 relaia:
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 funcii pot fi utilizate i cu cte trei parametri. Dac al treilea parametru
este prezent n funcia irem, atunci lui i se asigneaz ctul, iar n cazul funciei iquo
i se asigneaz restul mpririi.
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
Funciile rem i quo se aplic polinoamelor i reprezint analoagele
funciilor irem i iquo. Acestea cer obligatoriu al treilea parametru ce indic
nedeterminata n raport cu care se consider polinomul. Opional admit al patrulea
parametru, cu acelai rol ca parametru 3 din funciile 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 relaia:
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
Funcia 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 conine cteva constante MAPLE:
Constant
Notaia matematic
241
Pi
infinity
gamma
true
false
Simbol
Exemple
egal
x=y
diferit
<>
x<>y
mai mare
>
x>y
>=
x>=y
mai mic
<
x<y
<=
x<=y
Operator
Simbol
Exemple
not
not x
Conjuncie (i)
and
x and y
disjuncie (sau)
or
x or y
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 secvene de instruciuni 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
ntregi
raionale
n virgul mobil
243
> 123;
123
> -6789;
-6789
> 123456789123456789012;
123456789123456789012
m
.
n
2
3
> 6/7;
6
7
> 4/6;
2
3
> 4/2;
2
> -39/13;
-3
Se observ c MAPLE face automat simplificarea fraciilor.
Reprezentarea unei constante n virgul mobil conine n general
cmpurile urmtoare:
partea ntreag
punctul zecimal
partea fracionar
244
Metode Numerice
2.3
> 678.96e-9;
0.67896 10 -6
> .1234;
0.1234
> 123E56;
0.123 10 59
> 1.;
1.
0.123 10 59
Expresiile aritmetice cu operanzi constante ntregi sau raionale sunt evaluate exact
n MAPLE (rezultatul este o constant raional sau o constant ntreag).
Exemple:
> 1/3+4/5;
17
15
> 1/3+8;
25
3
> 1/3+2/3;
1
245
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 rein de obicei un numr finit de cifre
zecimale ale mantisei. Numrul de cifre care se rein 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 toi
operanzii din expresie sunt ntregi sau raionali) 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);
3.14159265358979323846264338328
Exist o ntreag familie de funcii de evaluare numeric i algebric a expresiilor:
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 conine un numr
de identificatori predefinii (identificatori rezervai). O list a acestora poate fi
obinut cu comanda
> ?ininame
sau
> help(`ininame`);
Notaie
matematic
diff(f(x),x)
derivat parial
f
x
int(f(x),x)
integral indefinit
f (x )dx
sum(f(n),n)
suma seriei
f (n )
n =1
int(f(x),x=a..b)
integral definit
sum(f(k),k=a..b) sum de la a la b
a f ( x ) dx
b
f (k )
k =a
limit(f(x), x=a)
limita funciei f n a;
lim f ( x )
x a
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);
2
( sin( x ) tan( y ) ) = cos( x ) ( 1 + tan( y ) 2 )
y x
> int( sin(x), x );
cos( x )
> Int( sin(x), x );
sin( x ) dx
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);
249
=int(int(
( x 2 y 2 )
e
dx d y =
4
0
> sum(k^2,k=1..4);
30
> Sum(k^2,k=1..4);
4
k2
k=1
> Sum(k^2,k=1..n)=sum(k^2,k=1..n);
n
k2 =
k=1
( 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
> Limit(sin(x)/x, x=0);
lim
x0
sin( x )
x
lim
x0
sin( x )
=1
x
lim
x0
cos( 2 x ) 1
= -2
x2
lim e x =
lim
x ( )
ex = 0
250
Metode Numerice
lim
x0
1
= undefined
x
1
=
x
lim
x 0-
lim
x 0+
1
=
x
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
Curba/Curbele reprezentate
plot(f(x),x = a..b)
y = f(x), x[a,b]
plot([f(x),g(x),],x = a..b)
plot([f(t),g(t),t = a..b])
x = f (t )
t [a , b ]
y = g (t )
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);
Suprafaa/Suprafe
ele reprezentate
plot3d(f(x,y),x = a..b,y=c..d)
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)
254
x = f (u , v )
y = g (u , v )
z = h (u, v )
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);
>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
Comanda
>op(i..j, expr);
ntoarce irul operanzilor de la operandul i la operandul j.
Comanda
>subsop(i=expr1, expr);
ntoarce expresia obinut prin nlocuirea unui operand al expresiei expr cu expresia
expr1
Comanda
>subsop(i1=expr1, i2=expr2,..., ik=exprk, expr);
ntoarce expresia obinut prin nlocuirea simultan a operanzilor expresiei expr
desemnai 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 +
cos( u v )
e
> nops(expr);
2
> op(1,expr);
uv
> op(2,expr);
cos( u v )
e
2
( u )
> subsop(2=u+v,expr);
257
2
( u )
uv+u+v
> expr;
uv+
cos( u v )
e
2
( u )
Comanda
>unapply(expr, x);
ntoarce funcia x -> expr, iar comanda
>unapply(expr, x, y, ...);
ntoarce funcia (x,y, ...) -> expr
Exemple:
> f:=x->x^3+cos(x)*x^(1/3)+exp(-x^2);
f := x x3 + cos( x ) x
( 1 /3 )
+e
> nops(f);
1
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
258
2
( x )
Metode Numerice
g := ( x, y ) x2 e
2
2
( x y )
+ cos( x ) sin( y )
> nops(g);
1
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
h := ( u, v, w ) sin( u ) cos( w ) v + u
> f(1);
1 + cos( 1 ) + e
( -1 )
> f(1.);
1.908181747
> evalf(f(1));
1.908181747
> evalf(f(1),50);
1.9081817470395820389964603776044374711781215516497
> f(alpha);
3 + cos( )
( 1 /3 )
+e
2
( )
> g(Pi/2,3);
1 2
e
4
> evalf(g(Pi/2,3));
0.00002582324018
> g(2,3);
4e
( -13 )
+ cos( 2 ) sin( 3 )
> g(2,3.);
-0.05871760362
> evalf(g(2,3));
-0.05871760362
> h(Pi/3,2,Pi/4);
259
2
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
2
expresie := u v +
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
2
f2 := ( u, v ) u v +
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
poziia n care apar n list. Dac L este o list L[i] desemneaz elementul de pe
poziia i. Lista vid este desemnat prin []. Se pot efectua urmtoarele operaii 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
A.6.3. Mulimi
Mulimile (sets) n MAPLE sunt iruri neordonate de expresii, separate
ntre ele prin virgul i incluse ntre acolade {}. Duplicatele sunt eliminate.
Mulimea vid este desemnat prin {}. Se pot efectua urmtoarele operaii cu
mulimi:
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
indexai.
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 funcia 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
Metode Numerice
> evalm(A);
A1, 1
A
2, 1
A2, 2
1
A :=
x
x 2
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]]);
M := 3
> M[1,2];
2
Pachetul linalg conine comenzi pentru operaii cu vectori i matrice.
265
Comanda
f := x x 3 + cos( x ) x
( 1 /3 )
+e
2
( x )
> g:=(x,y)->x^2*exp(-x^2-y^2)+cos(x)*sin(y);
g := ( x, y ) x2 e
2
2
( x y )
+ cos( x ) sin( y )
> h:=(u,v,w)->sin(u)*cos(w)*v+u;
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 + cos( 1 ) + e
( -1 )
, 1 + cos( 1 ) ( -1 )
( 1/ 3 )
+e
( -1 )
, 1]
> map(g,x,Pi/3);
2
1 2
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 := { ,
, , }
2
2
> map(h,M,3,Pi/3);
{ ,
3 3
, + , }
2 2 2 2
2
2
1 2 1 9 1
9
1 2
1
1 2 9
e
+ sin( 1 ), e
sin( 1 ), e
2
9
2
9
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 := { ,
, , }
2
2
> map(h,3,M,Pi/3);
sin( 3 ) { , , , } + 3
2
2
2
> expr:=u*v+cos(u*v)/exp(-u^2);
expr := u v +
cos( u v )
e
2
( u )
> applyop(f,1,expr);
u 3 v3 + cos( u v ) ( u v )
( 1/3 )
+e
2 2
( u v )
cos( u v )
e
2
( u )
> applyop(g,1,expr,Pi/3);
u 2 v2 e
2 2 2
u v
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
2
( u )
e
cos ( u v )
2
( u )
uv+
cos( u v )
e
2
( u )
> L:=[1,-1,1,2,3,-1,1,1];
L := [ 1, -1, 1, 2, 3, -1, 1, 1 ]
> op(1,L);
1
> applyop(f,1,L);
[ 1 + cos( 1 ) + e
( -1 )
, -1, 1, 2, 3, -1, 1, 1 ]
> op(3,L);
1
> applyop(f,3,L);
[ 1, -1, 1 + cos( 1 ) + e
( -1 )
, 2, 3, -1, 1, 1 ]
1, -1, e
+ cos( 1 ), 2, 3, -1, 1, 1
[ 1, -1, e
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
Da
condiie
Instruciuni1
Nu
Instruciuni2
Condiia este o expresie logic (format cu operatori logici sau relaionali). Modul
de execuie al deciziei (precum rezult din subschema logic de mai sus) este
urmtorul:
1.
se evalueaz condiia
2.
3.
269
condiie
Nu
instruciuni
1. se evalueaz condiia
2. dac rezultatul este adevrat se execut instruciuni
3. se trece la comanda care urmeaz dup decizie
Un extra element elif (innd loc de else+if) poate fi adugat n decizie, obinnd:
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 instruciuni repetitive n MAPLE: for i while. For are mai
multe forme:
(1)
270
Metode Numerice
1.
se execut atribuirea i : = ei
2.
3.
se execut instruciuni
4.
se execut atribuirea i := i + p
5.
i := ei
i ef
Da
instruciuni
i: = i + p
Nu
i := ei
i ef
Da
instruciuni
i: = i + p
Nu
271
(2)
se execut atribuirea i : = ei
2.
3.
se execut instruciuni
4.
se execut atribuirea i := i + p
5.
condiie
Da
instruciuni
i: = i + p
Nu
(3)
272
Metode Numerice
n cazul urmtoarei instruciuni for contorul i parcurge toate elementele unei liste
sau unei mulimi (expr):
(4)
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;
suma := 1
suma := 6
suma := 9
Ciclu cu test iniial are forma:
273
condiie
Da
instruciuni
Nu
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 instruciuni 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 coninut nu este precizat dect n momentul
execuiei). n cadrul listei, parametrii formali sunt separai prin virgul. Numele
procedurii (nume) este un identificator MAPLE. Apelul unei proceduri se face cu
comanda:
nume (list parametrii actuali)
parametrii actuali fiind expresii desprite ntre ele prin virgul n cadrul listei. n
momentul execuiei parametrii actuali substituie parametrii formali. Un apel de
procedur determin urmtoarele aciuni:
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 fracionar a numrului se rein n cifre. Procedura lbin apeleaz
procedurile precedente.
> lbin:=proc(x,n)
local y,L1,L2,L;
y:=abs(x);
276
Metode Numerice
L1:=lbinar(floor(y));
L2:=lbinarfr(frac(y),n);
L:=[L1,L2];
RETURN(L)
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.
http://www.columbia.edu/~gb2030/COURSES/E6302/NumAnal.ps.
3. B. J. C. Baxter and A. Iserles, On the foundations of computational
279
Pav,
Numerical
Methods
Course
Notes,
2004
(UCSD),
http://scicomp.ucsd.edu/~spav/pub/numas.pdf.
18. M. Popa .a., Noiuni 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 Universitii Politehnica Bucureti, 1998.
21. M. Stan .a.,
280
Metode Numerice
INDEX
A
mrginit, 56
catastrophic cancellation, 47
algebr Banach, 54
cifr n baza b, 17
algoritm polinomial, 16
cifre semnificative, 36
algoritm stabil, 14
cod complementar, 32
cod direct, 31
aplicaie liniar, 54
cod invers, 31
, 212
coeficieni Newton-Cotes
complementul ortogonal, 56
contracie, 116
conversie, 19
baz ortonormal, 55
finite, 189
baz, 17
bit ascuns, 39
interpolarea, 206
bit de semn, 34
82
281
forma normalizat, 35
175
elemente ortogonale, 55
eroare a datelor, 11
eroare backward, 12
, 212
formula Newton-Cotes
eroare de calcul, 10
precission), 41
precission), 40
eroare de metod, 9
Inf, 39
eroare de rotunjire, 9 , 11
eroare de trunchiere, 9, 11
eroare forward, 12
eroare inerent, 9
matrice diagonal, 58
eroarea absolut, 10
matrice hermitian, 58
eroarea relativ , 10
matrice inversabil, 58
matrice nesingular, 58
matrice ortogonal, 58
matrice simetric, 58
matrice, 74
matrice tridiagonal, 58
factorul de condiionare, 13
matrice unitar, 58
fl(x), 37
matricea unitate, 57
282
Metode Numerice
intervalului), 93
floating-point numbers), 39
metoda coardei, 96
metoda Gauss-Seidel, 87
ordine lexicografic, 17
metoda Jacobi, 83
overflow, 37
pivotare complet, 63
pivotare parial, 63
230
sistemelor liniare, 61
polinoame Legendre,229
sistemelor liniare, 80
minori principali, 60
NaN, 39
negativ definit, 60
divizate, 171
negativ semidefinit, 60
norma 1 ||||1, 57
norma ||||, 57
norm complet, 54
pozitiv definit, 60
pozitiv semidefinit, 60
matrice, 59
precizie a mainii, 38
norm, 53
precizie, 36
norme echivalente, 54
283
produs scalar, 55
sistem de numeraie, 17
sistem ortogonal, 55
sistem ortonormal, 55
116
spaiu Banach, 54
raza spectral, 59
spaiu Hilbert, 55
spaiu normat, 53
spaiu pre-Hilbert, 55
reprezentare complement fa de 2, 32
55
normalizat, 37
spectru, 59
standardul IEEE-754, 39
31
trunchiere, 37
ntregi fr semn, 29
underflow, 37
baza b, 19
valoare proprie, 59
b, 21
vector propriu, 59
cuadratur, 211
zerou al funciei, 91
284