牛顿迭代法求方程根的MATLAB程序

时间:2023-01-07 20:28:43
function [x_reality,n_reality] = Newt( 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); del_x = 0.0000001; % 用于求函数导数值的极小量 n_reality = 0; x_reality = x_start; x_start = x_reality + 1000; % 保证迭代能开始 %% 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 x_start = x_reality; % 把x_reality的值赋给x_start,用于求x_start点的到数值以及迭代 if(feval(f_name,x_start + del_x) - feval(f_name,x_start))==0 disp('导数为0') break; else y_deriv = (feval(f_name,x_start + del_x) - feval(f_name,x_start)) / del_x; % x_start点的导数值 x_reality = x_start - feval(f_name,x_start) / y_deriv; % 牛顿迭代 n_reality = n_reality + 1; % 迭代次数加1 fprintf('n_reality=%d, x_start=%14.14f,y_start=%14.14f\n',n_reality,x_start,feval(f_name,x_start)); end end end disp('牛顿迭代发结束'); end %% % 牛顿迭代法的优点: % 1.适用面广,可用于求重根和代数方程的复根 % 2.如果所求的根时方程的单根且迭代过程收敛,牛顿迭代法收敛速度较快 % 牛顿迭代法的缺点: % 1.对初始近似根的要求较高 % 2.计算过程中需要求函数的倒数 %%

 

本文出自 “风雪夜之星” 博客,请务必保留此出处http://592669550.blog.51cto.com/5487419/930491