工程数学一
实验要求
(1)请用0.618法求解优化问题:
的极小点和极小值,精度为10-6;
(2)根据0.618法算法步骤编写Matlab的程序实现0.618搜索法;
(3)要求输出内容包括:极小点、极小值、每次迭代的a、b、al、ak的值;
(4)按照模板撰写实验报告,要求规范整洁。
2. 代码
untitled
极小点:-1.029866
极小值:-2.368296
clear all
close all
clc
% 搜索初始区间
a=0;
b=1;
% 终止条件
err=10^-5;
% tao=0.618
tao=0.618;
% 第1次计算左、右试探点
phia = a^2+sin(a); %左边界函数值
phib = b^2+sin(b); %右边界函数值
p=a+(1-tao)*(b-a); %左试探点
phip=p^2+sin(p); %左试探点函数值
q=a+tao*(b-a); %右试探点
phiq=q^2+sin(q); %右试探点函数值
k=1; % 循环变量 k
G(k,:)=[a,b,p,q]; % 用于存储 每次迭代的左右边界,左右试探点
%循环搜索
while abs(b-a)>err
if phip<phiq
b = q; %右边界更新:用上一次迭代的右试探点更新右边界
q = p; %右试探点更新;
phiq = phip; %更新右试探点函数值;
p = a+(1-tao)*(b-a); %左试探点更新
phip = p^2+sin(p); %左试探点函数值
else
a = p; % 右边界更新:用上一次迭代的右试探点更新右边界
p = q; % 左试探点更新
phip = phiq; % a_left(k)^2+sin(a_left(k)); %左试探点函数值
q = a+tao*(b-a); % 右试探点更新
phiq=q^2+sin(q); % 右试探点函数值
end
k=k+1;
G(k,:)=[a,b,p,q];
end
% 判断最优解,并存放到xopt最优解,fmin最小函数值
if phip<phiq
xopt=p; %最优解
fmin=phip; %最小函数值
else
xopt=q;
fmin=phiq;
end
%将每次迭代变量存放到txt文件中
fileID=fopen('data2.txt','w');
fprintf(fileID,'%6s %5s %10s %10s %10s \r\n','迭代次数','a','b','p','q');
for m=1:k
fprintf(fileID,'%6.0f %10.6f %10.6f %10.6f %10.6f \r\n',m,G(m,1),G(m,2),G(m,3),G(m,4));
end
fprintf(fileID,' x_opt=%10.7f, f_min=%10.7f',xopt,fmin);
fclose(fileID);