物来顺应,未来不迎,当时不杂,既过不恋;|

万事胜意k

园龄:2年8个月粉丝:11关注:4

工程数学上机实验(一)

一维寻优法(0.618 法)程序设计

1、基本要求

通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法

的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。

2、主要内容

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

        在区间[0,1]上的极小点和极小值;

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

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

(4)按照模板撰写实验报告,要求规范整洁。

3、操作要点

(1)学习 MATLAB 基础编程知识;

(2)认真学习 0.618 法算法步骤,编写 MATLAB 程序 golds 函数;

(3)调用 golds 函数,输入题目参数;

(4)撰写实验报告。

4、主要仪器设备

微机及 Matlab 软件。

代码:
golds.m:

function [xmin, fmin, iter] = golds(fun, a, b, tol)
rho = (sqrt(5) - 1) / 2;
x1 = a + (1 - rho) * (b - a);
x2 = a + rho * (b - a);
f1 = fun(x1);
f2 = fun(x2);
iter = [a, b, x1, x2; zeros(floor(log2((b - a) / tol)), 4)];
for k = 1:size(iter, 1) - 1
if f1 < f2
b = x2;
x2 = x1;
x1 = a + (1 - rho) * (b - a);
f2 = f1;
f1 = fun(x1);
else
a = x1;
x1 = x2;
x2 = a + rho * (b - a);
f1 = f2;
f2 = fun(x2);
end
iter(k + 1, :) = [a, b, x1, x2];
if abs(b - a) < tol
break;
end
end
if f1 < f2
xmin = x1;
fmin = f1;
else
xmin = x2;
fmin = f2;
end
iter = iter(1:k + 1, :);

main.m

[umin, fmin, iter] = golds(@(x) x^2 - sin(x), 0, pi, 1e-6);
disp(['极小点 = ' num2str(umin)]);
disp(['极小值 = ' num2str(fmin)]);
disp(['每次迭代的 a、b、al、ak 的值:'])
disp(iter);

运行结果:

 

本文作者:万事胜意k

本文链接:https://www.cnblogs.com/ysk0904/p/17401164.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   万事胜意k  阅读(169)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起