function [x_reality,n_reality] = Simple_stepit( f_name,x_start,tolerance,n_limit)
%%
% 简单迭代法(也叫不动点迭代法)求解方程f_name = 0根的MATLAB实现
% f_name为迭代函数
% x_start为开始迭代的初始坐标
% tolerance为函数迭代的精度要求
% n_limit为函数的最大迭代次数
%%
% x_reality为最终迭代结果
% n_reality为最后的迭代次数
%%
format long; % 计算结果保留到小数点后14位
fprintf('简单迭代法求方程: %s = 0 的近似根\n',f_name);
n_reality = 1;
fprintf(' n x_start f(x_start)\n');
x_reality = feval(f_name,x_start); % 求方程f_name在x_start处的值,也是初次迭代
fprintf('%3.0f,%14.14f,%14.14f\n',n_reality,x_start,x_reality);
%%
while 1
if(abs(x_reality - x_start) <= tolerance) % 如果满足精度要求,输出结果,跳出while循环
fprintf('在精度不超过%.14f的条件下,方程:%s = 0 的根为 %.14f\n迭代次数为:%d\n',...
tolerance,f_name,x_reality,n_reality);
break;
elseif(n_reality > n_limit) % 如果迭代次数超过限制,输出提示语,结束循环
disp('迭代次数超界');
break;
else
n_reality = n_reality + 1; % 迭代次数加1
x_start = x_reality; % 把上一次迭代的结果赋给x_start
x_reality = feval(f_name,x_start); % 继续下一次迭代
fprintf('%3.0f,%14.14f,%14.14f\n',n_reality,x_start,x_reality);
end
end
disp('简单迭代法结束');
end
%%
% 简单迭代法的优点:
% 1.方法简单,易于在计算机上实现
% 2.迭代公式不唯一
% 简单迭代法的缺点
% 1.要求迭代序列收敛
% 2.选取迭代函数,使迭代过程收敛较麻烦
%%