工程数学一

实验要求

1)请用0.618法求解优化问题:

 

的极小点和极小值,精度为10-6

2)根据0.618法算法步骤编写Matlab的程序实现0.618搜索法;

3)要求输出内容包括:极小点、极小值、每次迭代的abalak的值;

(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);

 

posted @ 2024-05-07 15:05  vvvcutee  阅读(6)  评论(0编辑  收藏  举报