Harjoitellaan samalla Matlab-kuvaa. Huomaa, että uudessa Matlabin versiossa 5.3 voidaan funktio määritellä myös suoraan istunnossa inline -komennon avulla. Kuvassa olevat pystyviivat ja tekstit on tehty Matlabin kuvaeditorilla.
>> f=inline('.3+(x-3/4).^2','x');
>> fplot(f,[0 1])
>> %ylim([0 1.6])
>> grid
|
|
Maar. f:[a,b] -> R on unimodaalinen (yksihuippuinen), jos on olemassa yksikäs x* välillä [a,b] siten, että vasemmalla puolella pienenee ja oikealla kasvaa.
x1 < x2 ja f(x1) > f(x2) ==>
x1 <= x*
|
%%%%%%%% Tiedosto fib.m %%%%%%%%%%%%%%
function F=fib(n)
F(1)=1;F(2)=1;
for i=2:n-1 F(i+1)=F(i-1)+F(i);end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%% Skripti fibhaku.m %%%%%%%%%%%
clf
a(1)=-3;b(1)=5;
n=10;
F=fib(n);
for i=1:n-2
L(i)=b(i)-a(i);patka=(F(n-(i+1))/F(n))*L(1);
x0(i)=a(i)+patka;x1(i)=b(i)-patka;
f0=f(x0(i));f1=f(x1(i));
if (f0 < f1)
b(i+1)=x1(i); a(i+1)=a(i);
elseif (f0 > f1)
a(i+1)=x0(i); b(i+1)=b(i);
else
a(i+1)=x0(i); b(i+1)=x1(i);
end;
plot([a(i) b(i)],0.2*[1-i 1-i ],'or')
axis([a(1)-.2 b(1)+.2 -2 1])
hold on
plot([a(i) b(i)],0.2*[1-i 1-i ],'k')
plot([x0(i) x1(i)],0.2*[1-i 1-i ],'*b')
if i<6
text(a(i)+0.05,0.2*(1-i+0.1),['a(',num2str(i),')'])
text(b(i)+0.05,0.2*(1-i+0.1),['b(',num2str(i),')'])
end;
end;
taulukko=[a(1:n-2)' b(1:n-2)' x0' x1' f(x0)' f(x1)']
fplot(f,[a(1) b(1)])
grid
title('Fibonacci-haku')
%%%%%%%%%%%%%%% fibhaku.m loppui %%%%%%%%%%%%%%%%%%%
a b x0 x1 f(x0) f(x1)
-3.0000 5.0000 0.0545 1.9455 0.1121 7.6757
-3.0000 1.9455 -1.1091 0.0545 -0.9881 0.1121
-3.0000 0.0545 -1.8364 -1.1091 -0.3005 -0.9881
-1.8364 0.0545 -1.1091 -0.6727 -0.9881 -0.8929
-1.8364 -0.6727 -1.4000 -1.1091 -0.8400 -0.9881
-1.4000 -0.6727 -1.1091 -0.9636 -0.9881 -0.9987
-1.1091 -0.6727 -0.9636 -0.8182 -0.9987 -0.9669
-1.1091 -0.8182 -0.9636 -0.9636 -0.9987 -0.9987
Kuvan pystyviivat editoitiin Matlabin kuvaeditorilla.
Kotiin