第4次作业用matlab求解f(t)=(t^2-1)^2+(t-1)^2+3 [-10,10]最小植(黄金分割法)。
x为最优的t值,minf为最优的函数值,f为函数,t为函数f的变量,a,b为下单峰区间[a,b],eps为精确度,
M函数文件:
function [x,minf] = minHJ(f,a,b,eps)
format long;
if nargin == 3
eps = 1.0e-6;
End
l = a + 0.382*(b-a);
u = a + 0.618*(b-a);a=-10
k=1;
tol = b-a;
while tol>eps && k<100000
fl= subs(f ,findsym(f),l);%subs是置换函数
if fl > fu
a = l;
l = u;
u = a + 0.618*(b - a);
else
b = u;
u = l;
l = a + 0.382*(b-a);
end
k = k+1;
tol = abs(b - a);
end
if k == 100000
disp('找不到最小值!');
x= NaN;
minf = NaN;
return;
end
x= (a+b)/2;
minf = subs(f, findsym(f),x);
format short;
窗口M文件调用:
>> syms t