无约束一维极限值问题——进退法

来源:百度文库 编辑:神马文学网 时间:2024/04/26 07:33:21

MATLAB 源代码

function [minx,maxx]=minJT(f,x0,h0,eps)
%目标函数:f;
%初始点:x0;
%初始步长:h0;
%精度:eps;
%目标函数取包含极值区间左端点:minx;
%目标函数取包含极值区间右端点:maxx;

format long;
if nargin==3
    eps=1.0e-6;
end
 x1=x0;
 k=0;
 h=h0;
 while 1
     x4=x1+h;%试探步
     k=k+1;
     f4=subs(f,findsym(f),x4);%把符号变成数值求函数f在x4处的值
     f1=subs(f,findsym(f),x1);
     if f4         x2=x1;
         x1=x4;
         f2=f1;
         f1=f4;
         h=2*h;  %加大步伐
     else
         if k==1
             h=-h;
             x2=x4;
             f2=f4;
         else
             x3=x2;
             x2=x1;
             x1=x4;
             break;
         end
     end
 end
 
minx=min(x1,x3);
maxx=x1+x3-minx;
format short;

运行实例

>> syms t;
>> f=t^4-t^2-2*t+5;
>> [x1,x2]=minJT(f,0,0.1)

结果

x1 =

    0.3000


x2 =

    1.5000