理论教育 运筹学实验指导:进退法求函数极值

运筹学实验指导:进退法求函数极值

时间:2023-11-17 理论教育 版权反馈
【摘要】:进退法是一种缩小极值区间的算法,算出的结果是一个包含极值的区间,适合在未知极值范围的情况下使用。例5.4取初始点为0,步长为0.05,用进退法求函数f t()=t4-2t2-t+1的极值区间。解:首先编写函数代码如下:再根据进退法原理编写如下代码:运行并分别输入参数值,得到如下结果:即函数极值为-59.109 4。

运筹学实验指导:进退法求函数极值

进退法是一种缩小极值区间的算法,算出的结果是一个包含极值的区间,适合在未知极值范围的情况下使用。

其理论依据是f(x)为单谷函数(只有一个极值点),且[a,b]为其极小值点的一个搜索区间。对于任意x1,x2∈[a,b],如果f(x1)<f(x2),则[a,x2]为极小值的搜索区间,如果f(x1)>f(x2),则[x1,b]为极小值的搜索区间。

因此,在给定初始点x0及初始搜索步长h的情况下,首先以初始步长向前搜索一步,计算f(x0+h)。

如果f(x0)>f(x0+h),则可知搜索区间为,其中待求。为确定,前进一步计算f(x0+λh),λ为放大系数,且λ>1,直到找到合适的λ,使得f(x0+h)<f(x0+λh),从而确定搜索区间为[x0,x0+λh]。

如果f(x0)<f(x0+h),则可知搜索区间为,其中待求。为确定,后退一步计算f(x0-λh),λ为缩小系数,且0<λ<1,直到找到合适的λ,使得f(x0-λh)>f(x0),从而确定搜索区间为[x0-λh,x0+h]。

进退法的基本算法步骤如下:

①给定初始点x(0),初始步长h0,令h=h0,x(1)=x(0),k=0;

②令x(4)=x(1)+h,k=k+1;

③若f(x(4))<f(x(1)),则转到步骤④,否则,转到步骤⑤;

④令x(2)=x(1),x(1)=x(4),f(x(2))=f(x(1)),f(x(1))=f(x(4)),令h=2h,转到步骤②;

⑤若k=1,则转到步骤⑥,否则,转到步骤⑦;

⑥令h=-h,x(2)=x(4),f(x(2))=f(x(4)),转到步骤②;

⑦令x(3)=x(2),x(2)=x(1),x(1)=x(4),停止计算,极小值点包含于区间[x(1),x(3)]或[x(3),x(1)]。

根据以上分析,编写用进退法求解一维函数的极值区间的MATLAB函数fun_JT如下:

其调用格式为

其中,f为目标函数;(www.daowen.com)

x0为初始点;

h0为初始步长;

eps为精度;

minx为目标函数取包含极值的区间左端点;

maxx为目标函数取包含极值的区间右端点。

例5.4 取初始点为0,步长为0.05,用进退法求函数f t( )=t4-2t2-t+1的极值区间。

解:在MATLAB命令窗口中输入:

运行后结果如下:

所以,函数f(t)=t4-2t2-t+1的极值区间为[0.350 0,1.550 0]。

例5.5 用进退法求函数f(x)=x2-10x-36的极值。其中a=0.1,h=0.1,e=0.05。

解:首先编写函数代码如下:

再根据进退法原理编写如下代码:

运行并分别输入参数值,得到如下结果:

即函数极值为-59.109 4。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈