本文主要是介绍matlab函数拆分法,Matlab优化方法之黄金分割算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
% 优化方法之黄金分割算法
% 黄金分割算法适用于一元函数f(x)在给定区间[a, b]内搜索极小点的问题
% 其基本原理为: 按照黄金分割比例原则逐步缩小搜索区间, 可类比二分法, 二分法是取a和b的中点逐渐缩小搜索空间,
而黄金分割算法是取a和b的黄金分割点
% 2015-6-27
一、Matlab脚本文件,在此文件进行相应修改,然后运行即可
% 1.设置要求的目标函数和搜索区间
syms
x; %定义x为自变量
y = (x-1)^2 + 1; %要求的目标函数
a = 0.1; b =
2; %a,b为搜索区间
epsilon = 1e-3; %epsilon为收敛精度
% 2.调用黄金分割算法函数求解
[best_x, best_y] = golddiv(y, x, a, b, epsilon)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
二、黄金分割算法的函数文件
function [best_x, best_y] = golddiv(y, x, a, b, epsilon)
% 本函数实现黄金分割算法
% y是目标函数, x是自变量, a,b为区间范围, epsilon为精度
% best_x为黄金分割算法找到的最优点
% best_y为最优点处的函数值
if nargin ==
4 %如果输入参数没有精度要求
epsilon=0.001; %设置默认的epsilon
end
x1 = a + 0.382 * (b - a); %根据黄金分割比例确定搜索点
f1 = subs(y, x,
x1); %函数y在x1处的值
x2 = a + 0.618 * (b - a); %根据黄金分割比例确定搜索点
f2 = subs(y, x,
x2); %函数y在x2处的值
while(abs(b - a) > epsilon)
if f1 <
f2 %如果f1小于f2
b =
x2; %b为新的右边界
x2 = x1; %更新x2值
f2 = f1;
x1 = a + 0.382 * (b - a); %更新x1值
f1 = subs(y, x, x1);
else
a = x1;
x1 = x2;
f1 = f2;
x2 = a + 0.618 * (b - a);
f2 = subs(y, x, x2);
end
end
best_x = (a + b) / 2; %最优的x值取a和b的平均值
best_y = subs(y, x, best_x); %最优的函数值
end
如果你有所收获,欢迎用微信扫一扫进行打赏,赏金随意。
这篇关于matlab函数拆分法,Matlab优化方法之黄金分割算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!