%史提芬加速迭代法(Steffensen's method)
% 迭代公式:
%
% Xn+1 = Xn - (f(Xn) - Xn)^2 / f(f(Xn))- 2*f(Xn) + Xn
%
function [y ] = fun_1(x)
y = sqrt(x + 3) - 2x + 7;
% g = sqrt(x + 3) + 2x + 7
end
function [p] = fun_4(Xn)
format long
err = 1e-9;
step = 1000;
for n = 1:step
y = feval(@fun_1,Xn) ; %f(x)g`
z = feval( @fun_1,y ) ; %f(f(x))
Xn_1 = Xn - ((y -Xn)^2) / (z - 2*y + Xn);
if abs(Xn - Xn_1) <err
fprintf('解为 %f 误差为%f ,迭代步数 %d', Xn, abs(Xn_1-Xn),n)
break;
end
Xn = Xn_1;
end
[Xn n abs(Xn_1-Xn)]
解为 3.160691 误差为0.000000 ,迭代步数 4
y = feval(@fun_1,Xn) ; %f(x)
z = feval( @fun_1,y ) ; %f(f(x))
这两行改为:
y = feval(@fun_1,Xn)+ Xn ; %f(x)
z = feval( @fun_1,y ) + y; %f(f(x))
解为 4.905869 误差为0.000000 ,迭代步数 4
这个才是正确结果。
我没改之前的代码是按照迭代公式敲得但算出结果确实错的。谁能告诉问题出在哪?