📄 fibonacci.m
字号:
% 斐波那契法求极小值
% 功能:用斐波那契法求f(x)在区间[a,b]上的近似极小值。当且仅当f(x)在[a,b]上为单峰时次方法适用
%----------------------------------------------------------------------
function X=fibonacci(a,b,tol,e)
% input - f is the object function input as a string 'f'
% - a and b are the end points of the interval
% - tol : length of uncertainy
% - e :distinguishability of constant
% output - X : x and y coordinates of minimum
% note : this function calls the m-file fib.m while had been edited
i=1;
F=1;
while F<=(b-a)/tol
F=fib(i);
i=i+1;
end
n=i-1;
A=zeros(1,n-2);B=zeros(1,n-2);
A(1)=a;
B(1)=b;
c=A(1)+(fib(n-2)/fib(n))*(B(1)-A(1));
d=A(1)+(fib(n-1)/fib(n))*(B(1)-A(1));
k=1;
while k==n-3
yc=orient(c);
yd=orient(d);
if yc>yd
A(k+1)=c;
B(k+1)=B(k);
c=d;
d=A(k+1)+(fib(n-k-1)/fib(n-k))*(B(k+1)-A(k+1));
else
A(k+1)=A(k);
B(k+1)=d;
d=c;
c=A(k+1)+(fib(n-k-2)/fib(n-k))*(B(k+1)-A(k+1));
end
k=k+1;
end
yc=orient(c);
yd=orient(d);
if yc>yd
A(n-2)=c;
B(n-2)=B(n-3);
c=d;
d=A(n-2)+(0.5+e)*(B(n-2)-A(n-2));
else
A(n-2)=A(n-3);
B(n-2)=d;
d=c;
c=A(n-2)+(0.5+e)*(B(n-2)-A(n-2));
end
yc=orient(c);
yd=orient(d);
if yc>yd
a=c;
b=B(n-2);
else
a=A(n-2);
b=d;
end
y=orient((a+b)/2);
X=[(a+b)/2 y];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -