无约束一维极限值问题——进退法
来源:百度文库 编辑:神马文学网 时间:2024/06/13 11:50:52
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
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