在求解目标函数的极小值的过程中,若对设计变量的取值范围不加限制,称这种最优化问题为无约束优化问题。尽管对于机械的优化设计问题,多数是有约束的,但无约束最优化方法仍然是最优化设计的基本组成部分。因为约束最优化问题可以通过对约束条件的处理,转化为无约束最优化问题来求解。
无约束一维极值问题求解时一般采用一维搜索法,其中方法包括多种。线性搜索包括黄金分割、斐波那契法、牛顿法等,非线性搜索包括抛物线法和三次插值法。
无约束最优化算法求解无约束最优化问题的方法,有解析法和直接法两类:
进退法是一种缩小极值区间的算法,算出的结果是一个包含极值的区间,适用于未知极值范围的情况下使用。
其理论依据是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),则可知搜索区间为[x0,x],其中x待求,为确定x,前进一步计算 f(x0+λh),λ为放大系数,且 λ>1,直到找到合适的λ" ,使得f(x0 +h) < f(x0+λ" h),从而确定搜索区间为[x0,x0+λ"h]。
如果f(x0) < f(x0 +h),则可知搜索区间为[x,x0+h],其中x待求,为确定x,后退一步计算 f(x0-λh),λ为缩小系数,且0<λ<1,直到找到合适的λ”,使得 f(x0-λ" h) > f(x0),从而确定搜索区间为[x0 -λ”h,x0+h]。
进退法的基本算法步骤如下:
根据以上分析,编写用进退法求解一维函数的极值区间的MATLAB函数fun_ JT
如下:
function [minx, maxx]= fun_JT(f, x0, h0, eps)
% 目标函数:f
% 初始点:x0
% 初始步长:h0
% 精度:eps
% 目标函数取包含极值的区间左端点:minx
% 目标函数取包含极值的区间又端点:maxxformat long;if nargin == 3;eps = 1.0e-6;endx1 = x0;k=0;h= h0;while 1x4 = x1 + h;k = k+ 1;f4 = subs(f, findsym(f),x4);f1 = subs(f, findsym(f),x1);if f4 < f1x2 = x1;x1 = x4;f2 = f1;f1 = f4;h = 2* h;elseif k == 1h = -h;x2 = x4;f2 = f4;elsex3 = x2;x2 = x1;x1 = x4;break;endendendminx = min (x1,x3);maxx = x1 +x3 -minx;format short;
end
例 取初始点为 0,步长为0.05,用进退法求函数f(t)=t4-2t2-t+1的极值区间。
解:
clear all
clc
syms t;
f=t^4-2*t^2-t+ 1;
[x1,x2] = fun_JT(f,0,0.05)
由上面的结果可知f(t)的极值点在区间[0.35,1.55]内。
本文发布于:2024-02-04 05:30:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170700172052587.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |