Professional Documents
Culture Documents
MATLAB - Xấp xỉ nghiệm - Universitàte de Stat din Moldova
MATLAB - Xấp xỉ nghiệm - Universitàte de Stat din Moldova
Dare de seama
La: Calcul numeric
Laboratorul 1
Chisinau 2018
1) Cerințe pentru lucrarea de laborator N1 la disciplina Calcul Numeric
Se consideră ecuația f (x) 0, x [a,b] , unde funcția f x este definită interactiv sau este
selectează dintr-o colecție de probleme test. Colecția de ecuații va include următoarele date:
1a. 2sin 3x ln(x3 1) 4 0; [a;b] [2;9];
2a. sin( x 6) cos(x 1) 0; [a;b] [7;8];
3a. e x x3 8cos 4x 0; [a;b] [4; 4];
1b. x6 5.5x5 6.18x4 18.54x3 56.9592x2 55.9872x 19.3156 0; [a;b] [3; 4];
2b. x6 0.7x5 8.7x4 5.58x3 22.356x2 8.39808x 19.3156 0; [a;b] [3; 4];
3b. x6 2.4x5 18.27x4 23.216x3 115.7x2 19.5804x 164.818 0; [a;b] [3; 4];
Structura program:
Functia localize.m:
function [interval,i] = localize( a,b,h,f )
i=1;
x1=a;
x2=x1+h;
while(x2<b)
f1=f(x1);
f2=f(x2);
if f1*f2<0
interval(i,:)=[x1,x2];
x1=x2;
i=i+1;
end
x2=x2+h;
f1=f2;
end
end
Functia bisection.m:
function [data,err,m] = bisection(a, b, eps,f)
err=0;
y1 = f(a);
y2 = f(b);
i = 0;
if y1 * y2 > 0
disp('N-a gasit radicina');
m = 9999999999999999;
data(1,:)=[0,0,0,0];
err(1)=9999999999999999;
return;
end
while (abs(a - b) >= eps)
i = i + 1;
y1 = f(a);
y2 = f(b);
tic;
m = (a + b)/2;
y3 = f(m);
if y3 == 0
data(i,:)=[m,y3,i,toc];
radicina=m;
return
end
data(i,:)=[m,y3,i,toc];
% Update the limits
if y1 * y3 > 0
a = m;
else
b = m;
end
if i>1
err(i-1)=abs(m-m1);
end
m1=m;
end
Functia coardelor.m:
function [data,err,m] = coardelor( a,b,f,df2,eps )
if f(a)*df2(a)>0
x=b;
xf=a;
else
x=a;
xf=b;
end
tic;
k=0;
fx=f(x);
fxf=f(xf);
d=double((x-xf)*fx/(fx-fxf));
x=x-d;
fx=f(x);
k=k+1;
data(k,:)=[x,fx,k,toc];
m=x;
while(abs(d)>=eps || abs(fx)>=eps)
tic;
x0=x;
d=double((x-xf)*fx/(fx-fxf));
x=x-d;
fx=f(x);
data(k,:)=[x,fx,k,toc];
m=x;
err(k)=abs(x-x0);
k=k+1;
end
end
Functia newton.m:
function [data,err,x] = newton(a,b,eps, f, d1f, d2f)
i = 0;
if f(a) * d2f(a) > 0
x = a;
else
x = b;
end
d=1;
while(abs(d) >= eps)
i=i+1;
tic;
xs=x;
d=double(f(x)/d1f(x));
x=x-d;
err(i) = abs(xs-x);
y=f(x);
data(i,:)=[x,y,i,toc];
end
end
Functia scantelor.m:
function [data,err,m] = secantelor( a,b,f,df2,eps )
if f(a)*df2(a)>0
x0=a;
x=a+eps;
else
x0=b;
x=b-eps;
end
k=0;
tic;
d=x-x0;
fx0=f(x0);
fx=f(x);
d=double(d*fx/(fx0-fx));
x=x-d;
fx0=fx;
fx=f(x);
k=k+1;
data(k,:)=[x,fx,k,toc];
m=x;
while(abs(d)>=eps & abs(fx)>=eps)
tic;
x0=x;
d=double(d*fx/(fx0-fx));
x=x-d;
fx0=fx;
fx=f(x);
data(k,:)=[x,fx,k,toc];
m=x;
err(k)=abs(x-x0);
k=k+1;
end
end
f=@(x) eval(functia);
syms x;
%tinh dao ham bac 1 va 2
df1(x)=diff(f,x);
df2(x)=diff(df1,x);
cla;
if strcmpi(metoda,'Metoda bisectie')
axes(handles.axes1);
[loc,i]=localize(a,b,0.01,f);
for k = 1:i-1
[data,err,rad]=bisection(loc(k,1),loc(k,2),eps,f);
set(handles.dit,'Data',data);
xx=[a:b];
plot(rad,0,'r*','linewidth',7);
hold on;
end;
[loc,i]=localize(a,b,0.01,f);
cla;
fplot(f ,[a b]);
for k = 1:i-1
hold off;
end;
end;
axes(handles.axes5);
plot(err,'r*','linewidth',7);
xlabel('Nr de interatii');
ylabel('Error');
3) Analiza rezultatelor și concluzii cu privire la eficiența metodelor
implementate. Se vor compara rezultatele obținute prin diferite metode
(eficiența lor relativă în rezolvarea problemei date) și se va evidenția
metoda optimă pentru rezolvarea ecuațiilor considerate.
Metoda Bisectie
Metoda Newton:
Metoda Secantelor:
Metoda Coardelor:
Concluzii