Sunteți pe pagina 1din 38

CURSUL 2

Rezolvarea ecuatiilor
neliniare
6 octombrie 2015

Profile de utilizator instrumente informatice de inginerie de proces


Utilizatori de nivel I

Utilizatori de nivel II

Dezvolta modele din principiile primare


Proiecteaza interfete publice pentru modele
Dezvolta si intretin biblioteci de modele
Dezvolta modele (in principal) utilizand bibliotecile de modele si flowsheet-uri
drag-and-drop
Utilizeaza flowsheet-uri sa specifice intrari-cheie si sa acceseze iesiri-cheie

Utilizatori de nivel III

nu dezvolta modele / nu e interesat de modelare


utilizeaza modele pre-existente sau dezvoltate de utilizatorii de nivel I & II cu
intrari bine definite

Metode de determinare a
radacinilor ecuatiilor
2.1 Metoda Bisectiei
2.2 Metoda Regulei Falsi si Metoda Secantei
2.3 Metoda Newton
2.4 Metoda Muller
2.5 Metoda Punctului Fix
2.6 Metode implementate in MATLAB

Radacinile Ecuatiilor

Este prima metoda numerica ce o invatam

Calculul radacinilor unei ecuatii

adica gasirea valorii x* pentru care functia


y = f(x) = 0
Acesta este unul dintre cele mai frecvente
calcule din inginerie

Doua abordari fundamentale


Metode de izolare (bracketing)
Metoda Bisectiei
Metoda Regulei Falsi (Pozitiei False)
Metode deschise
Metoda Secantei
Metoda Newton
Metoda Muller
Metoda Punctului Fix

Exemplu

In mecanica fluidelor, se utilizeaza ecuatia


Manning pentru canale deschise

1
2/3 1/2
Q AR S
n

Q este debitul volumetric (m3/s)


A este sectiunea tranversala a canalului
R este raza hidraulica
S este gradientul de energie
n este coeficientul Manning

Ecuatia Manning
Raza hidraulica se defineste astfel

A
R
P
unde A este aria transversala
P este perimetrul udat
1 A
Q A
n P

2/3

1/2

Pentru un canal dreptunghiular


Aria udata A = bh
Perimetrul udat = b+2h

h
b

1 bh
1/2
Q
S
2/3
n b 2h
5/3

1 bh
1/2
Q
S
2/3
n b 2h
5/3

Presupunem ca se dau : panta canalului


(aproximativ egala cu gradientul de
energie S), coeficientul Manning n, latimea
canalului b si debitul Q. Se cere sa se
calculeze cat de adanca va fi apa?

Nu este usor deoarece ecuatia nu se rezolva


analitic in raport cu h

Dar se poate obtine solutie grafica sau


numerica!

Metoda Grafica

Metoda grafica in principiu consta in


reprezentarea graficului functiei de h. Acolo unde
graficul functiei intersecteaza axa absciselor se
localizeaza radacina.

Examplu:

1 bh
1/2
Q
S

2/3
n b 2h
5/3

1 bh
1/2
f(h) Q
S
0
2/3
n b 2h
5/3

Fiind date n, Q, S si b, sa se traseze graficul f(h)


vs h si sa se localizeze radacina

Script MATLAB :
Reprezentarea grafica a ecuatiei Manning
% Manning's equation for open channel flow
% channel water depth = h
b = input('channel width b(m) = ')
Q = input('volume flow rate Q(m^3/s) = ')
S = input('energy gradient S =')
n = input('Manning coefficient n = ')
h=0:0.5:10;
y = Q -1/n*(b*h).^(5/3)./(b+2*h).^(2/3)*sqrt(S);
format short g; [h' y']
H=plot(h,y,'ro-'); grid on;
set(H,'LineWidth',2.0); set(H,'MarkerSize',7.0);
xlabel('Water Depth h'); ylabel('f(h)');
Title('Manning Equation for Open Channel Flow');

h
f(h)
0
1000
0.5
981.21
1
941.58
1.5
887.51
2
821.89
2.5
746.59
3
663.00
3.5
572.17
4
474.94
4.5
372.03
5
264.01
5.5
151.39
6
34.586
6.5
-86.02
7
-210.10
7.5
-337.38
8
-467.59
8.5
-600.52
9
-735.95
9.5
-873.71
10 -1013.60

Evaluarea Functiei
b = 30m, Q =1000m3/s, S = 0.002, n = 0.022

Metoda Grafica
Metoda

grafica este utila pentru a


avea o idee generala asupra
problemei, aprecierea facandu-se
vizual.

In

continuare se prezinta Metoda


Bisectiei de aproximare a radacinii.

Metoda Bisectiei
f(x)

1. Se alege un interval care contine o radacina


2. Se imparte intervalul in doua subintervale egale
3. Se determina subintervalul care contine radacina
4. Se repeta pasii 2 si 3 pana cand eroarea este mai mica decat
o toleranta specificata

Metoda Bisectiei

1. Se aleg limitele inferioara si superioara ale intervalului ce


contine radacina [a,b] astfel incat f(a).f(b)< 0
2. Se estimeaza radacina prin punctul median (bisectie)
m xk

xl xu a b

2
2

3. Radacina trebuie sa se gaseasca fie in [a,m] fie in [m,b]


Daca f(a) . f(m) < 0, atunci a < xr < m se ia b = m
f(a) . f(m) = 0, atunci xr = m
f(a) . f(m) > 0, atunci m < xr < b se ia a = m
f(b)

a
f(a)

m
f(m)

Metoda Bisectiei (cont.)


4. Se repeta pasii 2 si 3 pana cand se atinge convergenta

(a) f(x k ) 0, i.e., f(x k )


xk 1 xk
(b) a
s in iteratii succesive
xk 1
(c) numarul maximum de iteratii a fost atins

x1 x*
x3

x2

Convergenta nu este monotona :


x1 este mai aproape de radacina decat x2 sau x3

Examplu de calcul
Exemplu : fie f ( x ) x 2 2 x 3 0

Metoda
Bisectiei estimarea initiala este a,b 2.0, 3.2
iter
1
2
3
4
5
6

a
2.0
2.6
2.9
2.9
2.975
2.975

b
3.2
3.2
3.2
3.05
3.05
3.0125

xi
f ( xi )
x i
2.6
1.44
1.2
2.9
0.39
0.6
3.05
0.2025
0.3
2.975
0.0994
0.15
3.0125
0.0502
0.075
2.99375 0.02496 0.0375

function [x,y] = bisect2(fun)


% Find root near x1 using the bisection method.
% Input: fun
string containing name of function
%
a,b
initial guesses
%
tol
allowable tolerance in computed root
%
max
maximum number of iterations
% Output: x
row vector of approximations to root
a = input('enter lower bound a = ');
b = input('enter upper bound b = ');
tol = input('allowable tolerance tol = ');
max = input('maximum number of iterations max = ');
a(1)=a; b(1)=b;
ya(1)=feval(fun,a(1)); yb(1)=feval(fun,b(1));
if ya(1)*yb(1) > 0.0
error('Function has same sign at end points')
end
for i=1:max
x(i)=(a(i)+b(i))/2; y(i)=feval(fun,x(i));
if((x(i)-a(i))<tol)
disp('Bisection method has converged'); break;
end
if y(i)==0.0
disp('exact zero found'); break;
elseif y(i)*ya(i) < 0
a(i+1)=a(i); ya(i+1)=ya(i);
b(i+1)=x(i); yb(i+1)=y(i);
else
a(i+1)=x(i); ya(i+1)=y(i);
b(i+1)=b(i); yb(i+1)=yb(i);
end;
iter=i;
end
if(iter >= max)
disp('zero not found to desired tolerance');
end
n=length(x); k=1:n; out = [k' a(1:n)' b(1:n)' x' y'];
disp('
step
a
b
x
y')
disp(out)

incheiere: se
termina cu bucla
for sau while

yb
ya
a

y
x

Exemplu: Metoda Bisectiei


1. Sa se aproximeze radacina ecuatiei Manning

1 bh
1/2
f(h) Q
S 0
2/3
n b 2h
5/3

2. Sa se aproximeze radacina ecuatiilor

f(x)e

x 0
2

f ( x ) x 3x 1 0
3

Metoda Bisectiei pentru ecuatia Manning


bisect2('manning')
enter lower bound a = 0
enter upper bound b = 10
allowable tolerance tol = 0.00001
maximum number of iterations max = 50
Bisection method has converged
step
a
b
x
y
1.0000
0
10.0000
5.0000 264.0114
2.0000
5.0000
10.0000
7.5000 -337.3800
3.0000
5.0000
7.5000
6.2500 -25.2627
4.0000
5.0000
6.2500
5.6250 122.5629
5.0000
5.6250
6.2500
5.9375
49.4013
6.0000
5.9375
6.2500
6.0938
12.2517
7.0000
6.0938
6.2500
6.1719
-6.4605
8.0000
6.0938
6.1719
6.1328
2.9069
9.0000
6.1328
6.1719
6.1523
-1.7740
10.0000
6.1328
6.1523
6.1426
0.5672
11.0000
6.1426
6.1523
6.1475
-0.6032
12.0000
6.1426
6.1475
6.1450
-0.0180
13.0000
6.1426
6.1450
6.1438
0.2746
14.0000
6.1438
6.1450
6.1444
0.1283
15.0000
6.1444
6.1450
6.1447
0.0552
16.0000
6.1447
6.1450
6.1449
0.0186
17.0000
6.1449
6.1450
6.1449
0.0003
18.0000
6.1449
6.1450
6.1450
-0.0088
19.0000
6.1449
6.1450
6.1450
-0.0042
20.0000
6.1449
6.1450
6.1450
-0.0020

x=-2:0.1:2; y=my_func(x); z=x*0;


H=plot(x,y,'r'); hold on; plot(x,z); grid on;
set(H,'LineWidth',3.0);
xlabel('x'); ylabel('y'); title('f(x) = x^3 - 3x + 1 = 0');

Metode de determinare a
radacinilor ecuatiilor
2.1 Metoda Bisectiei
2.2 Metoda Regulei Falsi si Metoda Secantei
2.3 Metoda Newton
2.4 Metoda Muller
2.5 Metoda Punctului Fix
2.6 Metode implementate in MATLAB

Metoda Pozitiei False


De ce sa studiem alta metoda ?

Metoda bisectiei este simpla si garanteaza


convergenta (radacina este localizata)
Dar convergenta este lenta si nu e monotona !
Metoda bisectiei este grosiera si nu tine cont de
informatii asupra functiei
Se considera doar semnul functiei, nu si valoarea
acesteia f(xk )
Metoda pozitiei false (Regula Falsi) utilizeaza
curbura functiei
Metoda Pozitiei False poate converge mai repede

Metoda Pozitiei False


y(b)

y(x)
linie secanta
a xi

b
x*

y(a)
Aproximare liniara a curbei graficului functiei

Metoda Pozitiei False

Din consideratii de geometrie, triunghiurile


asemenea au rapoarte egale ale laturilor

y (b) y ( a ) y (b) y ( xi )
panta

ba
b xi

Noua aproximare pentru radacina : y(xi ) ~ 0

Aceasta se poate rearanja pentru a obtine formula


Pozitiei False

y b
xi b b a
y (b) y (a)

Algoritmul Metodei Pozitiei False


1. Se initializeaza cu intervalul [a, b] unde y(a) . y(b) < 0
(este nevoie de localizarea radacinii)
2. Se traseaza o linie dreapta pentru a aproxima radacina
y ( xi ) 0

y b
xi b b a
y (b) y (a )

3. Se verifica semnele produselor y(a) . y(x) si y(x) . y(b)


astfel ca intervalul [ai ,bi ] sa contina radacina
Poate fi mai putin eficienta decat metoda
bisectiei pentru functii foarte neliniare

Exemplu de Calcul
Exemplu : f ( x ) x 2 2 x 3 0

Metoda
Pozitiei false

estimarea initiala este

iter

1
2
3
4

2.0
2.9375
2.99698
2.999856

xi

a,b 2.0,
f ( xi )

3.2
2.9375
0.2461
3.2
2.9968
0.01207
3.2 2.999856
0.000576
3.2 2.99999315 0.0000274

3.2

Exemple: Pozitiei False


1. Sa se aproximeze radacina ecuatiei Manning

1 bh
1/2
f(h) Q
S 0
2/3
n b 2h
5/3

2. Sa se aproximeze radacina ecuatiilor :

f(x)e

2 x

x 0
2

f ( x ) x3 3 x 1 0

[x1 y1]=bisect('my_func', 0, 1, 1.e-20, 100)


exact zero found
step
a
b
x
y
1.0000
0
1.0000
0.5000
-0.3750
2.0000
0
0.5000
0.2500
0.2656
3.0000
0.2500
0.5000
0.3750
-0.0723
4.0000
0.2500
0.3750
0.3125
0.0930
...
52.0000
0.3473
0.3473
0.3473
0.0000
53.0000
0.3473
0.3473
0.3473
0.0000
54.0000
0.3473
0.3473
0.3473
0

Erori relative
pentru
f(x) = x3-3x+1

[x2 y2]=falsi('my_func', 0, 1, 1.e-20, 100)


exact zero found
step
a
b
x
y
1.0000
0
1.0000
0.5000
-0.3750
2.0000
0
0.5000
0.3636
-0.0428
3.0000
0
0.3636
0.3487
-0.0037
4.0000
0
0.3487
0.3474
-0.0003
5.0000
0
0.3474
0.3473
0.0000
...
16.0000
0
0.3473
0.3473
0.0000
17.0000
0
0.3473
0.3473
0

iter1=length(x1); iter2=length(x2); k1=1:iter1; k2=1:iter2;


root1=x1(iter1); root2=x2(iter2);
error1=abs((x1-root1)/root1); error2=abs((x2-root2)/root2);
H=semilogy(k1,error1,'ro-',k2,error2,'bs-'); set(H,'LineWidth',2.0);
xlabel('Number of Iterations'); ylabel('Relative Error');
print -djpeg100 bracket.jpg

Viteza de convergenta
f(x)= x3-3x+1

Metoda
Bisectiei

Metoda
pozitiei
false

Viteza de Convergenta

Cateva cuvinte despre convergenta

Am considerat a ca elementul de evaluare


a convergentei

Un mod mai elaborat de a evalua viteza de


convergenta este utilizarea convergentei
asimptotice

Alt mod de definire a vitezei de


convergenta

Convergenta

asimptotica : daca exista


si este finita limita
lim

xk x *

x k 1 x *

pentru un 0

se numeste eroare asimptotica

Se spune ca metoda converge la x* cu ordinul p > 0.


Cu cat p este mai mare, convergenta este mai rapida.

p = 1 convergenta liniara
Metoda Bisectiei : p = 1
p = 2 convergenta patratica
Metoda Pozitiei False : p = 1.4 - 1.6

Viteza de Convergenta
De ce nu utilizam mereu Metoda pozitiei false ?
Pentru ca sunt cazuri in care poate converge foarte lent.
Exemple:

Ce alta metoda se poate utiliza?


4

f ( x ) x 3x 4 0

f ( x ) x 3x 4 0
a ,b 0 ,3
4

Convergenta mai
lenta decat metoda
bisectiei

1 23

root

Punct median

Metoda Bisectiei
[x,y]=bisect('my_func1',0,3,0.00001,100)
Bisection method has converged
step
a
b
x
y
1.0000
0 3.0000 1.5000 5.5625
2.0000
0 1.5000 0.7500 -1.4336
3.0000 0.7500 1.5000 1.1250 0.9768
4.0000 0.7500 1.1250 0.9375 -0.4150
5.0000 0.9375 1.1250 1.0312 0.2247
6.0000 0.9375 1.0312 0.9844 -0.1079
7.0000 0.9844 1.0312 1.0078 0.0551
8.0000 0.9844 1.0078 0.9961 -0.0273
9.0000 0.9961 1.0078 1.0020 0.0137
10.0000 0.9961 1.0020 0.9990 -0.0068
11.0000 0.9990 1.0020 1.0005 0.0034
12.0000 0.9990 1.0005 0.9998 -0.0017
13.0000 0.9998 1.0005 1.0001 0.0009
14.0000 0.9998 1.0001 0.9999 -0.0004
15.0000 0.9999 1.0001 1.0000 0.0002
16.0000 0.9999 1.0000 1.0000 -0.0001
17.0000 1.0000 1.0000 1.0000 0.0001
18.0000 1.0000 1.0000 1.0000 0.0000
19.0000 1.0000 1.0000 1.0000 0.0000

f ( x ) x4 3 x 4 0

Metoda pozitiei false


[x,y]=falsi('my_func1',0,3,0.00001,100)
Falsi method has converged
step
a
b
x
y
1.0000
0 3.0000 0.1333 -3.5997
2.0000 0.1333 3.0000 0.2485 -3.2507
3.0000 0.2485 3.0000 0.3487 -2.9391
4.0000 0.3487 3.0000 0.4363 -2.6548
5.0000 0.4363 3.0000 0.5131 -2.3914
6.0000 0.5131 3.0000 0.5804 -2.1454
7.0000 0.5804 3.0000 0.6393 -1.9152
8.0000 0.6393 3.0000 0.6907 -1.7003
9.0000 0.6907 3.0000 0.7355 -1.5010
10.0000 0.7355 3.0000 0.7743 -1.3176
11.0000 0.7743 3.0000 0.8079 -1.1503
12.0000 0.8079 3.0000 0.8368 -0.9991
13.0000 0.8368 3.0000 0.8617 -0.8637
14.0000 0.8617 3.0000 0.8829 -0.7434
15.0000 0.8829 3.0000 0.9011 -0.6375
16.0000 0.9011 3.0000 0.9165 -0.5448
17.0000 0.9165 3.0000 0.9296 -0.4642
18.0000 0.9296 3.0000 0.9408 -0.3945
19.0000 0.9408 3.0000 0.9502 -0.3345
20.0000 0.9502 3.0000 0.9581 -0.2831
.
40.0000 0.9985 3.0000 0.9988 -0.0086
.
58.0000 0.9999 3.0000 0.9999 -0.0004

Metode de izolare (Bracketing)


Atat

metoda Bisectiei cat si cea a


Pozitiei False necesita un interval de
localizare a radacinii.
Cum sa se gaseasca intervalul?
- reprezentand graficul functiei
- cautare incrementala
- cautare iterativa (trial and error)

Sa incercam un exemplu
Sa

se gaseasca aproximatia solutiei


ecuatiei de mai jos, stiind ca intervalul
in care se afla solutia este (1.2, 2.2)

x 3x 2 0
2

Se

va utiliza o metoda de izolare a


radacinii !
Se vor face maximum 3 iteratii

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