Newton-Raphson 法求解非线性方程组
来源:互联网 发布:linux bc 缩写 编辑:程序博客网 时间:2024/04/30 20:10
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。
设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0) f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=f(x)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。
关于Newton's method的基本使用方法参见:http://blog.csdn.net/iamskying/archive/2009/08/22/4471071.aspx
Metlab源程序:
function homework
[P,iter,err]=newton('f','JF',[7.8e-001;4.9e-001; 3.7e-001],0.01,0.001,1000);
disp(P);
disp(iter);
disp(err);
function Y=f(x,y,z)
Y=[x^2+y^2+z^2-1;
2*x^2+y^2-4*z;
3*x^2-4*y+z^2];
function y=JF(x,y,z)
f1='x^2+y^2+z^2-1';
f2='2*x^2+y^2-4*z';
f3='3*x^2-4*y+z^2';
df1x=diff(sym(f1),'x');
df1y=diff(sym(f1),'y');
df1z=diff(sym(f1),'z');
df2x=diff(sym(f2),'x');
df2y=diff(sym(f2),'y');
df2z=diff(sym(f2),'z');
df3x=diff(sym(f3),'x');
df3y=diff(sym(f3),'y');
df3z=diff(sym(f3),'z');
j=[df1x,df1y,df1z;df2x,df2y,df2z;df3x,df3y,df3z];
y=(j);
function [P,iter,err]=newton(F,JF,P,tolp,tolfp,max)
%输入P为初始猜测值,输出P则为近似解
%JF为相应的Jacobian矩阵
%tolp为P的允许误差
%tolfp为f(P)的允许误差
%max:循环次数
Y=f(F,P(1),P(2),P(3));
for k=1:max
J=f(JF,P(1),P(2),P(3));
Q=P-inv(J)*Y;
Z=f(F,Q(1),Q(2),Q(3));
err=norm(Q-P);
P=Q;
Y=Z;
iter=k;
if (err<tolp)||(abs(Y)<tolfp||abs(Y)<0.0001)
break
end
end
来自Metlab官网的方法:
参见:http://www.mathworks.com/matlabcentral/fileexchange/4313
一个C程序实例:
- Newton-Raphson 法求解非线性方程组
- Newton-Raphson法求解非线性方程复根
- 二分法,newton迭代法求解非线性方程组
- Newton_Raphson法求解非线性方程组
- 利用Newton Raphson、最陡梯度法求解函数最小值
- MATLAB求解非线性方程组
- 迭代法求解非线性方程组
- MATLAB求解非线性方程组
- Newton Raphson算法
- Newton-Raphson方法
- Newton-Raphson method
- Newton-Raphson方法
- matlab实现牛顿迭代法求解非线性方程组
- matlab实现牛顿迭代法求解非线性方程组
- 利用牛顿迭代法求解非线性方程组
- 关于非线性方程组的求解问题
- 使用matlab进行非线性方程组求解
- R语言非线性方程组求解dfsane,nleqslv
- 基础语法--关键字
- WinCE基础知识(二):WinCE 5.0 的目录结构
- Android自定义View之一:初探实例
- java.net.Socket
- 博弈论总结
- Newton-Raphson 法求解非线性方程组
- Android学习笔记13——XML文件解析
- 让Cygwin Vim编辑器正确工作
- java基础语法--标识符
- Windows (wince、 windows mobile、windows phone)错误代码大全
- 分页工具栏PagingToolBar的使用
- oracle中如何通过exp导出条件过滤后的部分表数据
- Choosing Optimal Data Types
- YUM介绍