工程数学上机实验(一)
一维寻优法(0.618 法)程序设计
1、基本要求
通过一维寻优黄金分割法的程序设计,培养学生计算机的应用能力,并为今后无约束优化方法
的学习和编程,奠定基础;掌握缩小寻优区间的黄金分割法。
2、主要内容
(1)请用 0.618 法求解优化问题:
在区间[0,1]上的极小点和极小值;
(2)根据 0.618 法算法步骤编写 Matlab 的程序实现 0.618 搜索法;
(3)要求输出内容包括:极小点、极小值、每次迭代的 a、b、al、ak 的值;
(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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步