function [x, success] = newton_method(x0, epsilon, N)
% 牛顿法求解非线性方程 f(x) = 0
% 输入:
% x0 - 初始值
% epsilon - 收敛误差
% N - 最大迭代次数
% 输出:
% x - 近似解
% success - 是否成功找到解
% 初始化
k = 1;
success = false;
while k <= N
% 计算函数值和导数值
fx = f(x0);
dfx = df(x0);
% 检查 f(x0) 是否为 0
if fx == 0
x = x0;
success = true;
disp(['找到精确解,x = ', num2str(x)]);
return;
end
% 计算 x1 = x0 - f(x0)/f'(x0)
x1 = x0 - fx / dfx;
% 判断收敛条件 |x1 - x0| < epsilon
if abs(x1 - x0) < epsilon
x = x1;
success = true;
disp(['迭代收敛,结果为 x = ', num2str(x)]);
return;
end
% 判断是否达到最大迭代次数
if k == N
disp('迭代失败,达到最大迭代次数');
x = NaN; % 用 NaN 表示失败
return;
end
% 更新 x0 和 k
x0 = x1;
k = k + 1;
end
end
% 定义函数 f(x)
function y = f(x)
% 在此定义你要求解的函数
y = x^2 - 2; % 示例:求解 x^2 - 2 = 0 的解
end
% 定义导数函数 f'(x)
function dy = df(x)
% 在此定义 f(x) 的导数
dy = 2 * x; % 示例:导数为 2*x
end