牛顿迭代法(怎么使用matlab牛顿迭代法解多重根方

知识大全 2022-08-01 19:48www.worldometers.cn知识大全

方法,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 的根为 %.14fn迭代次数为:%dn',...


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.14fn',n_reality,x_start,feval(f_name,x_start));


end


end


end


disp('牛顿迭代发结束');


end

Copyright © 2016-2025 www.worldometers.cn 全球网 版权所有 Power by

全球化,全球疫情,全球股市,全球新闻网,全球地图,全球通史,经济全球化,全球变暖,全球进化,