黄金分割法求极小的MATLAB程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

黄金分割法求极小的MATLAB程序

function [x,y] = goldmin(f, a ,b ,tol, maxsearch)

if nargin<5, maxsearch=500; end

if nargin<4, tol=1e-6; end;

golden=0.6180339887498949025257; % golden=(sqrt(5)-1)/2

x=b-(b-a)*golden; % x是离端点a较近的试探点

y=feval(f,x); % 求x的函数值y

for k=1:maxsearch % 作最大叠代次数为maxsearch的循环。

h=b-a; % h是区间长(当b

if abs(h)

d=a+h*golden;yd=feval(f,d); % d是离d较近的试探点,求d的函数值yd

if y>=yd %当离a 较近点x的函数值y大于等于离a较远的点d的函数值yd时。

a=x; %去掉含a的一段区间,以离a 较近点x作为新区间的端点a

x=d; %将d作为离新区间的点a端点较近的点。

y=yd; % 其函数值yd作为x点的函数值。

else%当离a 较近点x的函数值y小于离b较近的点d的函数值yd时。去掉含% 端点b的一段区间,得区间[a,d],但由于现在x离d点较近,所以b=a; %令a 为端点b

a=d; 令d为端点a

end

end

error('iteration exceeds the limitation');

Fibonacci法求极小的MATLAB程序

function [x,y] = Fibo(f,a,b,n)

% F2=round(sqrt(5)*(0.5*(1+sqrt(5)))^(n+1)*0.2);F1=round(sqrt(5)*(0.5*(1+sqrt(5)))^(n)*0.2); F1=.44721359549995793928*1.6180339887498949025^n; F2=F1*1.6180339887498949025;

F1=round(F1); F2=round(F2);

h=(b-a)/F2;% 均分区间

x=b-h*F1; % x 是离端点a 较近的试探点

y=feval(f,x);% 求x 的函数值y

for k=1:n-2 % 循环

F0=F1; F1=F2-F0; F2=F0;

d=b-h*F1; yd=feval(f,d);% d 是离b 较近的试探点, 求d 的函数值yd

if y>=yd% 当离a 较近点x的函数值y 大于等于离a 较远的点d 的函数值yd 时.

a=x; % 去掉含端点a 的一段区间,以离a 较近点x 作为新区间的端点a

x=d; % 将d 作为离新区间的端点a 较近的点.

y=yd;% 其函数值yd 作为x 点的函数值.

else % 当离a 较近的点x 的函数值y 小于离b 较近的点d 的函数值yd 时.

%去掉含端点b 的一段区间, 得区间[a,d], 但由于现在x 离d 点较近, 所以b=a; % 令a 为端点b

a=d; % 令d 为端点a

h=-h;% 因交换端点, 步长应改号.

end

end

1

相关文档
最新文档