% 牛顿下山法求解方程f(x)=x^3-x-1=0在x=1.5附近的根 % 下山因子从1开始

% 初值 x0 = 0.4;

% 设定迭代精度和最大迭代次数 tol = 1e-10; max_iter = 100;

% 初始化迭代次数和下山因子 iter = 0; alpha = 1;

% 迭代求解 while iter < max_iter % 计算当前点的函数值和导数值 fx = x0^3 - x0 - 1; fx_d = 3 * x0^2 - 1;

% 如果导数值为0,则直接退出迭代
if abs(fx_d) < tol
    break;
end

% 计算当前点的下山因子
if iter > 0
    alpha = min(1, 2 * (fx - fx_last) / fx_d);
end

% 计算下一个点的位置
x1 = x0 - alpha * fx / fx_d;

% 如果下山成功,则更新下山因子
if abs(x1 - x0) < abs(alpha * fx / fx_d)
    alpha = alpha / 2;
end

% 更新迭代次数和上一个点的函数值
iter = iter + 1;
fx_last = fx;

% 如果达到迭代精度,则退出迭代
if abs(x1 - x0) < tol
    break;
end

% 更新当前点的位置
x0 = x1;

end

% 输出结果 if iter < max_iter fprintf('迭代成功,根为 %f,下山因子为 %f,迭代次数为 %d\n', x1, alpha, iter); else fprintf('迭代失败,达到最大迭代次数 %d\n', max_iter); end

Matlab 牛顿下山法求解方程 f(x) = x^3 - x - 1 = 0 在 x = 1.5 附近的根

原文地址: https://www.cveoy.top/t/topic/nmwA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录