利用0.618法(黄金分割法)求极小值

[书籍]马昌风-最优化方法与MATLAB程序设计
书中例题编程详解

利用0.618法(黄金分割法)求极小值
在这里插入图片描述
思路图解:
利用0.618法(黄金分割法)求极小值_第1张图片
MATLAB程序如下:

clc,clear;
epsilon=10^-4;
phi=@(x) x^2-sin(x);   %phi为目标函数

a=0;b=1; %a,b,分别为区间(a,b)的端点
t=(sqrt(5)-1)/2;  %t为区间长度缩短率,即为每次迭代,区间缩短为原来的t倍
h=b-a;   %h为区间长度
delta=10^-4;  %delta为容许误差

phia=feval(phi,a);   %phia为区间左端点函数值
phib=feval(phi,b);  %phia为区间左端点函数值

p=a+(1-t)*h; %区间左端点取值表达式
q=a+t*h;  %区间右端点取值表达式

phip=feval(phi,p); %计算经过一次缩短区间之后的左端点函数值
phiq=feval(phi,q); %计算经过一次缩短区间之后的右端点函数值
k=1;  %k为迭代次数
while(abs(phib-phia)>epsilon)|(h>delta)  %当区间长度大于容许误差时或
                                                                %两区间端点函数值大于精度时,一直运行       
            
    if(phip

你可能感兴趣的:(MATLAB-最优化)