[ navahoyu @ 25.12.2004. 16:09 ] @
Imam zadatak da uradim Metodu polovljenja intervala i Metodu tangenti u MatLabu, ja imam uradjene te dve metode u .m fajlovima ali mi treba objasnjenje postupka... Ako neko ima vremena da mi objasni, bio bih mu veoma zahvalan: 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; 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 Hvala unapred, mozete me kontaktirati i na mail, [email protected] |