Sunteți pe pagina 1din 15

MMSM I  Laborator #2

5. DERIVAREA NUMERIC€ SI INTEGRAREA NUMERIC€


,

1. Derivarea numeric .
Diferenµe nite progresive, regresive ³i centrale pentru f ′(x).
Fie f ∈ C 2 ([a, b]). Din Teorema lui Taylor rezult , pentru h > 0:

h2
f (x + h) = f (x) + f ′ (x)h + f ′′ (ξ) , ξ ∈ (x, x + h) ⇒
2

f (x + h) − f (x) h f (x + h) − f (x)
f ′ (x) = − f ′′ (ξ) = + O(h) ⇒
h 2 h

f (x + h) − f (x)
f ′ (x) ≈ (1)
h

Relaµia (1) se nume³te formula de apoximare prin diferenµe nite progresive pentru
f ′ (x).
Are loc estimarea erorii de trunchiere:

′ f (x + h) − f (x) h ′′
= |f (ξ)| ≤ h M = O(h)
|et | = f (x) −
h 2 2

unde M = maxt∈[x,x+h] |f ′′ (t)|. Preciz m c  orice funµie continu  pe un interval închis este ³i
m rginit .

Din Teorema lui Taylor rezult , pentru h > 0:


h2
f (x − h) = f (x) − f ′ (x)h + f ′′ (ξ) , ξ ∈ (x − h, x) ⇒
2
f (x) − f (x − h) h f (x) − f (x − h)
f ′ (x) = + f ′′ (ξ) = + O(h)
h 2 h
Obµinem astfel formula de aproximare prin diferenµe nite regresive pentru f ′ (x):
f (x) − f (x − h)
f ′ (x) ≈ (2)
h
cu eroarea de trunchiere, et :

′ f (x) − f (x − h) h ′′ h
|et | = f (x) −
= |f (ξ)| ≤ M = O(h)
h 2 2

1
unde M = maxt∈[x−h,x] |f ′′ (t)|.
Fie f ∈ C 3 [a, b]. Din Teorema lui Taylor rezult , pentru h > 0:
h2 h3
f (x + h) = f (x) + f ′ (x)h + f ′′ (x) + f (3) (ξ1 ) ,
2 6
ξ1 ∈ (x, x + h)
h2 h3
f (x − h) = f (x) − f ′ (x)h + f ′′ (x) − f (3) (ξ2 ) ,
2 6
ξ2 ∈ (x − h, x)

Sc zând a doua relaµie din prima ³i rearanjând termenii, obµinem:


f (x + h) − f (x − h)  (3)  h2
f ′ (x) = − f (ξ1 ) + f (3) (ξ2 ) ,
2h 12
ξ1 ∈ (x, x + h) , ξ2 ∈ (x − h, x)

Obµinem astfel formula de aproximare prin diferenµe nite centrale pentru f ′ (x):
f (x + h) − f (x − h)
f ′ (x) ≈
2h
cu erorea de trunchiere, et :

h2 (3)

′ f (x + h) − f (x − h) = |f (ξ1 ) + f (3) (ξ2 )|
|et | = f (x) −
2h 12
2  h2
h
≤ |f (3) (ξ1 )| + |f (3) (ξ2 )| ≤ M = O(h2 )
12 12
unde M = maxt∈[x,x+h] |f (t)| + maxt∈[x−h,x] |f ′′′ (t)|.
′′′

Diferenµe nite centrale pentru f ′′ (x). Fie f ∈ C 4 [a, b]. Din Teorema lui Taylor rezult ,
pentru h > 0:

′ h2 ′′
(3) h3 (4) h4
f (x + h) = f (x) + f (x)h + f (x) + f (x) + f (ξ1 ) ,
2 6 24
ξ1 ∈ (x, x + h)
′ ′′ h2 (3) h3 (4) h4
f (x − h) = f (x) − f (x)h + f (x) − f (x) + f (ξ2 ) ,
2 6 24
ξ2 ∈ (x − h, x)

Adunând relaµiile de mai sus ³i rearanjând termenii, obµinem:


f (x + h) − 2f (x) + f (x − h)  (4)  h2
f ′′ (x) = − f (ξ1 ) + f (4)
(ξ2 ) ,
h2 24
ξ1 ∈ (x, x + h) , ξ2 ∈ (x − h, x)

Formula de aproximare prin diferenµe nite centrale pentru f ′′ (x) este:


f (x + h) − 2f (x) + f (x − h)
f ′′ (x) ≈
h2

2
cu eroarea de trunchiere, et :
f (x + h) − 2f (x) + f (x − h) h2

′′ 2
|et | = f (x) −

≤ 24 M = O(h )
h2
unde M = maxt∈[x,x+h] |f 4 (t)| + maxt∈[x−h,x] |f 4 (t)|.
Ex. 1 Fie functia f (x) = x3 − 7x2 + 2x + 4, f : [a, b] ⇒ R .
,

a) S  se construiasc  gracul funcµiei pe intervalul [−3, 7].


b) S  se creeze în Python procedurile DifFinProg(X, Y ), DifFinRegr(X, Y ), DifFinCent(X, Y ).
Parametrii de intrare sunt: vectorul X, reprezentând discretizarea a = X1 < . . . < Xn = b;
vectorul Y , reprezentând valoarea funcµiei f în X; Parametrul de ie³ire pentru toate proce-
durile este vectorul dY reprezentând derivata funcµiei f în nodurile x2 , x3 , ..., xn−1 calculat
conform metodelor diferenµe nite progresive, regresive ³i centrale de aproximare a derivatei
de ordinul I.
c) S  se construiasc  grac, derivata funcµiei f pe intervalul (−3, 7) ³i derivata obµinut 
numeric în baza procedurilor de la subpunctul b), pe intervalul (−3, 7) folosind 100 de
puncte.
d) Într-un alt grac construiµi eroarea, reprezentând diferenµa în valoarea absolut  dintre
derivata exact  ³i cea calculat  numeric prin cele trei metode.
Ex. 2(Tem ) Fie functia f (x) = x3 − 7x2 + 2x + 4, f : [a, b] ⇒ R .
,

a) S  se creeze în Python procedura DifFinCent2(X, Y ). Parametrii de intrare sunt: vec-


torul X, reprezentând discretizarea a = X1 < . . . < Xn = b; vectorul Y , reprezentând
valoarea funcµiei f în X; Parametrul de ie³ire ind vectorul d2Y , reprezentând derivata
de ordinul a funcµiei f în nodurile x2 , x3 , ..., xn−1 , calculat conform formulei de aproximare
prin diferente nite centrale pentru derivata de ordinul II.
,

b) S  se construiasc  grac, derivata de ordinul 2 a funcµiei f pe intervalul (−3, 7) ³i derivata


de ordinul 2 obµinut  numeric în baza procedurii de la subpunctul a), pe intervalul (−3, 7)
folosind 100 de puncte.
c) Într-un alt grac construiµi eroarea, reprezentând diferenµa în valoarea absolut  dintre
derivata de ordinul 2 calculat  matematic ³i cea calculat  numeric.
Funcµia gradient din modului Numpy
Secvenµa urm toare calculeaz  derivata funcµiei f (x) = x3 − 7x2 + 2x + 4 pe intervalul [−3, 7]
folosind formula cu diferenµe nite centrale.
1 import numpy as np
2 x = np . l i n s p a c e ( = 3 ,7 ,100)
3 h = x [1] = x [ 0 ]
4 y = x ** 3 = 7 * x ** 2 +2* x+4
5 dy = np . g r a d i e n t ( y , h )
6 p r i n t ( l e n ( dy ) )

Obs.: Funcµia gradient returneaz  un vector dy de aceea³i dimensiune cu x.


Ex. 3(Tem ) Fie urm toarele date: f (x) = sin(x), a = 0, b = π; n = 100

3
S  se construiasc  grac, derivata funcµiei f ³i derivata obµinut  numeric în baza funcµiei
gradient. Într-un alt grac construiµi eroarea, reprezentând diferenµa în modul dintre derivata
exact  ³i cea calculat  numeric.
2. Integrarea numeric .
Fie f : [a, b] −→ R o funcµie integrabil  ³i e
Z b
I(f ) := f (x) dx (3)
a

Formula de cuadratur  a dreptunghiului


 
a+b
I0 (f ) = (b − a) f (4)
2

Formula de cuadratur  a trapezului:


b−ah i
I1 (f ) = f (a) + f (b) (5)
2
Formula de cuadratur  Simpson:

   
b−a a+b
I2 (f ) = f (a) + 4 f + f (b) (6)
6 2

Formula de cuadratur  sumat  a dreptunghiului.


Fie partiµie/diviziune echidistant  a = x1 < x2 < . . . < x2m < x2m+1 = b, m ≥ 1, a intervalului
[a, b]:
m
[  
[a, b] = x2k−1 , x2k+1 ; xk = a + (k − 1)h, k = 1, 2m + 1
k=1

Are loc identitatea:


Z b m Z x2k+1
(7)
X
I(f ) = f (x) dx = f (x) dx
a k=1 x2k−1

Aplic m formula de cuadratur  a dreptunghiului pe ecare subinterval x2k−1 , x2k+1 ⊂ [a, b],
 

k = 1, m

m m
(8)
X X
I0sumata (f ) = f (x2k )(x2k+1 − x2k−1 ) = 2h f (x2k )
k=1 k=1

Formula de cuadratur  sumat  a trapezului. Fie diviziunea echidistant  a = x1 < x2 <


. . . < xm < xm+1 = b, m ≥ 1, a intervalului [a, b]:
m
[  
[a, b] = xk , xk+1 ; xk = a + (k − 1)h , k = 1, m + 1
k=1

4
Are loc identitatea:
Z b m Z xk+1
(9)
X
I(f ) = f (x) dx = f (x) dx
a k=1 xk

În ecare subinterval xk , xk+1 ⊂ [a, b], k = 1, m + 1, consider m nodurile de interpolare xk ³i


 

xk+1 .
Aplic m formula de cuadratur  a trapezului pe ecare subinterval xk , xk+1 ⊂ [a, b], k =
 

1, m + 1

m
X f (xk ) + f (xk+1 )
I1sumata (f ) = · (xk+1 − xk )
k=1
2
m
h X h
= (f (xk ) + f (xk+1 )) = (f (x1 ) + f (x2 )
2 k=1 2 (10)
+ f (x2 ) + f (x3 ) + . . . + f (xm ) + f (xm+1 ))
m
h X
= (f (x1 ) + 2 f (xk ) + f (xm+1 ))
2 k=2

Formula de cuadratur  sumat  Simpson. Fie diviziune echidistant  a = x1 < x2 < . . . <
x2m < x2m+1 = b, m ≥ 1, a intervalului [a, b]:
m
[  
[a, b] = x2k−1 , x2k+1 ; xk = a + (k − 1)h , k = 1, 2m + 1
k=1
b−a
h :=
2m
Are loc identitatea:
Z b m Z x2k+1
(11)
X
I(f ) = f (x) dx = f (x) dx
a k=1 x2k−1

În ecare subinterval x2k−1 , x2k+1 ⊂ [a, b], k = 1, m, consider m nodurile de interpolare x2k−1 ,
 

x2k ³i x2k+1
Aplic m formula de cuadratur  Simpson pe ecare subinterval x2k−1 , x2k+1 ⊂ [a, b], k = 1, m:
 

m  
X 1 4 1
I2sumata (f ) = f (x2k−1 ) + f (x2k ) + f (x2k+1 ) ×
k=1
3 3 3
x2k+1 − x2k−1
× (12)
2
m m−1
h X X
= (f (x1 ) + 4 f (x2k ) + 2 f (x2k+1 ) + f (x2m+1 ))
3 k=1 k=1

5
Ex. 4
a) S  se construiasc  în Python procedura Integrare, având sintaxa
I =Integrare(f, a, b, m, metoda), care calculeaz  valoarea aproximativ  a integralei I(f ) =
Z b
f (x)dx conform formulelor de cuadratur  sumate a dreptunghiului, trapezului ³i Simp-
a
son. Variabila metoda este un ³ir de caractere din mulµimea { 'dreptunghi', 'trapez',
'Simpson'}.
b) S  se calculeze erorile absolute |I(f ) − I0sumata |, |I(f ) − I1sumata |, |I(f ) − I2sumata |
c) Se vor folosi urm toarele date: f (x) = x3 −7x2 +2x+4, [a, b] = [−3, 7], n = 2m+1 = 101 în
cazul metodei dreptunghiului ³i Simpson, ³i n = m + 1 = 101 în cazul metodei trapezului.
Obs. Metoda Simpson r mâne ca tem  de cas .
Submodulul integrate din modului Scipy .
Z b
Submodulul integrate pune la dispoziµie proceduri care calculeaz  numeric I(f ) := f (x) dx.
a
Printre acestea menµion m dou  categorii de funcµii, prima categorie cere ca parametru functia ,

f si limitele intervalului de integrare a, b, iar a doua categorie cere ca parametri doi vectori x si
, ,

y.
Funcµia quad din modulul Integrate
1 import s c i p y as s c
2 f = lambda x : x ** 3 = 7 * x ** 2 +2* x+4
3 a = =3
4 b = 7
5 Iaprox , e r r = s c . i n t e g r a t e . quad ( f , a , b )
6 p r i n t ( Iaprox )

Funcµia quad returneaz  un tuplu care conµine valoarea aproximativ  a integralei, Iaprox ³i o
estimare a erorii absolute, err.
Dac  funcµia f are una sau mai multe variabile, subrutina quad integreaz  funcµia în raport cu
prima variabil . Se pot specica valori pentru variabilele opµionale, atribuind parametrului args
în lista parametrilor funcµiei quad, un tuplu cu valorile variabilelor opµionale.
1 import s c i p y as s c
2 f = lambda x , a1 , a2 , a3 , a4 : 1 * x ** 3 +a2 * x ** 2 +a3 * x+a4
3 a = =3
4 b = 7
5 Iaprox , e r r = s c . i n t e g r a t e . quad ( f , a , b , a r g s = ( 1 , = 7, 2 , 4) )
6 p r i n t ( Iaprox )

Funcµiile trapz ³i simps din modulul Integrate


Pentru a calcula integrala, funcµiile trapz ³i simps primesc drept parametri doi vectori, x ³i
y - calculat în baza funcµiei f (x). Specic m faptul c  vectorul y se va scrie primul în lista
parametrilor.
1 f = lambda x : x ** 3 = 7 * x ** 2 +2* x+4
2 a = =3
3 b = 7

6
4 n = 100
5 x = np . l i n s p a c e ( a , b , n )
6 y = f (x)
7 I_trapz = s c . i n t e g r a t e . t r a p z ( y , x )
8 p r i n t ( I_trapz )
9 I_simps = s c . i n t e g r a t e . simps ( y , x )
10 p r i n t ( I_simps )

Obs.: Pentru o aproximare mai bun  se va alege o disrcetizare mai n , de exemplu n = 1000.
6. CALCUL SIMBOLIC
Calculul simbolic este pentru manipularea si evaluarea expresiilor algebrice. Variabilele inde-
,

pendente care apar în expresii sunt denite simbolic folosind caractere sau siruri de caractere. ,

1 import sympy as sp # Modulul sympy n e c e s a r c a l c u l u l u i s i m b o l i c .

Variabilele simbolice se pot deni în mai multe moduri, folosind una dintre variantele: sm.Symbol,
sp.symbols si sp.var.
,

Este foarte important s  se dea cât mai multe informatii despre natura variabilelor simbolice.
,

Acest lucru va ajuta Python s  manipuleze si s  simplice mai ecient expresiile analitice.
,

1 x = sp . Symbol ( "x" ) #D e c l a r a r e a v a r i a b i l e i s i m b o l i c e x , d e s p r e c a r e nu s e ³ t i e dac


  e s t e sau nu r e a l  
2 y = sp . Symbol ( "y" , r e a l=True ) #D e c l a r a r e a u n e i v a r i a b i l e despe c a r e s e ³ t i e c  
este real  
3 z = sp . Symbol ( " z " , imaginary=True ) #D e c l a r a r e a u n e i v a r i a b i l e s i m b o l i c e complexe ,
având doar p a r t e imaginar   .

Alte tipuri de restrictii pe care le suport  variabile simbolice si cuvintele cheie cu care se veric 
, ,

tipul lor.
Tipul variabilei simbolice Atributul prin care se veric  tipul variabilei simbolice
real is real
imaginary is imaginary
positive is positive
negative is negative
integer is integer
odd is odd (se refera doar la intregi)
even is even (se refera doar la intregi)
prime is prime (se refera doar la intregi)
1 x = sp . Symbol ( "x" )
2 y = sp . Symbol ( "y" , p o s i t i v e=True )
3 sp . p p r i n t ( sp . s q r t ( x ** 2) )
4 sp . p p r i n t ( sp . s q r t ( y ** 2) )#A e x t r a s r   dacina p  t r a t   µ i n ând cont de f a p t u l c   y
este pozitiv

Functia sp.pprint (pretty print) aseaz  expresiile simbolice într-o form  cât mai natural ,
, ,

aproape de scrierea matematic .


1 n1 = sp . Symbol ( "n" )
2 n2 = sp . Symbol ( "n" , i n t e g e r=True )
3 n3 = sp . Symbol ( "n" , odd=True )
4 p r i n t ( f ' c o s ( n p i ) e s t e { sp . c o s ( n1 * p i ) } daca n nu e s t e s p e c i f i c a t ' )

7
5 p r i n t ( f ' c o s ( n p i ) e s t e { sp . c o s ( n2 * p i ) } daca n e s t e i n t r e g ' )
6 p r i n t ( f ' c o s ( n p i ) e s t e { sp . c o s ( n3 * p i ) } daca n e s t e i n t r e g s i par ' )

Constante si simboluri speciale


,

1 sp . p p r i n t ( sp . p i ) #Constanta p i
2 sp . p p r i n t ( sp . E) #Constanta Euler
3 sp . p p r i n t ( sp . oo ) #I n f i n i t

Reprezentarea numerelor rationale ,

1 #Repr ezen tar ea numerelor ra µ i o n a l e de forma a/b .


2 #S i nt a x a : sp . R a t i o n a l ( a , b )
3 p r i n t ( sp . R a t i o n a l ( 1 , 2 ) )

Operatii cu numere rationale


, ,

1 r1 = sp . R a t i o n a l ( 2 , 3)
2 r2 = sp . R a t i o n a l ( 4 , 5)
3 exp = r1 * r2 + r2 / r1
4 sp . p p r i n t ( exp )

Functii simbolice
,

1 x , y , z = sp . symbols ( "x , y , z " )


2 f = sp . Function ( " f " ) #D e f i n i r e a u n e i func µ i i a b s t r a c t e f a r   a s e cuno ³ t e î n
p r e a l a b i l at â t v a r i a b i l e l e , c â t ³ i e x p r e s i a a c e s t e i a .
3 type ( f )# Func µ i e n e d e f i n i t  
4 #Aceasta func µ i e poate f i a p e l a t   cu una , dou  sau mai multe v a r i a b i l e dac  
a c e s t e a au f o s t d e c l a r a t e s i m b o l i c .
5 print ( f (x) )
6 print ( f (x , y) )
7 print ( f (x , y , z ) )

1 g = sp . Function ( "g" ) ( x , y , z ) #D e c l a r a r e a u n e i func µ i i a b s t r a c t e pentru c a r e s e


cunosc v a r i a b i l e l e .
2 g #Apelul s e f a c e cu numele func µ i e i f a r   a s e p r e c i z a v a r i a b i l e l e
3 g . free_symbols #s e a f i ³ eaza mul µ imea v a r i a b i l e l o r func µ i e i g

Expresiile simbolice si manipularea acestora


,

1 x = sp . Symbol ( "x" )
2 expr = 1 + 2 * x ** 2 + 3 * x ** 3
3 sp . p p r i n t ( expr )
4

5 #S i m p l i f i c a r e a u n e i e x p r e s i i cu sp . s i m p l i f y ( )
6 expr = 2 * ( x ** 2 = x ) = x * ( x + 1)
7 sp . p p r i n t ( expr )
8 sp . p p r i n t ( sp . s i m p l i f y ( expr ) )
9

10 #D e s f a c e r e a p a r a n t e z e l o r u n e i e x p r e s i i
11 expr = ( x + 1) * ( x + 2)
12 sp . p p r i n t ( sp . expand ( expr ) )
13

14 # S c r i e r e a e x p r e s i e i ca produs de f a c t o r i primi
15 sp . p p r i n t ( sp . f a c t o r ( x ** 2 = 1) )
16

8
17 # c o l l e c t ( ) r e s c r i e e x p r e s i a sub forma unui polinom dupa v a r i a b i l a p r e c i z a t a
18 expr = x + y + x * y * z + x ** 2 * y
19 sp . p p r i n t ( expr . c o l l e c t ( x ) )
20 sp . p p r i n t ( expr . c o l l e c t ( y ) )
21

22 #Descompunerea i n f r a c t i i s i m p l e f o l o s i n d func µ i a sp . apart ( Expresie , x )


23 sp . apart ( 1 / ( x ** 2 + 3 * x + 2) , x )
24

25 #Aducerea l a numitor comun


26 sp . t o g e t h e r (1 / ( y * x + y ) + 1 / (1 + x ) )
27

28 #S i m p l i f i c a r e a u n e i f r a c t i i
29 sp . c a n c e l ( y / ( y * x + y ) )
30

31 #S u b s t i t u µ i a u n e i v a r i a b i l e , sau a mai multor v a r i a b i l e î ntr =o e x p r e s i e s i m b o l i c  


.
32

33 expr_subs = expr . subs ( x , x+1)


34 sp . p p r i n t ( expr_subs )
35 sp . p p r i n t ( sp . expand ( expr_subs ) ) #D e s f a c e r e a p a r a n t e z e l o r

Dac  expresia depinde de mai multe variabile si se doreste a se înlocui aceste variabile cu noi ex-
, ,

presii, atunci metoda subs va primi drept parametru un dictionar cu cuvinte cheie, variabile care
,

se înlocuiesc, iar valorile pentru cuvintele cheie ind expresiile cu care se înlocuiesc variabilele.
1 x , y , z = sm . symbols ( "x , y , z " )
2 f = x ** 2 + y ** 2 + 2 * z
3 f_subs = f . subs ({ x : x+1, y : y+2, z : x })
4 sp . p p r i n t ( f_subs )

Se pot deni functii simbolice în baza unor expresii simbolice.


,

1 # S in t a x a : nume_fun = sp . Lambda( tuplu_argumente , e x p r e s i e )


2 h = sp . Lambda( x , x ** 2)
3 p r i n t ( h ( 3 ) ) #Evaluarea func µ i e i h i n 3
4 p r i n t ( h(1+x ) )#Evaluarea s i m b o l i c   a func µ i e i î n c a z u l î n c a r e argumentul e s t e o
expresie simbolic   .
5

6 g = sp . Lambda ( ( x , y ) , x **2+y * * 2)#Func µ i e cu dou  v a r i a b i l e .


7 p r i n t ( g ( x+1,y+1) )

Evaluarea numeric 
Pentru evaluarea numeric  a unei expresii putem folosi metoda evalf. În cazul în care functia f ,

are mai multe variabile, metoda evalf primeste ca parametru un dictionar cu sintaxa:
, ,

1 x , y , z = sp . symbols ( "x , y , z " )


2 f = x ** 2 + y ** 2 + 2 * z
3 f . e v a l f ( subs = {x : 1 . 5 , y : 3 . 2 , z : 1 . 2 } )

sau, mai simplu, se pot construi functii numerice în baza unei expresii simbolice folosind funcµia
,

lambdify care prime³te ca parametri un tuplu/list  de variabile ³i expresia în baza c reia dorim

s  construim funcµia.
1 func_num = sp . lambdify ( ( x , y , z ) , f )

9
Obs.: Functiile denite cu sintaxa lambdify primesc ca argumente valori scalare. Dac  îns 
,

se doreste ca functia s  primeasc  ca argumente vectori sau matrice, se va ad uga la lista


, ,

parametrilor sirul de caractere 'numpy' .


,

1 func_num = sp . lambdify ( ( x , y , z ) , f , 'numpy ' )


2 import numpy as np
3 a = np . a r r a y ( [ 0 . 1 , 0 . 2 , 0 . 3 ] )
4 func_num ( a , a , a )

Derivarea si integrarea simbolic 


,

D m mai jos dou  secvente de cod care calculeaz  simbolic derivata, respectiv integrala
,

1 x , y , z = sp . symbols ( "x , y , z " )


2 expr = x ** 4 + x ** 3 + x ** 2 + x + 1
3 expr . d i f f ( x ) #Prima d e r i v a t  
4 expr . d i f f ( x , x ) #A doua d e r i v a t  
5

6 expr = ( x + 1) ** 3 * y ** 2 * ( z = 1)
7 expr . d i f f ( x , y , z )#D e ri v a ta de o r d i n u l 3 î n r a p o r t cu v a r i a b i l e l e x , y , z

1 expr = x ** 4 + x ** 3 + x ** 2 + x + 1
2 a = 0
3 b = 1
4 sp . i n t e g r a t e ( expr , ( x , a , b ) )#C a l c u l e a z a i n t e g r a l a d e f i n i t  

Rezolvarea ecuaµiilor
1 x = sp . Symbol ( "x" )
2 s o l = sp . s o l v e ( x ** 2 + 2 * x = 3)

Funcµia solve returneaz  soluµiile ecuaµiei x2 + 2x − 3 = 0 sub forma unei liste.


Dac  ecuaµia depinde ³i de alµi parametri, trebuie s  se precizeze în plus variabila în raport cu
care se rezolv  ecuaµia.
1 x = sp . Symbol ( "x" )
2 a , b , c = sp . symbols ( "a , b , c " )
3 sp . s o l v e ( a * x ** 2 + b * x + c , x )

Funcµia solve rezolv  chiar ³i sisteme de ecuaµii, în cazul acesta funcµia prime³te ca parametri o
list  de expresii, reprezentând ecuaµiile sistemului, ³i o list  de variabile reprezentând necunos-
cutele sistemului.
1 x,y = sp . symbols ( "x , y" )
2 eq1 = x + 2 * y = 1
3 eq2 = x = y + 1
4 sol = sp . s o l v e ( [ eq1 , eq2 ] , [ x , y ] , d i c t=True ) #d i c t = True dac   s e dore ³ t e
r e p r e z e n t a r e a s o l u µ i e i sub forma unui d i c µ i o n a r
5 print ( sol )

Obs.: Funcµia solve returneaz  o list  de dicµionare, reprezentând soluµiile sistemului.


Ex. 5 Fie functia f (x) = x3 − 7x2 + 2x + 4 pe intervalul [−3, 7].
,

1. S  se construiasc  gracul funcµiei f pe intervalul precizat. Pentru denirea funcµiei se va


folosi sintaxa lambdif y .

10
2. S  se calculeze simbolic, prima ³i a doua derivat  ³i s  se construiasc  gracele acestora
pe acela³i interval în aceea³i gur .
3. S  se ae zerourile funcµiei f (x) ³i punctele de extrem ³i s  se construiasc  pe gracul
funcµiei.
Ex. 6 Fie sistemul
(
x2 + y 2 = 9
(13)
y = x2

1. S  se construiasc  grac cele dou  curbe.


2. S  se ae punctele lor de intersecµie (folosind funcµia solve) ³i s  se construiasc  pe grac.
7. Rezolvarea numeric  a ecuaµiilor diferenµiale. Metode de tip Runge-Kutta.
Consider m în continuare problema Cauchy asociat  ecuaµiei diferenµiale de ordinul întâi:

 dx
= f (t, x)
dt (14)
x(t ) = x
init init

unde f (·, ·) : D ⊆ R × R → R, iar t ∈ [tinit , tf ]


D m mai jos câteva metode de rezolvare a ecuaµiilor diferenµiale de ordinul 1 cu date iniµiale,
f r  a  demonstrate. Ne propunem s  calcul m numeric valorile functiei necunoscute x(t) în
,

nodurile discretiz tii (ti )i=1,N a intervalului [tinit , tf ], i.e. xi = x(ti ), i = 1, N .


Metoda punctului central. ALGORITM (Metoda punctului central)
Date de intrare: f, tinit , tf , xinit , N ;
Date de ie³ire: (ti )i=1,N , (xi )i=1,N .
tf − tinit
STEP 1: t1 = tinit ; h = ;
N −1
for i = 2 : N do
ti = ti−1 + h;
endfor
x1 = xinit ;
STEP 2: for i = 1 : N − 1 do
K1 = hf (ti , xi );
h K1
K2 = hf (ti + , xi + );
2 2
xi+1 = xi + K2 ;
endfor
ALGORITM (Metoda Heun)

11
Date de intrare: f, tinit , tf , xinit , N ;
Date de ie³ire: (ti )i=1 , (xi )i=1,N .
tf − tinit
STEP 1: t1 = tinit ; h = ;
N −1
for i = 2 : N do
ti = ti−1 + h;
endfor
x1 = xinit ;
STEP 2: for i = 1 : N − 1 do
K1 = hf (ti , xi );
2 2
K2 = hf (ti + h, xi + K1 );
3 3
1
xi+1 = xi + (K1 + 3K2 );
4
endfor
ALGORITM (Metoda Runge-Kutta de ordinul 4)
Date de intrare: f, tinit , tf , xinit , N ; Date de ie³ire: (ti )i=1,N , (xi )i=1,N .
tf − tinit
STEP 1: t1 = tinit ; h = ;
N −1
for i = 2 : N do
ti = ti−1 + h;
endfor
x1 = xinit ;
STEP 2: for i = 1 : N − 1 do
K1 = hf (ti , xi );
h K1
K2 = hf (ti + , xi + );
2 2
h K2
K3 = hf (ti + , xi + );
2 2
K4 = hf (ti + h, xi + K3 );
1
xi+1 = xi + (K1 + 2K2 + 2K3 + K4 );
6
endfor

Ex. 7 Fie urm toarea problem  Cauchy:



 dx
= t − 2x
dt (15)
x(0) = 1

Vom rezolva în continuare simbolic ecuaµia diferenµial  folosind modulul sympy.

1 import sympy as sp
2 t = sp . symbols ( " t " ) #Se d e c l a r   v a r i a b i l a s i m b o l i c  
3 x = sp . Function ( "x" ) # Se d e f i n e ³ t e func µ i a a b s t r a c t   f a r   a s e cunoa ³ t e î n
p r e a l a b i l , at â t v a r i a b i l e l e c â t ³ i e x p r e s i a a c e s t e i a
4 ode = x ( t ) . d i f f ( t ) = t = 2 * x ( t )# Se d e f i n e s t e e x p r e s i a s i m b o l i c   x ' ( t ) = f ( t , x ) ,
r e p r e z e n t ând membrul s t âng a l ecua µ i e i x ' ( t ) = f ( t , x ) = 0
5 ode_sol = sp . d s o l v e ( ode )#Rezolv   ecua µ i a d i f e r e n µ i a l  
6 sp . p p r i n t ( ode_sol )

12
Funcµia sp.dsolve g se³te soluµia general  a ecuatiei diferentiale care depinde de constanta de integrare C1 .
, ,

Aceasta va  calculat  conform condiµiei iniµiale. Valoarea pe care o returneaz  sp.dsolve este o egalitate
reprezentând simbolic soluµia ecuatiei diferentiale. Atributele instanµei ode_sol sunt lhs pentru a accesa termenul
, ,

din stânga ³i rhs pentru accesarea termenului din dreapta.


1 p r i n t ( ode_sol . l h s )
2 p r i n t ( ode_sol . r h s )

Pentru calculul constantei C1 vom proceda dup  cum urmeaz :


1 cond_init = {x ( 0 ) : 1 } #Definim un d i c µ i o n a r cu d a t e l e i n i µ i a l e
2 C_eq = ode_sol . subs ( t , 0) . subs ( cond_init ) #S u b s t i t u i e î n s o l u µ i e condi µ i a i n i µ
ial 
3 sp . p p r i n t (C_eq) #Returneaz   o ecua µ i e î n r a p o r t cu C1
4 C1 = sp . symbols ( 'C1 ' )
5 C_sol = sp . s o l v e (C_eq , C1) #A f l   s o l u µ i a ecua µ i e i î n C1
6 p r i n t ( C_sol ) #Returneaz   o l i s t   cu v a l o a r e l u i C1
7 s o l = ode_sol . r h s
8 s o l _ f i n = s o l . subs ({C1 : C_sol [ 0 ] } )
9 sol_fun=sp . lambdify ( t , ode_sol , 'numpy ' ) #Construim o func \ c t i e v e c t o r i z a t \u a
\^ i n baza u n e i e x p r e s i i s i m b o l i c e .

Ex. 8 S  se rezolve simbolic problema Cauchy.



x′ (t) = 2 x + t2 cos(t)
t (16)
x(π/2) = 1

S  se construiasc  grac soluµia pe intervalul [π/2, 2π].


Python poate rezolva simbolic ³i sisteme de ecuaµii diferenµiale.
Ex. 9 S  se rezolve sistemul
(
x′ (t) = 5x − 3y + 8
(17)
y ′ (t) = x + y + 32t

cu condiµiile x(0) = 2, y(0) = 0


S  se ae soluµia sistemului cu datele iniµiale. Urm toarea secvenµ  rezolv  simbolic sistemul dat f  r  condiµiile
iniµiale. Soluµia care satisface suplimentar condiµiile iniµiale se va calcula individual.
1 import sympy as sp
2 from sympy . s o l v e r s . ode . systems import dsolve_system
3 t = sp . symbols ( " t " )
4 x = sp . Function ( "x" )
5 y = sp . Function ( ' y ' )
6 eqs = [ x ( t ) . d i f f ( t ) = 5 * x ( t ) + 3 * y ( t ) = 8 , y ( t ) . d i f f ( t ) = x ( t ) = y ( t ) = 32 *
t ] #Se d e f i n e s c ecua µ i i l e sub forma u n e i l i s t e
7 ode_sol = dsolve_system ( eqs )
8 p r i n t ( ode_sol ) #A f i s e a z a s o l u t i a f o l o s i n d i n t e g r a l e f o r m a l e
9 #ode_sol r e p r e z i n t a o l i s t a de l i s t e e l e m e n t e l e c a r e i a sunt e g a l i t a t i
10 x_sol = ode_sol [ 0 ] [ 0 ] . r h s . d o i t ( ) #Metoda d o i t ( ) c a l c u l e a z a e x p l i c i t i n t e g r a l a sau
derivata .
11 y_sol = ode_sol [ 0 ] [ 1 ] . r h s . d o i t ( )

Rezolvarea numeric  a problemei Cauchy

Fie, din nou, problema Cauchy

13

x′ (t) = 2 x + t2 cos(t)
t (18)
x(π/2) = 1

Urm toarea secvenµ  rezolv  numeric problema Cauchy pe intervalul [π/2, 2π] în baza functiei , integrate.odeint
din modulul scipy.
1 import s c i p y as s c
2 t = sp . symbols ( " t " )
3 x = sp . Function ( "x" )
4 f = 2/ t * x ( t ) + t ** 2 * sp . c o s ( t )#E x p r e s i a s i m b o l i c   d e s c r i i n d ecua µ i a d i f e r e n µ
ial 
5 f_np = sp . lambdify ( ( x ( t ) , t ) , f , 'numpy ' ) #Construc µ i a î n baza e x p r e s i e i s i m b o l i c e
f a u n e i func µ i i numerice c a r e prime ³ t e ca parametru v e c t o r i sau m a t r i c e din
numpy .
6 x0 = 1
7 tp = np . l i n s p a c e ( np . p i /2 ,2 * np . p i , 100 ) #D i s c r e t i z a r e a i n t e r v a l u l u i de s t u d i u
8 xp = s c . i n t e g r a t e . o d e i n t ( f_np , x0 , tp ) #C a l c u l u l s o l u µ i e i numerice a p ro b l e m e i
Cauchy

S  se reprezinte grac.
Rezolvarea numeric  a unui sistem de ecuaµii liniare cu date iniµiale

Fie sistemul
(
x′ (t) = 5x − 3y + 8
(19)
y ′ (t) = x + y + 32t

cu condiµiile x(0) = 2, y(0) = 0


1 import s c i p y as s c
2 t = sp . symbols ( " t " )
3 x = sp . Function ( "x" )
4 y = sp . Function ( "y" )
5 f_np = sp . lambdify ( ( ( x ( t ) , y ( t ) ) , t ) , (5 * x ( t ) = 3 * y ( t ) +8, x ( t )+y ( t ) +32* t ) , 'numpy ' )
6 #Func µ i a f_np depinde de t u p l u l ( x ( t ) , y ( t ) ) ³ i t , i a r a l d o i l e a parametru
r e p r e z i n t   un tup lu format din e x p r e s i i l e c e l o r dou  ecua µ i i a l e s i s t e m u l u i
7

8 x0 = ( 2 , 0 ) #Un tuplu cu d a t e l e i n i t i a l e
9 tp = np . l i n s p a c e ( 0 , 1 , 100 )
10 xp = s c . i n t e g r a t e . o d e i n t ( f_np , x0 , tp )

sau
1 import s c i p y as s c
2 t = sp . symbols ( " t " )
3 x = sp . Function ( "x" )
4 y = sp . Function ( "y" )
5 d e f f ( xy , t ) :
6 x , y = xy
7 r e t u r n [ 5 * x = 3 * y +8,x+y+32* t ] #sau tupl u
8 x0 = ( 2 , 0 )
9 tp = np . l i n s p a c e ( 0 , 1 , 100 )
10 xp = s c . i n t e g r a t e . o d e i n t ( f , x0 , tp )

S  se reprezinte grac functiile x = x(t), y = y(t) calculate numeric.


,

Ex.10 S  se rezolve problema de la Ex. 8 conform algoritmilor:

14
1. Metoda punctului central
2. Metoda Heun
3. Metoda Runge-Kutta

S  se reprezinte grac solutia si s  se reprezinte eroarea, i.e. diferenta în valoarea absolut  dintre solutia calculat 
, , , ,

simbolic si cea calculat  numeric.


,

Ex. 11 S  se rezolve problema de la Ex. 9 conform algoritmilor:

1. Metoda punctului central


2. Metoda Heun
3. Metoda Runge-Kutta

Obs.: Algoritmii se vor adapta pentru cazul sistemelor de ecuaµii diferenµiale. Întrucât functia f = (f1 , f2 ) are
,

dou  componente, se vor construi K1, K2, K3, K4 m rimi cu dou  comonente, prima component  va  folosit 
pentru calculul solutiei x = x(t), iar cealalt  component  va  folosit  la determinarea numeric  a solutiei
, ,

y = y(t). S  se reprezinte grac solutia x = x(t), y = y(t) pe intervalul [0, 1].


,

15

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