牛顿迭代解方程g(x)=0.m

来自「拉格朗日插值多项式拟合,牛顿插值多项式,欧拉方程解偏微分方程,使用极限微分求解导」· M 代码 · 共 33 行

M
33
字号
%牛顿迭代法解方程g(x)=0的解法
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%该方法的优点:是求解非线性方程的单,实,复,重,根
%        缺点:是收敛性严重依赖于初值的选取
%       运用定理:若方f(x)=0;在(a,b)区间上有二级连续导数,且满足条件f(a)*f(b)<0;
%                                                 f(x)'!=0;x属于(a,b)
%                                                 f(x)''在(a,b)上不变号则任取初值x0属于(a,b)               
%                                                 只要满足f(x0)f(x)''>0  由x0作为初始值的牛顿迭代法必收敛于唯一实根                
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%__________________________________________________________________________
%调用方法:先设置好函数和函数的导数即g和dg
%          function y=g(x)
%                   y=x.^2-5;
%          function z=dg(x)
%                   z=2*x;
%再用[x,err,k,y]=newton(‘g’,‘dg’,x0,delta,epsion,max1)进行调用
%_________________________________________________________________________
function  [x,err,k,y]=newton(g,dg,x0,delta,epsion,max1)
%_________________________________________________________________________
%参数的含义:   输入值     g和dg为函数和函数的导数;
%                          x0为初始迭代值
%                          delta和epsion为x的最小范围和y的最小范围
%                          max1最大迭代次数
%               输出值     x为最后的解,err为其出现的绝对误差,k为迭代次数,y为对应x的数值
%________________________________________________________________________
for k=1:max1
    x=x0-feval(g,x0)/feval(dg,x0);
    err=abs(x-x0);
    relerr=2*err/(abs(x)+delta);
    x0=x;
    y=feval(g,x0);
    if (err<delta)|(relerr<delta)|abs(y)<epsion,break,end
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?