牛顿迭代法求方程根的MATLAB程序
2012-07-13 22:23
246 查看
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.计算过程中需要求函数的倒数
%%
%%
%牛顿迭代法(切线法)求解方程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.计算过程中需要求函数的倒数
%%
相关文章推荐
- 对流方程的有限差分数值解法(步长定律、固有差分格式、matlab程序和输出图形)
- 雅克比(Jacobi)迭代法解线性方程组(Matlab程序)
- 加速子空间迭代法(Accelerated Subspace Iteration)求特征值问题matlab程序
- 数值分析 jacobi迭代法求解线性方程组 MATLAB程序实现
- 高斯—赛德尔(Gauss - Seidel)迭代法解线性方程组(Matlab程序)
- 最优化——拟牛顿方法matlab程序
- 牛顿(Newton)插值及其MATLAB程序
- 二分发求方程根的MATLAB程序
- 艾特肯加速法求方程根的MATLAB程序
- 弦割法求方程根的MATLAB程序
- 简单迭代法求方程根的MATLAB程序
- 用牛顿方法解一元非线性方程的根(Matlab实现)
- 关于UltraEdit 15.* 的语法高亮-支持Matlab程序.m文件
- matlab网格划分程序与matlab有限元的结合
- 雅可比迭代法解线性方程组(matlab程序)
- matlab练习程序(感知哈希对比图片)
- VS或VC调用matlab程序dll路径配置及错误分析
- matlab图像缩放程序
- matlab练习程序(白平衡<动态阈值>)
- Python是这样调用matlab程序的!