用牛顿迭代法求方程的根matlab,牛顿迭代法求方程解 程序如下

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值