Metoda polovljenja intervala:
Code:
function Polovljenje
disp('da li postoje ogranicenja za domen funkcije?');
ogr=input('(1)Postoje/(2)Ne postoje: ');
if ogr==1
disp('Morate uneti sami interval izolacije');
y=input('Unesite funkciju: ')
f=inline(y);
j=input('Koliko korena ima jednacina? ');
for i=1:j
a=input('unesite donju granicu a: ');
b=input('unesite gornju granicu b: ');
mat(j,1)=a; mat(j,2)=b;
end
else
a=-20; b=20;
k=1;
x=a:k:b;
y=input('Unesite funkciju: ')
f=inline(y);
m=length(x);
j=0;
for i=1:(m-1)
if f(a)*f(a+k)<0
j=j+1; b=a+k;
mat(j,1)=a; mat(j,2)=b; a=a+k; i=i+1;
else a=a+k; i=i+1;
end
end
end
disp('interval/i izolacije su:')
disp(mat);
eps=input('Unesite tacnost: ');
for s=1:j; b=mat(s,2); a=mat(s,1);
N=log2(b-a)-log2(eps);
disp(['Potreban broj iteracija: ',int2str(N)]);
x=a:b;
c=(a+b)/2;
matr(1,1)=a; matr(1,2)=b; matr(1,3)=c; x0=fzero(f,c);
matr(1,4)=x0;
for k=1:N
c=(a+b)/2;
if f(a)*f(c)<0 b=c;
else a=c;
end
matr(k+1,1)=a; matr(k+1,2)=b; matr(k+1,3)=c;
matr(k+1,4)=abs(x0-c);
k=k+1;
end
disp(' a b xn x0');
disp('----------------------------------------------------------------------')
format long,matr;
disp(matr); s=s+1; j=j+1;
end;
function Polovljenje
disp('da li postoje ogranicenja za domen funkcije?');
ogr=input('(1)Postoje/(2)Ne postoje: ');
if ogr==1
disp('Morate uneti sami interval izolacije');
y=input('Unesite funkciju: ')
f=inline(y);
j=input('Koliko korena ima jednacina? ');
for i=1:j
a=input('unesite donju granicu a: ');
b=input('unesite gornju granicu b: ');
mat(j,1)=a; mat(j,2)=b;
end
else
a=-20; b=20;
k=1;
x=a:k:b;
y=input('Unesite funkciju: ')
f=inline(y);
m=length(x);
j=0;
for i=1:(m-1)
if f(a)*f(a+k)<0
j=j+1; b=a+k;
mat(j,1)=a; mat(j,2)=b; a=a+k; i=i+1;
else a=a+k; i=i+1;
end
end
end
disp('interval/i izolacije su:')
disp(mat);
eps=input('Unesite tacnost: ');
for s=1:j; b=mat(s,2); a=mat(s,1);
N=log2(b-a)-log2(eps);
disp(['Potreban broj iteracija: ',int2str(N)]);
x=a:b;
c=(a+b)/2;
matr(1,1)=a; matr(1,2)=b; matr(1,3)=c; x0=fzero(f,c);
matr(1,4)=x0;
for k=1:N
c=(a+b)/2;
if f(a)*f(c)<0 b=c;
else a=c;
end
matr(k+1,1)=a; matr(k+1,2)=b; matr(k+1,3)=c;
matr(k+1,4)=abs(x0-c);
k=k+1;
end
disp(' a b xn x0');
disp('----------------------------------------------------------------------')
format long,matr;
disp(matr); s=s+1; j=j+1;
end;
Metoda tangenti:
Code:
function Njutn
disp('da li postoje ogranicenja za domen funkcije?');
ogr=input('(1)Postoje/(2)Ne postoje: ');
if ogr==1
disp('Morate uneti sami interval izolacije');
y=input('Unesite funkciju: ')
f=inline(y);
j=input('Koliko korena ima jednacina? ');
for i=1:j
a=input('unesite donju granicu a: ');
b=input('unesite gornju granicu b: ');
mat(j,1)=a; mat(j,2)=b;
end
else
a=-20; b=20;
k=1;
x=a:k:b;
y=input('Unesite funkciju: ')
f=inline(y);
m=length(x);
j=0;
for i=1:(m-1)
if f(a)*f(a+k)<0
j=j+1; b=a+k;
mat(j,1)=a; mat(j,2)=b; a=a+k; i=i+1;
else a=a+k; i=i+1;
end
end
end
disp('interval/i izolacije su:')
disp(mat);
eps=input('Unesite tacnost: ');
p=diff(y); q=diff(p); pp=inline(p); qq=inline(q);
for s=1:j
as=mat(s,1); bs=mat(s,2);
A(1)=abs(pp(as)); A(2)=abs(pp(bs));
m1=min(A);
if m1==0
m1=1;
end
if pp(as)*pp(bs)>0 & qq(as)*qq(bs)>0
if f(as)*qq(as)>0
xo=as;
else
xo=bs;
end
w=1; g=abs(f(xo))/m1;
matr(w,1)=xo; matr(w,2)=g;
while g>=eps
w=w+1;
matr(w,1)=matr(w-1,1)-f(matr(w-1,1))/pp(matr(w-1,1));
matr(w,2)=abs(f(matr(w-1,1)))/m1;
g=matr(w,2);
end
format long,matr;
disp('Resenja i ocene greski')
disp(' Xn |f(Xn)|/m1')
disp(' -----------------------------------')
disp(matr);
elseif pp(as)*pp(bs)<0 & qq(as)*qq(bs)<0
disp('nije ispunjen ulov da su izvodi stalnog znaka')
else
if pp(as)==0 | qq(as)==0
as=as+0.01;
else bs=bs-0.01;
end
if f(as)*qq(as)>0
xo=as;
else
xo=bs;
end
w=1; g=abs(f(xo))/m1;
matri(w,1)=xo; matri(w,2)=g;
while g>=eps
w=w+1;
matri(w,1)=matri(w-1,1)-f(matri(w-1,1))/pp(matri(w-1,1));
matri(w,2)=abs(f(matri(w-1,1)))/m1;
g=matri(w,2);
end
format long,matri;
disp('Resenja i ocene greski')
disp(' Xn |f(Xn)|/m1')
disp(' -----------------------------------')
disp(matri);
end
s=s+1;
end
function Njutn
disp('da li postoje ogranicenja za domen funkcije?');
ogr=input('(1)Postoje/(2)Ne postoje: ');
if ogr==1
disp('Morate uneti sami interval izolacije');
y=input('Unesite funkciju: ')
f=inline(y);
j=input('Koliko korena ima jednacina? ');
for i=1:j
a=input('unesite donju granicu a: ');
b=input('unesite gornju granicu b: ');
mat(j,1)=a; mat(j,2)=b;
end
else
a=-20; b=20;
k=1;
x=a:k:b;
y=input('Unesite funkciju: ')
f=inline(y);
m=length(x);
j=0;
for i=1:(m-1)
if f(a)*f(a+k)<0
j=j+1; b=a+k;
mat(j,1)=a; mat(j,2)=b; a=a+k; i=i+1;
else a=a+k; i=i+1;
end
end
end
disp('interval/i izolacije su:')
disp(mat);
eps=input('Unesite tacnost: ');
p=diff(y); q=diff(p); pp=inline(p); qq=inline(q);
for s=1:j
as=mat(s,1); bs=mat(s,2);
A(1)=abs(pp(as)); A(2)=abs(pp(bs));
m1=min(A);
if m1==0
m1=1;
end
if pp(as)*pp(bs)>0 & qq(as)*qq(bs)>0
if f(as)*qq(as)>0
xo=as;
else
xo=bs;
end
w=1; g=abs(f(xo))/m1;
matr(w,1)=xo; matr(w,2)=g;
while g>=eps
w=w+1;
matr(w,1)=matr(w-1,1)-f(matr(w-1,1))/pp(matr(w-1,1));
matr(w,2)=abs(f(matr(w-1,1)))/m1;
g=matr(w,2);
end
format long,matr;
disp('Resenja i ocene greski')
disp(' Xn |f(Xn)|/m1')
disp(' -----------------------------------')
disp(matr);
elseif pp(as)*pp(bs)<0 & qq(as)*qq(bs)<0
disp('nije ispunjen ulov da su izvodi stalnog znaka')
else
if pp(as)==0 | qq(as)==0
as=as+0.01;
else bs=bs-0.01;
end
if f(as)*qq(as)>0
xo=as;
else
xo=bs;
end
w=1; g=abs(f(xo))/m1;
matri(w,1)=xo; matri(w,2)=g;
while g>=eps
w=w+1;
matri(w,1)=matri(w-1,1)-f(matri(w-1,1))/pp(matri(w-1,1));
matri(w,2)=abs(f(matri(w-1,1)))/m1;
g=matri(w,2);
end
format long,matri;
disp('Resenja i ocene greski')
disp(' Xn |f(Xn)|/m1')
disp(' -----------------------------------')
disp(matri);
end
s=s+1;
end
Hvala unapred, mozete me kontaktirati i na mail, [email protected]