matlab代码:
% 对分法
e = 0.1;
a = -3;
b = 5;
while abs(a-b)>=e
c=(a+b)/2;
if (2*c-3<0)
a=c;
if(abs(a-b)<e)
t=(a+b)/2;
break;
end
elseif (2*c-3==0)
t=c;
break;
else
b=c;
if(abs(a-b)<e)
t=(a+b)/2;
break;
end
end
end
t
t*t-3*t
结果:
第一题:
第一题matlab代码:
%加步搜索法
t0 = 0;
h0 = 1;
a = 2;
f0 = t0*t0*t0-2*t0+1;
k = 0;
while 1
t = t0+h0;
f = t*t*t-2*t+1;
if f<f0
h0 = a*h0;
t0 = t;
f0 = f;
k = k+1;
else
if k ==0
h0 = -h0;
t0 = t;
else
break;
end
end
end
A = min(t,t0)
B = max(t,t0)
第一题结果:
把第一题结果带入第三题,得到上下限分别是1和3
matlab代码:
%牛顿法
e = 0.01;
a = 1;
b = 3;
t0 = 1;
while 1
t = t0 -(3*t0*t0-2)/(6*t0);
if abs(t-t0) >= e
t0 = t;
else
break;
end
end
t
t*t*t-2*t+1
结果:
matlab代码:
a = -3;
b = 5;
beta = 0.382;
e = 0.001;
while 1
t2 = a + beta *(b-a);
f2 = t2*t2+2*t2;
t1 = a+b-t2;
f1 = t1*t1+2*t1;
if abs(t1-t2) < e
t = (t1+t2)/2;
break
elseif f1<f2
a = t2;
t2 = t1;
f2 = f1;
else
b = t1;
t1 = t2;
f1 = f2;
t2 = a+beta*(b-a);
f2 = t2*t2+2*t2;
end
end
t
t*t+2*t
结果:
matlab代码:
t0 = 1;
t1 = 0;
t2 = 2;
e = 0.001;
while 1
tt = 0.5 * ((t0*t0-t2*t2)*(8*t1*t1*t1-2*t1*t1-7*t1+3)+...
(t2*t2-t1*t1)*(8*t0*t0*t0-2*t0*t0-7*t0+3)+...
(t1*t1-t0*t0)*(8*t2*t2*t2-2*t2*t2-7*t2+3))/...
((t0-t2)*(8*t1*t1*t1-2*t1*t1-7*t1+3)+...
(t2-t1)*(8*t0*t0*t0-2*t0*t0-7*t0+3)+...
(t1-t0)*(8*t2*t2*t2-2*t2*t2-7*t2+3));
if abs(tt - t0) < e
t = tt;
break;
else
if tt > t0
if (8*tt*tt*tt-2*tt*tt-7*tt+3) <= (8*t0*t0*t0-2*t0*t0-7*t0+3)
t2 = t0;
t0 = tt;
else
t1 = tt;
end
else
if (8*tt*tt*tt-2*tt*tt-7*tt+3) <= (8*t0*t0*t0-2*t0*t0-7*t0+3)
t1 = t0;
t0 = tt;
else
t2 = tt;
end
end
end
end
t
8*t*t*t-2*t*t-7*t+3
结果: