📄 牛顿迭代解方程g(x)=0.m
字号:
%牛顿迭代法解方程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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -