加载中...

【MATLAB与机械设计】一维优化进退法确定初始区间

在讨论一维搜索时,首先保证搜索区间函数具有单峰性,也就是在区间[a,b]中函数是凸函数,对于求极小值问题,函数值具有高—低—高的特性,在区间[a,b]上有唯一的最小值。

1,方法的建立
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.进退法确定搜索区间的程序框图
在这里插入图片描述
3,根据上述的程序框图,编写的MATLAB程序如下:

function [x,y] = u_d( f,a0,h )
%% 函数基本说明
%{
本函数为进退法用于求解一维优化问题中搜索最优区间,要求函数具有单峰性
初始值为函数f、初始点a0、初始步长h
返回值为最优值所在区间的左右端点
u_d意为进退

函数调用:
clear; clc;
f = @(x) (x^2+4*x+4);
[lb, ub] = u_d(f, 10000, 0.01)
%}

%% 函数主题部分
a1=a0;
a2=a0+h;
f1=f(a1);
f2=f(a2);
if f2<f1
    h=2*h;
    a2=a2+h;
    f1=f2;
    f2=f(a2);
    while 1
        if f1>f2
            a2=a2-h;
            h=2*h;
            a2=a2+h;
            f1=f2;
            f2=f(a2);
        else
            break
        end
    end
end
if f1<f2
    h=-h;
    a1=a1+h;
    f2=f1;
    f1=f(a1);
    while 1
        if f2>f1
            a2=a1-h;
            h=2*h;
            a1=a1+h;
            f2=f1;
            f1=f(a1);
        else
            break
        end
    end
end
x=a1;
y=a2;
end
posted @ 2020-03-19 13:30  不会编程的小学鸡  阅读(1095)  评论(0编辑  收藏  举报