% 
% hw01
%

clearvars;
 
f   = @(x) 1./(x-1) + 1./(x-5) - 1/3;  % 函数 
xt  = 2.394448724536011; % 精确值参考
tol = 1e-6;    % 精度要求
itermax = 30;  % 最大迭代步数
a = 1.1; b = 4.9;  % 求解区间

% 调用二分法 
[x,iter] = bisection(f,a,b,tol,itermax,xt);
fprintf('二分法：近似解 x=%.12f, 迭代步数 %d\n\n', x, iter);

% 调用 Newton 迭代法
df = @(x) - (1./(x-1).^2 + 1./(x-5).^2);  % 导函数
x0 = 3.0;    % 迭代初值
[x,iter] = newton(f,df,x0,tol,itermax,xt);
fprintf('Newton 迭代：近似解 x=%.12f, 迭代步数 %d\n\n', x, iter);

% 调用 Steffensen 迭代法
g = @(x) x + (1./(x-1) + 1./(x-5) - 1/3)./(1./(x-1).^2 + 1./(x-5).^2);  % 迭代函数, newton 迭代函数
x0 = 3.0;    % 迭代初值
[x,iter] = steffensen(f,g,x0,tol,itermax,xt);
fprintf('Steffensen 迭代：近似解 x=%.12f, 迭代步数 %d\n\n', x, iter);

% 调用割线法 
x0 = 1.1; x1 = 3.0; % 迭代初值
[x,iter] = secant(f,x0,x1,tol,itermax,xt);
fprintf('割线法：近似解 x=%.12f, 迭代步数 %d\n\n', x, iter);
 

%%%%% 二分法
function [x,iter] = bisection(f,a,b,tol,itermax,xt)
%
%  your code here
%
end

%%%%% Newton 迭代
function [x,iter] = newton(f,df,x,tol,itermax,xt)
%
%  your code here
%
end

%%%%% Steffensen 迭代
function [x,iter] = steffensen(f,g,x,tol,itermax,xt)
%
%  your code here
%
end

%%%%% 割线法
function [x,iter] = secant(f,x0,x1,tol,itermax,xt)
%
%  your code here
%
end
