MATLAB之黄金分割法求极值

MATLAB之黄金分割法求极值
一、算法原理
该算法可以与进退法结合求函数极值,利用进退法求出高函数极小值所在的区间,将该区间作为输入利用黄金分割法求得极值。
假设函数f(x)的极值坐在区间为(a,b),利用黄金分割点
在区间(a,b)内插入两点:
x1=a+0.382*(b-a);
x2=a+0.618*(b-a);
将搜索区间分为三段:
比较f(x1)f(x2)的大小,
若 f(x1)<f(x2)
b=x2; 新的搜索区间为(a,x2)
否则
a=x1;新的搜索区间为(x1,b)
最后判断 abs(a,b) ,该区间是否足够小,取区间中点作为极值点。

二、matlab程序

clc
clear
f=@(x) x.^3-6*x+9;
fplot(f)
[a,b]=Min_jintui(f,0,0.001);
[fx,x]=huangjin(f,[a b],100)  % (a,b)为搜索区间
function [result,x]=huangjin(f,x0,n)
tol=1e-6;%精度
x1=x0(1);
x2=x0(2);
i=1;
while i < n
    %取中间值
    a=x1+0.382*(x2-x1);
    b=x1+0.618*(x2-x1);
    fa=f(a);
    fb=f(b);
    % 判断fa  fb大小,缩小区间
    if fa < fb
        x2=b;
    else
        x1=a;
    end
    if  abs(x1-x2) < tol
        result=f((x1+x2)/2);
        x=(x1+x2)/2;
        break;
    end
    i=i+1;
end
end
发布了10 篇原创文章 · 获赞 8 · 访问量 69

猜你喜欢

转载自blog.csdn.net/STM89C56/article/details/105447453