解非线性方程组的牛顿迭代法
- 格式:ppt
- 大小:1.13 MB
- 文档页数:15
1. 非线性方程组求解1.分别用牛顿法,及基于牛顿算法下的Steffensen 加速法。
(1) 求ln(sin )x x +的根。
初值0x 分别取0.1,1,1.5,2,4进行计算。
(2) 求sin =0x 的根。
初值0x 分别取1,1.4,1.6,1.8,3进行计算。
分析其中遇到的现象与问题。
(1)牛顿法牛顿法实质上是一种线性化方法,其基本思想是将非线性方程()0f x =逐步归结为某种线性方程来求解。
将已知方程()0f x =在近似值k x 附近展开,有()()()()'0k k k f x f x f x f x x ≈+-=,构造迭代公式,则1k x +的计算公式为:()()1',0,1,,k k k k f x x x k f x +=-= (1-1)根据Taylor 级数的几何意义我们可以从几何上形象的看牛顿迭代法的求解()0f x =的过程,第一次迭代()()'1000/x x f x f x =-,其中()()'00/f x f x 的几何意义很明显,就是0x 到1x 的线段长度(这可以从直角三角形的知识得到)。
第二次迭代()()'2111/x x f x f x =-,其中()()'11/f x f x 的几何意义很明显,就是1x 到2x 的线段长度。
同理可以进行第三次迭代第四次迭代,可以明显的看出x 的取值在不断逼近真实解*x 。
如图1-1所示:图1-1○1求ln(sin )=0x x +的根时,迭代公式为()1ln(sin )sin 1cos k k x x x x x x x+++=++,0示。
计算结果见附录1表F.1-1所示。
初值取1.5,2,4进行计算时结果不收敛。
表 1-1 牛顿法计算结果○2求sin =0x 的根时,迭代公式为1cos k k x x x+=+,初值0x 分别取1、1.4、1.6、1.8、3计算时结果收敛,误差小于510-时,近似解如表1-2所示。
非线性方程求根——牛顿迭代法一、牛顿迭代法的基本思想基本思想:将非线性方程逐步归结为某种线性方程求解。
设方程f (x )=0有近似根x k (f `(x k )≠0),将f (x )在x k 展开:(ξ在x 和x k 之间)2()()()()()()2!k k k k f f x f x f x x x x x ξ'''=+-+-()()()()k k k f x f x f x x x '≈+-可设记该线性方程的根为x k +1,则()()()0k k k f x f x x x '+-=1()()k k k k f x x x f x +=-'故f (x )=0可近似表示为即为Newton 法迭代格式。
(k =0,1,……)例:用Newton 迭代法求方程310x x --=在x 0=1.5附近的近似实根。
解:32()1,()31f x x x f x x '=--=-迭代公式为312131kk k k k x x x x x +--=--计算步骤如下:(1)取初值x 0=1.5;(2)按照迭代公式计算x 1;(3)若|x 1-x 0|<=0.00001,终止迭代;否则,x 0=x 1;转(2);(4)输出迭代次数和近似根.二、牛顿迭代法的实现MATLAB求解程序设计:方程及一阶导数函数:function[fun,dfun]=fun0(x)fun=x^3-x-1;%求原函数的值dfun=3*x^2-1;%求一阶导数的值计算主程序:clearx0=1.5;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=1;while abs(x1-x0)>1e-5x0=x1;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=i+1;enddisp('the solution is x1=')x1disp('the iter time is ')i计算结果为:the solution is x1=x1 =1.3247the iter time isi =4可见经过4次迭代即到达要求的精度,原方程的一个近似实数根为1.3247.三、牛顿迭代法的收敛性牛顿迭代法的迭代函数:)()()(x f x f x x '-=ϕ222)]([)()()]([)()()]([1)(x f x f x f x f x f x f x f x '''='''-'-='ϕ设f (x *)=0,f `(x *)≠0,则ϕ`(x *)=0,故Newton 迭代法在x *附近至少平方收敛。
迭代法和牛顿迭代法的优缺点及应用在数值计算和算法设计中,迭代法和牛顿迭代法是两种常见的数值优化方法。
它们可以很好地用于解决非线性方程组、最优化问题以及数学模型的求解等问题。
在实际应用中,它们的优缺点各有不同,可根据问题的特点选择适合的方法。
本文将对迭代法和牛顿迭代法的优缺点及应用进行分析。
一、迭代法1、迭代法的原理迭代法是一种通过不断逼近目标值的方法。
其思想是将一个原问题转化为一个递归求解的过程。
假设我们要求解一个方程f(x) = 0,可以利用如下公式进行迭代:$x_{n+1} = g(x_n)$其中,$g(x_n)$是一个递推公式,用来表示如何从$x_n$ 得到$x_{n+1}$。
通过不断迭代,可以逐渐逼近解。
当迭代次数足够多时,可以得到符合精度的解。
2、迭代法的优点(1)实现简单:迭代法的计算过程非常简单,只需要考虑递推公式即可。
(2)收敛速度较快:迭代法的收敛速度要比其他方法要快,尤其是在某些非线性问题中,迭代法表现出了其优异的收敛性。
(3)适用范围广:迭代法可以用于解决各种类型的数学问题,包括求解非线性方程组、求解最优化问题以及求解微积分方程等。
3、迭代法的缺点(1)收敛不稳定:由于迭代法只是通过不断逼近目标值的过程,收敛的速度和稳定性都受到了影响,可能存在发散的情况。
(2)初值选择的影响:迭代法在求解问题时,对于初值的选择需要非常慎重,因为不同的初值会得到不同的收敛结果。
(3)依赖递推公式:迭代法需要依赖于递推公式,当递推公式难以求解或者导数难以计算时,迭代法的效果可能会受到影响。
二、牛顿迭代法1、牛顿迭代法的原理牛顿迭代法是一种利用函数的一阶导数和二阶导数来逼近根的方法。
对于一个非线性方程f(x)=0,设其在$x_0$处的导数不为0,则可以用如下公式进行迭代:$x_{n+1} = x_n −\frac {f(x_n)}{f′(x_n)}$其中$f'(x_n)$是$f(x_n)$的一阶导数。
牛顿迭代法一、 牛顿迭代法牛顿迭代法也称为牛顿-拉夫森(Newton-Raphson)迭代法,它是数值分析中最重要的方法之一,它不仅适用于方程或方程组的求解,还常用于微分方程和积分方程求解。
二、 迭代公式,...2,1,0,)()(1='-=+k x f x f x x k k k k用迭代法解非线性方程时,如何构造迭代函数是非常重要的,那么怎样构造的迭代函数才能保证迭代法收敛呢?牛顿迭代法就是常用的方法之一,其迭代格式的来源大概有以下几种方式(主要是第一种):1、设],[)(2b a C x f ∈,对)(x f 在点],[0b a x ∈作泰勒展开: !2))((''))((')()(20000x x f x x x f x f x f -+-+=ξ略去二次项,得到)(x f 的线性近似式:))((')()(000x x x f x f x f -+≈。
由此得到方程=)(x f 0的近似根(假定≠)('0x f 0),)(')(000x f x f x x -=即可构造出迭代格式(假定≠)('k x f 0):)(')(1k k k k x f x f x x -=+ 公式(1)这就是牛顿迭代公式,若得到的序列{k x }收敛于α,则α就是非线性方程的根。
2、 牛顿迭代法也称为牛顿切线法,这是由于)(x f 的线性化近似函数)(x l =))((')(000x x x f x f -+是曲线y =)(x f 过点))(,(00x f x 的切线而得名的,求)(x f 的零点代之以求)(x l 的零点,即切线)(x l 与x 轴交点的横坐标,如右图所示,这就是牛顿切线法的几何解释。
实际上,牛顿迭代法也可以从几何意义上推出。
利用牛顿迭代公式,由k x 得到1+k x ,从几何图形上看,就是过点))(,(k k x f x 作函数)(x f 的切线k l ,切线k l 与x 轴的交点就是1+k x ,所以有1)()('+-=k k k k x x x f x f ,整理后也能得出牛顿迭代公式:)(')(1k k k k x f x f x x -=+。
matlab实现牛顿迭代法求解非线性方程组已知非线性方程组如下3*x1-cos(x2*x3)-1/2=0x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0exp(-x1*x2)+20*x3+(10*pi-3)/3=0求解要求精度达到0.00001 ————————————————————————————————首先建立函数fun储存方程组编程如下将fun.m保存到工作路径中:function f=fun(x);%定义非线性方程组如下%变量x1 x2 x3%函数f1 f2 f3syms x1 x2 x3f1=3*x1-cos(x2*x3)-1/2;f2=x1^2-81*(x2+0.1)^2+sin(x3)+1.06;f3=exp(-x1*x2)+20*x3+(10*pi-3)/3;f=[f1 f2 f3]; ————————————————————————————————建立函数dfun用来求方程组的雅克比矩阵将dfun.m保存到工作路径中:function df=dfun(x);%用来求解方程组的雅克比矩阵储存在dfun中f=fun(x);df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')];df=conj(df'); ————————————————————————————————编程牛顿法求解非线性方程组将newton.m保存到工作路径中:function x=newton(x0,eps,N);con=0;%其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛for i=1:N;f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});x=x0-f/df;for j=1: length(x0);il(i,j)=x(j);endif norm(x-x0)<epscon=1;break;endx0=x;end%以下是将迭代过程写入txt文档文件名为iteration.txtfid=fopen('iteration.txt','w');fprintf(fid,'iteration');for j=1:length(x0)fprintf(fid,' x%d',j);endfor j=1:ifprintf(fid,'\n%6d ',j);for k=1:length(x0)fprintf(fid,' %10.6f',il(j,k));endendif con==1fprintf(fid,'\n计算结果收敛!');endif con==0fprintf(fid,'\n迭代步数过多可能不收敛!');endfclose(fid); ————————————————————————————————运行程序在matlab中输入以下内容newton([0.1 0.1 -0.1],0.00001,20) ————————————————————————————————输出结果——————————————————————————————————————————在iteration中查看迭代过程 iteration x1 x2 x3.mulStablePoint用不动点迭代法求非线性方程组的一个根function [r,n]=mulStablePoint(F,x0,eps)%非线性方程组:f%初始解:a%解的精度:eps%求得的一组解:r%迭代步数:nif nargin==2eps=1.0e-6;endx0 = transpose(x0);n=1;tol=1;while tol>epsr= subs(F,findsym(F),x0); %迭代公式tol=norm(r-x0); %注意矩阵的误差求法,norm为矩阵的欧几里德范数n=n+1;x0=r;if(n>100000) %迭代步数控制disp('迭代步数太多,可能不收敛!');return;endendx0=[0 0 0];[r,n,data]=budong(x0);disp('不动点计算结果为')x1=[1 1 1];x2=[2 2 2];[x,n,data]=new_ton(x0);disp(’初始值为0,牛顿法计算结果为:’)[x,n,data]=new_ton(x1);disp('初始值为1,牛顿法计算结果为:')[x,n,data]=new_ton(x2);disp ('初始值为2,牛顿法计算结果为:')budong.mfunction[r,n,data]=budong(x0, tol)if nargin=-1tol=1e-3:endx1=budong fun(x0);n=1;while(norm(x1-x0))tol)&(n500)x0=x1;x1=budong_fun(x0);n=n+1:data(:,n)=x1;endr=x1:new_ton.mfunction [x,n,data]=new_ton(x0, tol)if nargin=-1tol=1e-8;endx1=x0-budong_fun(x0)/df1(x0);n=1;while (norm(x1-x0))tol)x0=x1;x1=x0-budong_fun(x0)/df1(x0);n=n+1;data(:,n)=x1;endx=x1;budong_fun.mfunction f=budong_fun(x)f(1)=3* x(1)-cos(x(2)*x(3))-1/2;f(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06; f(3)=exp(-x(1)*x(2))+20* x(3)+10* pi/3-1;f=[f(1)*f(2)*f(3)];df1.mfunction f=df1(x)f=[3sin(x(2)*x(3))*x(3) sin(x(2)*x(3))*x(2) 2* x(1)-162*(x(2)+0.1)cos(x(3))exp(-x(1)*x(2))*(-x(2))exp(-x(1)*x(2))*(-x(1))20]; 结果:不动点计算结果为r=1.0e+012*NaN -Inf 5.6541初始值为0,牛顿法计算结果为:x=0.5000 -0.0000 -0.5236初始值为1,牛顿法计算结果为:x=0.5000 0.0000 -0.5236初始值为2,牛顿法计算结果为:x=0.5000 0.0000 -0.5236。
牛顿法与拟牛顿法
牛顿法和拟牛顿法是求解非线性方程组和最优化问题的常用方法。
牛顿法是一种迭代法,通过迭代求解一系列的线性方程组来逼近
非线性方程组的解。
具体来说,牛顿法利用函数$f(x)$在当前点
$x_k$处的一阶和二阶导数信息来构造一个近似的局部二次模型,然后
将该二次模型的极小点作为下一个迭代点,直到达到给定的收敛准则。
但牛顿法的缺点是需要计算和求解海森矩阵(二阶导数矩阵),计算
量较大,而且海森矩阵可能不易求解或者不稳定,因此在实际计算中,牛顿法被改进为拟牛顿法。
拟牛顿法是对牛顿法的改进,它通过构造一个近似的海森矩阵来
替代牛顿法中的精确海森矩阵。
这个近似海森矩阵可以通过利用函数
$f(x)$在迭代过程中已知的信息(如函数值和梯度值)来动态更新,
从而避免了求解精确海森矩阵的复杂性。
拟牛顿法通常具有收敛速度快、迭代次数少、计算量小等优点,并在实际应用中被广泛使用。
改进的牛顿迭代法求解非线性方程史思总 西南科技大学摘要:将非线性方程线性化,以线性方程的解逐步逼近非线性方程的解,是牛顿迭代法的基本思想。
牛顿法具有收敛快、稳定性好、精度高等优点,是目前求解非线性方程的有效方法之一。
牛顿法每次迭代时都需要计算函数值和导数值,计算量较大,当导数值提供有困难时,牛顿法将不再适用于求解非线性方程组。
针对这种情况,提出了一种改进牛顿法——弦截法。
为避免求导,弦截法采用差商近似导数,以差商方式解决求导问题。
实践证明,弦切法优于大部分迭代法,仅次于牛顿法。
关键词:牛顿法、弦截法、非线性方程、差商一、牛顿法的迭代公式设)(x f 在其零点*x 附近一阶连续可微,且0)(≠'x f ,当0x 充分接近*x 时,由Taylor 公式有:))(()()(000x x x f x f x f -'+≈ (1)以方程0))(()(000=-'+x x x f x f (2)近似方程0)(=x f ,其解)()(0001x f x f x x '-= (3) 可作为方程的近似解,重复上述过程,得迭代公式),1,0(,)()(1 ='-=+n x f x f x x n n n n (4) 该方法称为牛顿迭代法。
牛顿法是一种不动点迭代法,其迭代函数为()()()f x x x f x ϕ=-' (5) 从几何上看,牛顿法是以曲线的切线与x 轴的交点作为曲线与x 轴的交点的近似。
故牛顿法也是一种切线法。
二、牛顿法的改进——弦截法为了避免牛顿法中计算导数,弦截法中采用差商代替导数。
避免了某些情况下由于不能求取导数值而迭代失效。
2.1差商的定义设有函数012(),,,,...f x x x x 为一系列互不相等的点,称()()()i j i j f x f x i j x x -≠-为()f x 关于,i j x x 的一阶差商(也称均差),记为[,]i j f x x ,即()()[,]i j i j i j f x f x f x x x x -=- (6)2.2弦截法在牛顿迭代公式(3)中,用差商()()i j i j f x f x x x --代替导数'()n f x 得到迭代公式111()()()(1,2,...)n n n n n n n f x f x x x x x n x x -+--=--=- (7) 按式(7)计算方程的近似解称为弦截法。
牛顿迭代法c++程序设计00000求解0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4;的方程00000#include<iostream>00000#include<cmath>00000#define N 2 // 非线性方程组中方程个数、未知量个数000000#define Epsilon 0.0001 // 差向量1范数的上限00000#define Max 100 //最大迭代次数000000using namespace std;00000const int N2=2*N;00000int main()00000{00000void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N]00000void ffjacobian(float xx[N],float yy[N][N]);/ /计算雅克比矩阵yy[N][N]00000void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵i nv000 00void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0计算近似解向量x100000float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm;00000int i,j,iter=0;000000//如果取消对x0的初始化,撤销下面两行的注释符,就可以由键盘向x0读入初始近似解向量00000for( i=0;i<N;i++)00000cin>>x0[i];00000cout<<"初始近似解向量:"<<endl;00000for (i=0;i<N;i++)00000cout<<x0[i]<<" ";00000cout<<endl;cout<<endl;00000do00000{00000iter=iter+1;00000cout<<"第"<<iter<<" 次迭代开始"<<endl; //计算向量函数的因变量向量y0000 00ff(x0,y0); //计算雅克比矩阵jacobian00000ffjacobian(x0,jacobian); //计算雅克比矩阵的逆矩阵invjacobian 00000inv_jacobian(jacobian,invjacobian); //由近似解向量x0 计算近似解向量x1 00000newdundiedai(x0, invjacobian,y0,x1); //计算差向量的1范数errornorm000 00errornorm=0;000000for (i=0;i<N;i++)00000errornorm=errornorm+fabs(x1[i]-x0[i]);00000if (errornorm<Epsilon) break;00000for (i=0;i<N;i++)00000x0[i]=x1[i];00000} while (iter<Max);00000return 0;00000}00000void ff(float xx[N],float yy[N]) //调用函数00000{float x,y;00000int i;00000x=xx[0];00000y=xx[1];00000yy[0]=x*x-2*x-y+0.5; 00000yy[1]=x*x+4*y*y-4; //计算初值位置的值00000cout<<"向量函数的因变量向量是:"<<endl;00000for( i=0;i<N;i++)00000cout<<yy[i]<<" ";00000cout<<endl;00000cout<<endl;00000}00000void ffjacobian(float xx[N],float yy[N][N])000000{00000float x,y;000000int i,j;000000x=xx[0];00000y=xx[1];00000//jacobian have n*n element //计算函数雅克比的值00000yy[0][0]=2*x-2;00000yy[0][1]=-1;00000yy[1][0]=2*x;000000yy[1][1]=8*y;000000cout<<"雅克比矩阵是:"<<endl;00000for( i=0;i<N;i++)00000{for(j=0;j<N;j++)000000cout<<yy[i][j]<<" ";000000cout<<endl;00000}00000cout<<endl;00000}00000void inv_jacobian(float yy[N][N],float inv[N][N])00000{float aug[N][N2],L;00000int i,j,k;00000cout<<"开始计算雅克比矩阵的逆矩阵:"<<endl;00000for (i=0;i<N;i++)00000{ for(j=0;j<N;j++)000000aug[i][j]=yy[i][j];00000for(j=N;j<N2;j++)00000if(j==i+N) aug[i][j]=1;000000else aug[i][j]=0;00000}00000for (i=0;i<N;i++)00000{ for(j=0;j<N2;j++)000000cout<<aug[i][j]<<" ";00000cout<<endl;00000}00000cout<<endl;00000for (i=0;i<N;i++)00000{00000for (k=i+1;k<N;k++)000000{L=-aug[k][i]/aug[i][i];00000for(j=i;j<N2;j++)00000aug[k][j]=aug[k][j]+L*aug[i][j];000000 }00000}00000for (i=0;i<N;i++)00000{ for(j=0;j<N2;j++)000000cout<<aug[i][j]<<" ";00000cout<<endl;00000}00000cout<<endl; 00000for (i=N-1;i>0;i--)000000{ 00000for (k=i-1;k>=0;k--)000000{L=-aug[k][i]/aug[i][i];00000for(j=N2-1;j>=0;j--)00000aug[k][j]=aug[k][j]+L*aug[i][j];000000 }00000}00000for (i=0;i<N;i++)00000{ for(j=0;j<N2;j++)000000cout<<aug[i][j]<<" ";00000cout<<endl;00000}00000cout<<endl;00000for (i=N-1;i>=0;i--)000000for(j=N2-1;j>=0;j--)00000aug[i][j]=aug[i][j]/aug[i][i];00000for (i=0;i<N;i++)00000{ for(j=0;j<N2;j++)000000cout<<aug[i][j]<<" ";00000cout<<endl; 000000for(j=N;j<N2;j++)00000inv[i][j-N]=aug[i][j];000000}00000cout<<endl;00000cout<<"雅克比矩阵的逆矩阵:"<<endl;00000for (i=0;i<N;i++)00000{ for(j=0;j<N;j++)000000cout<<inv[i][j]<<" ";00000cout<<endl;00000}00000cout<<endl;00000}00000void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N])00000 {00000int i,j;000000float sum=0;00000for(i=0;i<N;i++)00000{ sum=0;00000for(j=0;j<N;j++)00000sum=sum+inv[i][j]*y0[j];00000x1[i]=x0[i]-sum;00000}00000cout<<"近似解向量:"<<endl;00000for (i=0;i<N;i++)00000cout<<x1[i]<<" ";00000cout<<endl;cout<<endl;00000。
非线性方程组求解的新方法在实际生活中,许多复杂问题都可以转化为非线性方程组的解法问题。
非线性方程组的求解一直是数值计算领域中的一个重要课题。
传统的求解方法包括牛顿法、割线法、迭代法等。
但是在实际应用中,这些方法常常存在不收敛、收敛速度慢等缺点。
近年来,随着计算机性能的提高和算法的发展,针对非线性方程组求解的新方法应运而生。
本文将介绍一些新的非线性方程组求解方法,包括逆迭代法、多步迭代法、牛顿-Krylov方法等。
一、逆迭代法逆迭代法是解决非线性方程组的一种有效方法,它将非线性方程组的求解问题转化为线性方程组的求解问题。
逆迭代法主要是通过求解线性方程组来逼近非线性方程组的根。
具体地说,逆迭代法首先需要将原始的非线性方程组转换为F(x)=0的形式,然后我们采用牛顿法或者其他迭代法求解。
接着,我们将得到的解带入到原始的方程组中,得到一个新的线性方程组。
然后,我们对这个线性方程组进行求解,得到一个新的解x1。
然后,我们将x1作为新的解反复代入到原始方程组中,直到收敛到所要求的精度。
逆迭代法的实现很简单,但是要求方程组的雅可比矩阵非奇异,否则该方法就不收敛。
此外,逆迭代法的求解过程中会产生大量的向量运算和矩阵运算,因此需要有高性能的计算机支持。
二、多步迭代法多步迭代法是另外一种解决非线性方程组的方法。
它的特点在于每次迭代需要使用前面多步的信息。
由于多步迭代法具有更强的全局收敛性和更高的收敛速度,因此成为了解决非线性方程组的一种重要方法。
多步迭代法的基本思路是将每个分量进行独立迭代,并且每个分量之间都是相互独立的。
例如对于一个有n个分量的非线性方程组,我们可以采用如下的多步迭代方法:首先,设置一个初始向量x0。
然后,对于每一个分量Xi,我们可以设置一个递归计算公式Xi(k+1) = a1*Xi(k) + a2*Xi(k-1) + ... + an*Xi(k-n+1) - Fi(Xi(k),Xi(k-1),...,Xi(k-n+1))其中,a1,a2,...,an是待定常数,Fi是分量函数。
非线性方程组的牛顿迭代法的应用CENTRAL SOUTH UNIVERSITY数值分析实验报告非线性方程组的牛顿迭代法的应用一、问题背景非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在一定条件下由非线性问题简化的,为得到更符合实际的解答,往往需要直接研究非线性科学,它是21世纪科学技术发展的重要支柱,非线性问题的数学模型有无限维的如微分方程,也有有限维的。
道遥咏计算机进行科学计算都要转化为非线性的单个方程或方程组的求解。
从线性到非线性是一个质的变化,方程的性质有本质不同,求解方法也有很大差别。
本文主要介绍的是非线性方程组的牛顿迭代法的数值解法。
二、数学模型对于方程f x =0,如果f x湿陷性函数,则它的求根是容易的。
牛顿法实质上是一种线性化方法,其基本思想是将线性方程 f x =0逐步归结为某种线性方程来求解。
设已知方程f x =0有近似根X k (假定f X k - 0),将函数f x在点X k展开, 有f X : f X k f' X k X -X k ,于是方程f X = 0可近似地表示为f X k f' X k x - X k =0这是个线性方程,记其根为X ki,则X k 的计算公式f(Xk)k 01...X ki =X k ;,k=01,f区)这就是牛顿法。
三、算法及流程对于非线性方程飞仅鸡丄区)1 f2(X i,X2 丄,X n ) f =M」n(X i ,X2,L,X n )在x k处按照多元函数的泰勒展开,并取线性项得到fjx*),X2(k )丄,XnC ))1 -X1(“)_X1(k )〕 fzgt 以^)丄%$))十f'(x (k))X2(kT —X2(k)MM ' fn(x/k凡卜),L,Xn&))1 〕X 0L Xn ®这边是牛顿迭代法的算法过程,牛顿迭代法是工程上应用最多的一种非线性方 程组的计算方程法。