Ngày tải lên :
23/01/2014, 06:20
...
402
forj=3:n
llj=ll1*fn2/fibn;
fn=fn1;
fn1=fn2;
fn2=fn‐fn1;
iff2>f1
b=x2;
l=(b‐a)*fn2/fn;
x2=x1;
x1=a+l;
f2=f1;
f1=feval(f,x1);
else
a=x1;
l=(b‐a)*fn2/fn;
x1=x2;
x2=b‐l;
f1=f2;
f2=feval(f,x2);
end
end
x=x1;y=f1;
Đểtìmcựctiểucủahàmtrongđoạn(a,b)tadùng chương trình ctfibonacci.m:
clearall,clc
f=inline(ʹ1.6*x^2‐3*x+2ʹ);
a=‐0.;
b=1;
n=50;
[x,y]=fibonacci(f,a,b,n)
372
Giảsửf1> f2,tađặta=x1vàvàx1=
x
2vàcókhoảng(a,b)mớinhưhìnhb.Để
thực ... (n) 0,kếtthúcquá trình và[x
o
]làgiátrịtốtnhất.
Nếukhông,đểtạonhiềunhiễnsắcthểhơnquanhđiểmtốtnhất
[x(nb)]chothếhệsau,tadùngquytắcchọnlọc:
375
Taxâydựnghàm
optquad()đểthựchiệnthuậttoánnày.
function[xo,fo]=optquad(f,x0,tolx,tolfun,maxiter)
%Timcuctieucuaf(x)bangphuongphapxapxibac2
iflength(x0)>2
x012=x0(1:3);
else
iflength(x0)==2
a=x0(1);
b=x0(2);
else
a=x0‐10;
b=x0
+10;
end
x012=[a(a+b)/2b];
end
f012=f(x012);
[xo,fo]=optquad0(f,x012,f012,tolx,tolfun,maxiter);
function[xo,fo]=optquad0(f,x012,f012,tolx,tolfun,k)
x0=x012(1);
x1=x012(2);
x2=x012(3);
... bước thu gọn tiếp theo ta lại
tínhgiátrịcủahàmtạix
2=a+rh’vàlặp
lạiquá trình. Quá trình làmviệcchỉnếu
hìnhavàhìnhbtươngtự,nghĩalàhằng
sốrkhôngđổikhixácđịnhx
1vàx2ởcả
haihình.Từhìnhatathấy:
...