1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| function [] = fib(f, a, b, e, t)
n=0;
for i=1:100
if fibonacci(i+1)>(b-a)/e
n=i;
break
end
end
disp(n+"步")
lam2=a+fibonacci(n)/fibonacci(n+1)*(b-a);
lam1=b-lam2+a;
f1=f(lam1);f2=f(lam2);
times=0;
while lam2-lam1>e
if nargin==5 && times>=t
break
end
times=times+1;
disp([a,lam1,lam2,b,f1,f2])
if f1<f2
b=lam2;
lam2=lam1;
lam1=b-lam2+a;
f2=f1;
f1=f(lam1);
else
a=lam1;
lam1=lam2;
lam2=b-lam1+a;
f1=f2;
f2=f(lam2);
end
end
disp([a,lam1,lam2,b,f1,f2])
disp("中点"+mean([lam1,lam2]))
disp("f(x)="+f(mean([lam1,lam2])))
|