Laboratorijske vaje Numeriˇ cne metode
3. Vaja
B. Jurˇ ciˇ c Zlobec
Numeriˇ cne metode FE, Ljubljana, 17. oktober 2013
Metoda bisekcije
Z inline() definiraj funkcijo f (x) = x 3 − 2x − 1/2.
Izberi interval (a, b), a = −1 in b = 1.2.
Poiˇsˇ ci pribliˇ zek f (x 0 ) = 0, x 0 ∈ (a, b).
Na krajiˇsˇ cih intervala velja f (a)f (b) < 0.
Nasednji pribliˇ zek raˇ cunamo po formuli c = a + b 2 .
Izberemo interval (a, c ), ˇ ce je f (a)f (c) < 0 sicer pa (c , b).
V prvem primeru postane b = c , v drugem pa a = c.
f=inline(’x^3-2*x-1/2’,’x’); a=-1; b=1.2;
formatx=’a=%0.2f,c=%0.2f,b=%0.2f\n’;
formatf=’f(a)=%0.2f,f(c)=%0.2f,f(b)=%0.2f,\n’
c=(a+b)/2;
printf([formatf,formatx],f(a),f(c),f(b),a,b,c);
f(a)=0.50,f(c)=-0.70,f(b)=-1.17, a=-1.00,c=0.10,b=1.20
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode
Iteracije
b=c; c=(a+b)/2;
printf([formatf,formatx],f(a),f(c),f(b),a,c,b);
f(a)=0.50,f(c)=0.31,f(b)=-0.70, a=-1.00,c=-0.45,b=0.10
a=c; c=(a+b)/2;
printf([formatf,formatx],f(a),f(c),f(b),a,c,b);
f(a)=0.31,f(c)=-0.16,f(b)=-0.70, a=-0.45,c=-0.18,b=0.10
b=c; c=(a+b)/2;
printf([formatf,formatx],f(a),f(c),f(b),a,c,b);
f(a)=0.31,f(c)=0.09,f(b)=-0.16,
a=-0.45,c=-0.31,b=-0.18
Grafiˇ cni prikaz
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode
Grafiˇ cni prikaz
Grafiˇ cni prikaz
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode
Grafiˇ cni prikaz
Grafiˇ cni prikaz
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode
Program za metodo bisekcije
Zanki: if...else...end, while...end in ukaz break.
f=inline(’x^3-2*x-1/2’,’x’);
a=-1; b=1.2; n=0; delta=1e-8;
while true
c=(a+b)/2; n=n+1;
if f(a)*f(c)<0, b=c;
else, a=c;
end;
if abs(b-a)<delta, break, end;
end;
printf(’n=%d,x=%0.10f\n’,n,c);
x
0= −0.25865202250415276284.
n=28,x=-0.2586520232
START xf(x)
l,xd,δ
a=xl,b=xd,n= 0
c=a+b 2 ,n=n+ 1
f(a)f(c)<0
b=c a=c
|b−a|< δ
print (n,c) CILJ
DA NE
DA NE
Metoda regula falsi
Kot pri metodi bisekcije le, da pribliˇ zke raˇ cunamo po formuli:
c = a − f (a) b − a f (b) − f (a) .
f=inline(’x^3-2*x-1/2’,’x’);
a=-1;b=1.2;n=0;eps=1e-8;
while 1
c=a-f(a)*(b-a)/(f(b)-f(a));
n=n+1;
if f(a)*f(c)<0, b=c;
else, a=c; end;
if abs(f(c))<eps,break,end;
end;
printf(’n=%d,x=%0.10f\n’,n,c);
n=7,x=-0.2586520257
START f(x)x
l,xd,
a=xl,b=xd,n= 0
c=a− b−a
f(b)−f(a)f(a), n=n+ 1
f(a)f(c)<0
b=c a=c
|f(c)|<
print (n,c) CILJ
DA NE
DA NE
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode
Graficni prikaz
Graficni prikaz
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode
Graficni prikaz
Sekantna metoda
Funkcijski vrednosti v krajiˇsˇ cih nista nujno razliˇ cnega znaka. Pribliˇ zki se raˇ cunajo enako, kot pri regula falsi.
f=inline(’x^3-2*x-1/2’,’x’);
a=-1; b=1.2; n=10;
d=1e-8; e=1e-8;
for i=1:n
c=a-f(a)*(b-a)/(f(b)-f(a));
a=b;
b=c;
if(abs(b-a)<d)|(abs(f(b))<e) break,
end;
end;
printf(’i=%d,b=%0.10f’,i,b);
i=6,x=-0.2586520225
START x f(x)
l,xd,,δ,n
a=xl,b=xd,i= 0 test(a, b) = (f(b)< )∨(|b−a|< δ)
c=a− b−a f(b)−f(a)f(a)
a=b,b=c
i=i+ 1 test(a, b)
i > n
print (error)
print (c, i) CILJ
NE DA
DA
NE
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode
Tangentna metoda
Preseˇ ciˇsˇ ce tangente v pribliˇ zku z osjo x. x i+1 = x i − f (x i )
f 0 (x i ) . f=inline(’x^3-2*x-1/2’,’x’);
df=inline(’3*x^2-2’,’x’) a=0.4;n=10;
d=1e-8;e=1e-8;
for i=1:n
b=a-f(a)/df(a);
if(abs(b-a)<d)|(abs(f(b))<e) break,
end;
a=b;
end;
printf(’i=%d,c=%0.10f’,i,c);
i=5,x=-0.2586520225
START xf(x),f0(x)
0,,δ,n
a=x0,i= 0 test(a, b) = (f(b)< )∨(|b−a|< δ)
b=a−f(a) f0(a),i=i+ 1
test(a, b)
i > n a=b
print (error)
print (b, i) CILJ
NE DA
DA NE
Graficni prikaz
Borut Jurˇciˇc Zlobec Laboratorijske vaje Numericne metode