Documente Academic
Documente Profesional
Documente Cultură
f(x) = 0,
dar admite diverse interpretari, depinzand de semnificatia lui x si f. Cel mai simplu caz este cel al
unei singure ecuatii cu o singura necunoscuta, caz in care f este o functie data de o variabila reala
sau complexa si incercam sa gasim valorile acestei variabile pentru care f se anuleaza. Astfel de
valori se numesc radacini ale ecuatiei f(x) = 0 sau zerouri ale functiei f.
Anonymous functions
Cea mai simplă metodă pentru a crea funcții în Matlab este să folosim semnul @. Astfel definim
funcțiile ca handle functions sau anonymous functions.
Sintaxa:
nume_functie = @(var1,var2,..)expresie
Inline functions
În Matalb putem defini funcții matematice simple nu numai în M-file tip funcție. O altă metodă este
de a scrie direct, în programe sau în Command Window, funcțiile folosind comanda inline.
Sintaxa:
nume_functie = inline('expresie',var1,var2,..)
Exemplu: f=inline('x.^2+3.*x+1','x')
Ecuatii neliniare în MATLAB
Pentru calculul soluțiilor ecuațiilor algebrice de forma f(x) = 0 vom utiliza următoarele
metode:
În biblioteca Matlab găsim funcția fzero cu care putem determina zerourile ecuațiilor
algebrice și transcendente.
Sintaxa:
- x = fzero(function, x0)
- [x, fx] = fzero(function, x0)
- [x, fx] = fzero(function,x0,options)
fzero Options
- options = optimset('Display','iter')
Metoda bisecţiei sau metoda ȋnjumătăţirii intervalului este una din primele metode dezvoltate
pentru determinarea rădacinilor ecuaţiei f(x) = 0. Pentru determinarea unei rădăcini, din
intervalul [a,b] prin metoda bisecţiei, funcţia f(x) trebuie să satisfacă condiţiile:
pasul 1:
stop;
pasul 2:
stop ;
pasul 3:
Algoritmul se opreşte după n iteraţii dacă este satisfăcută o anumită condiţie stabilită asupra
erorii, de exemplu condiţia de a avea valoarea ca ordin de convergenţă.
Numărul iteraţiilor necesare, dacă dorim ca eroarea să fie mai mică decât , se determină din
condiţia ca mărimea intervalului după n paşi să fie mai mică ca .
% metoda_bisectiei.m
fa = f(a); fb = f(b);
return
end
niter = 1 + round((log(b-a)-log(tol))/log(2))
for i = 1:niter
c = (a + b)/2;
fc = f(c);
if fc == 0.0
a = c;
b = c;
b = c;
fb = fc;
else
a = c;
fa = fc;
end
break
end
end
c =(a+b)/2;
fc = feval(f,c);
er = abs(b-a)/2
Exercițiul 1:
Valoarea aproximată a rădăcinii din intervalul [0, 1] este x = 0.4746 şi a fost obţinută
după n = 18 iterații, cu eroarea e = 3.8147e-006.
Observaţi:. Metoda bisecţiei eşuează dacă:
- Funcţia are singularităţi (este discontinuă într-un punct din intervalul în care se caută
rădăcina).
2. Metoda secantei
pasul 2:
calculăm un punct x1, la intersecţia dreptei (secanta) care trece prin punctele A şi B cu
axa Ox;
Din ecuația de mai sus se obţine abscisa x1 a punctului de intersecţie al secantei cu axa Ox
𝑏−𝑎
𝑥1 = 𝑎 − 𝑓(𝑎)
𝑓(𝑏) − 𝑓(𝑎)
pasul 3:
pasul 4:
înapoi la pasul 2.
𝑥 −𝑥
Procedeul se repetă dupa relaţia de recurenţă 𝑥𝑛+1 = 𝑥𝑛 − 𝑓(𝑥𝑛 ) 𝑓(𝑥 𝑛)−𝑓(𝑥
𝑛−1
𝑛 𝑛−1 )
% metoda_secantei.m
% Inputs:
% f = functia
% k = numarul iteratiilor
% apelare
fx0 = f(x0);
fx1 = f(x1);
end
disp(' k x eroare')
k = 1;
if dfx == 0
error('impartire cu zero');
end
eroare = abs(fx2);
x0 = x1;
fx0 = fx1;
x1 = x2;
fx1 = fx2;
disp([ k x1 eroare])
break;
end
k = k + 1;
end
x = x1; k = k-1;
if k > maxiter
end
Exercițiul 2:
>> [x k] = metoda_secantei(f,0,1,1e-5,10)
Daca funcţia este dată ca anonymus function, apelarea metodei secantei se face cu
comanda:
>> [x k] = metoda_secantei(@(x)0.5*x.^3-4*x.^2+6*x-
2,0,1,1e-5,10)
3. Metoda tangentei
% metoda_newton.m
end
for k = 1: MaxIter
%derivarea numerica
end
dx = -fx/dfdx;
xx(k+1) = xx(k)+dx;
fx = feval(f,xx(k + 1));
break;
end
end
xx = xx'
x = xx(k + 1);
end
În acest cod Matlab avem două variante de a introduce funcția și derivata ei:
- varianta1 : scriem un script funcție M-file în care vom defini funcția și derivata ei.
- varianta2 : funcția se introduce ca funcție inline și derivata ei este calculată numeric în
codul Matlab.
Exemplul 3:
Varianta 1: x0 = 0
x0=0;
f=inline('x.^3-3*x-2','x')
[x,fx,xx] = metoda_newton(f,x0,1e-4,10)
Varianta 2: x0 = -2
Creem fisierul script funcție f_ex_3.m pentru introducerea funcției și a derivatei funcției:
function f = f_ex_3(x)
f = x.^3-3*x-2;
df = 3*x.^2-3;
Exerciții