牛顿法解非线性方程组实验报告

合集下载

求解非线性方程组的非精确牛顿法

求解非线性方程组的非精确牛顿法

求解非线性方程组的非精确牛顿法摘要:在经典牛顿法的基础上,给出了求解非线性方程组的非精确牛顿法。

在一定的条件下,证明了该算法的超线性收敛性,并且这个收敛性是二阶的。

关键词:非线性方程组;非精确牛顿法;收敛性对于无约束问题: minf(x) (1) 其中x∈Rn,f∶Rn→R是一个连续可微函数。

求解无约束优化问题方法大都属于迭代法,这类算法特点是:每一次迭代都要求函数值有所下降,因此人们称这类算法为下降法。

当下降方向取为负梯度时,此时函数值下降量最大,人们称它为最速下降法。

它是无约束最优化问题中最简单的方法,它具有全局收敛性,并且存储最较少,因此它适合于解决大型优化问题。

但它的缺点是收敛速度慢,在最优点处附近容易产生锯齿现象,为了改善收敛速度,人们提出了牛顿法。

牛顿法的基本思想是,在极小点附近用二阶Taylor多项式近似目标函数f(x),进而求出极小点的估计值。

设f(x)是二次可微实函数,x∈Rn。

又设x(k)是f(x)的极小点的一个估计,把f(x)在x(k)展成Taylor级数,并取二阶近似:f(x)≈Φ(x)=f(x(k))+ f(x(k))T(x-x(k))+12(x-x(k))T 2f(x(k))(x-x(k)) (2) 令Φ(x)=0,可得:x(k+1)=x(k)- 2f(x(k))-1 f(x(k)) (3)运用牛顿法时,初点的选择十分重要。

如果初始点靠近极小点,则可能很快收敛;如果初始点远离极小点,迭代产生的点列可能不收敛于极小点。

为了克服这个缺点,可以改进迭代公式(3):x(k+1)=x(k)+λkd(k)(4)其中d(k)=- 2f(x(k))-1 f(x(k))为牛顿方向,λk是由一维搜索得到的步长,即满足:f(x(k)+λkd(k))=minλf(x(k)+λd(k)) 这样修改后的算法称为阻尼牛顿法。

由于阻尼牛顿法含有一维搜索,因此每次迭代目标函数值一般有所下降(绝不会上升)。

牛顿迭代法求解非线性方程组的解

牛顿迭代法求解非线性方程组的解
| f ( xk 1 ) || f ( xk ) |
(4-8)
满足此要求的算法称为下山法。 将牛顿法和下山法一起使用时,即在下山法保证函数值稳定下降的前提下, 用牛顿法加快收敛速度。为此,为此将牛顿法的计算结果
xk 1 xk f ( xk ) f ' ( xk )
(4-9)
与前一步的近似值 xk 的适当加权平均作为新的改进值
xk 1 xk Cf ( xk ) 局部收敛,在 xk 1 xk Cf ( xk ) 中取 C
1 ,则称为简化牛 f ( x0 )
'
顿法。Biblioteka 其几何意义是用斜率为 f ' ( x0 ) 的平行弦与 x 轴的交点作为 x* 的近似,如图所示:
图 4-2
2 o 牛顿下山法
牛顿法收敛性依赖于初值 x0 的选取,如果 x0 偏离所求根 x* 较远,则牛顿法 可能发散。为了防止迭代发散,对迭代过程再附加一个要求,即具有单调性:
f1 f ( x1 ) , f1' f ' ( x1 ) ;再分别赋值给 f 0 f1 , f 0 ' f '1

步骤三: 判断, 如果 | x1 x0 | 1e 5 ,则终止迭代,以 x 1 作为所求的根; 否则转步骤四 步骤四: 修改, 如果迭代次数达到预先指定的次数 N ,或者 f1' 0 ,则方 法失败;否则以 ( x1 , f1 , f1' ) 代替 ( x0 , f0 , f 0' ) 转步骤二继续迭代。 例:求方程 f ( x) x3 x 1 0 在 x0 1.5 附近的根. 解:结果如下表所示:
迭代次数 初始值 迭代值 误差值 0 1.5000 1.2500 0.2500 1 1.2500 1.3580 0.1080 2 1.3580 1.3104 0.0476 3 1.3104 1.3310 0.0206 4 1.3310 1.3220 0.0089 5 1.3220 1.3259 0.0039 6 1.3258 1.3242 0.0017

数值分析求解非线性方程根的二分法简单迭代法和牛顿迭代法

数值分析求解非线性方程根的二分法简单迭代法和牛顿迭代法

实验报告一:实验题目一、 实验目的掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。

二、 实验内容1、编写二分法、并使用这两个程序计算02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 410- ,比较两种方法收敛速度。

2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。

3、由中子迁移理论,燃料棒的临界长度为下面方程的根,用牛顿迭代法求这个方程的最小正根。

4、用牛顿法求方程的根,精确至8位有效数字。

比较牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。

第1题:02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。

画图函数:function Test1()% f(x) 示意图, f(x) = x + exp(x) - 2; f(x) = 0r = 0:0.01:1;y = r + exp(r) - 2plot(r, y);grid on 二分法程序:计算调用函数:[c,num]=bisect(0,1,1e-4)function [c,num]=bisect(a,b,delta)%Input –a,b 是取值区间范围% -delta 是允许误差%Output -c 牛顿迭代法最后计算所得零点值% -num 是迭代次数ya = a + exp(a) - 2;yb = b + exp(b) - 2;if ya * yb>0return;endfor k=1:100c=(a+b)/2;yc= c + exp(c) - 2;if abs(yc)<=deltaa=c;b=c;elseif yb*yc>0b=c;yb=yc;elsea=c;ya=yc;endif abs(b-a)<deltanum=k; %num为迭代次数break;endendc=(a+b)/2;err=abs(b-a);yc = c + exp(c) - 2;牛顿迭代法程序:计算调用函数:[c,num]=newton(@func1,0.5,1e-4) 调用函数:function [y] = func1(x)y = x + exp(x) - 2;end迭代算法:function[c,num]=newton(func,p0,delta)%Input -func是运算公式% -p0是零点值% -delta是允许误差%Output -c牛顿迭代法最后计算所得零点值% -num是迭代次数num=-1;for k=1:1000y0=func(p0);dy0=diff(func([p0 p0+1e-8]))/1e-8;p1=p0-y0/dy0;err=abs(p1-p0);p0=p1;if(err<delta)num=k;%num为迭代次数break;endendc=p0;第2题:由题意得到算式:计算调用函数:[c,num]=newton(@func2,0.02,1e-8)程序:先用画图法估计出大概零点位置在0.02附近。

牛顿迭代法解非线性方程组(MATLAB版)

牛顿迭代法解非线性方程组(MATLAB版)

⽜顿迭代法解⾮线性⽅程组(MATLAB版)⽜顿迭代法,⼜名切线法,这⾥不详细介绍,简单说明每⼀次⽜顿迭代的运算:⾸先将各个⽅程式在⼀个根的估计值处线性化(泰勒展开式忽略⾼阶余项),然后求解线性化后的⽅程组,最后再更新根的估计值。

下⾯以求解最简单的⾮线性⼆元⽅程组为例(平⾯⼆维定位最基本原理),贴出源代码:1、新建函数fun.m,定义⽅程组1 function f=fun(x);2 %定义⾮线性⽅程组如下3 %变量x1 x24 %函数f1 f25 syms x1 x26 f1 = sqrt((x1-4)^2 + x2^2)-sqrt(17);7 f2 = sqrt(x1^2 + (x2-4)^2)-5;8 f=[f1 f2];2、新建dfun.m,求出⼀阶微分⽅程1 function df=dfun(x);2 f=fun(x);3 df=[diff(f,'x1');diff(f,'x2')]; %雅克⽐矩阵3、建⽴newton.m,执⾏⽜顿迭代过程1 clear;clc2 format;3 x0=[0 0]; % 迭代初始值4 eps = 0.00001; % 定位精度要求5for i = 1:106 f = double(subs(fun(x0),{'x1''x2'},{x0(1) x0(2)}));7 df = double(subs(dfun(x0),{'x1''x2'},{x0(1) x0(2)})); % 得到雅克⽐矩阵8 x = x0 - f/df;9if(abs(x-x0) < eps)10break;11 end12 x0 = x; % 更新迭代结果13 end14 disp('定位坐标:');15 x16 disp('迭代次数:');17 i结果如下:定位坐标:x =0.0000 -1.0000迭代次数:i =4。

科学计算与数学建模实验报告 牛顿法求解非线性方程

科学计算与数学建模实验报告 牛顿法求解非线性方程

科学计算与数学建模实验报告牛顿法求解非线性方程一、实验目的学习使用MATLAB运用MATLAB 进行牛顿法求解非线性方程加深对牛顿法的理解二、实验内容 采用牛顿法求方程02x -x 3=+在区间[0.5,2]上的一个根。

三、实验过程(1)算法原理牛顿法本质上是一种切线法,它从一端向一个方向逼近方程的根,其递推公式为: )()('1n n n n x f x f x x -=+(2)算法程序代码Function root=NewtonRoot (f,a,b,eps)If (nargin==3)eps=1.0e-4endf1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);if(f1==0)root=b;endif(f2==0)root=b;endif(f1*f2>0)disp(‘两端点函数值乘积大于0!’);return;elsetol=1;fun=diff(sym(f));fa=subs(sym(f),findsym(sym(f)),a);fb=subs(sym(f),findsym(sym(f)),b);dfa=subs(sym(fun),findsym(sym(fun)),a);dfb=subs(sym(fun),findsym(sym(fun)),b);if(dfa>dfb)root=a-fa/dfa;elseroot=b-fb/dfb;endwhile(tol>eps)r1=root;fx=subs(sym(f),findsym(sym(f)),r1);dfx=subs(sym(fun),findsym(sym(fun)),r1);root=r1-fx/dfx;tol=abs(root-r1);endend(3)上机调试过程>>r=NewtonRoot(‘sqrt(x)-x^3+2,0.5,2)(4)实验结果输出计算结果为:r=1.4759 由计算结果可知,02x -x 3=+的一个根为x=1.4759。

非线性方程求解实验报告

非线性方程求解实验报告

数学实验报告非线性方程求解一、实验目的1.掌握用 MATLAB 软件求解非线性方程和方程组的基本用法,并对结果作初步分析;2.练习用非线性方程和方程组建立实际问题的模型并进行求解。

二、实验内容题目1【问题描述】(Q1)小张夫妇以按揭方式贷款买了1套价值20万元的房子,首付了5万元,每月还款1000元,15年还清。

问贷款利率是多少?(Q2)某人欲贷款50 万元购房,他咨询了两家银行,第一家银行开出的条件是每月还4500元,15 年还清;第二家银行开出的条件是每年还45000 元,20 年还清。

从利率方面看,哪家银行较优惠(简单假设:年利率=月利率×12)?【分析与解】假设初始贷款金额为x0,贷款利率为p,每月还款金额为x,第i个月还完当月贷款后所欠银行的金额为x i,(i=1,2,3,......,n)。

由题意可知:x1=x0(1+p)−xx2=x0(1+p)2−x(1+p)−xx3=x0(1+p)3−x(1+p)2−x(1+p)−x……x n=x0(1+p)n−x(1+p)n−1−⋯−x(1+p)−x=x0(1+p)n−x (1+p)n−1p=0因而有:x0(1+p)n=x (1+p)n−1p (1)则可以根据上述方程描述的函数关系求解相应的变量。

(Q1)根据公式(1),可以得到以下方程:150p(1+p)180−(1+p)180+1=0设 f(p)=150p(1+p)180−(1+p)180+1,通过计算机程序绘制f(p)的图像以判断解p的大致区间,在Matlab中编程如下:for i = 1:25t = 0.0001*i;p(i) = t;f(i) = 150*t*(1+t).^180-(1+t).^180+1;end;plot(p,f),hold on,grid on;运行以上代码得到如下图像:f(p)~p关系曲线图通过观察上图可知p∈[0.002,0.0022]。

Solution1:对于p∈[0.002,0.0022],采用二分法求解,在Matlab 中编程如下:clear;clc;x0=150000;n=180;x=1000;p0=0.002;p1=0.0022;while (abs(p1-p0)>1e-8)f0=x0*(1+p0).^n+x*(1-(1+p0).^n)/p0;f1=x0*(1+p1).^n+x*(1-(1+p1).^n)/p1;p2=(p0+p1)/2;f2=x0*(1+p2).^n+x*(1-(1+p2).^n)/p2;if (f0*f2>0 && f1*f2<0)p0=p2;elsep1=p2;end;end;p0结果得到p0=0.00208116455078125=0.2081%.所以贷款利率是0.2081%。

牛顿下山法求非线性方程组解

牛顿下山法求非线性方程组解

《MATLAB 程序设计实践》课程考核1、编程实现以下科学计算算法,并举一例应用之。

(参考书籍《精通MALAB科学计算》,王正林等著,电子工业出版社,2009年)“牛顿下山法求非线性方程组解”解:算法说明:牛顿下山法的迭代公式:())()(11n n n n x F x F w x x -+-=w 的取值范围为10≤w ,为了保证收敛,还要求w 的取值使得:())(1n n x F x F +可以用作次减半法来确定w 。

为了减少计算量,还可以用差商来代替偏导数。

在MA TLAB 中编程实现的非线形方程组的牛顿下山法的函数:mulDNewton 。

功能:用牛顿下山法求非线形方程组的一个解。

调用格式:[]),0(,eps x mulDNewton n r = 其中, x0为初始迭代向量Eps 为迭代精度;r 为求出的解向量n 为迭代步数。

牛顿下山法的MATLAB 代码如下:function [r,n]=mulDNewton(x0,eps) %牛顿下山法求非线形方程组的一个解 %初始迭代向量:x0 %迭代精度:eps %解向量: r %迭代步数:n if nargin==1 eps=1.0e-4;%输入的自变量的数目为1个时,精度定为eps=1.0e-4 endr=x0-myf(x0)/dmyf(x0); %当n=1时,取w=1 n=1; tol=1;%初始n 和tol 的值 while tol>eps x0=r; ttol=1; %初始ttol 的值 w=1;%初始w 的值,w 就是下山因子alpha F1=norm(myf(x0)); while ttol>=0r=x0-w*myf(x0)/dmyf(x0); ttol=norm(myf(r))-F1; w=w/2; endtol=norm(r-x0); n=n+1; if (n>100000)disp('迭代步数太多,可能不收敛!'); return ; end end举例说明:牛顿下山法求下面方程组⎩⎨⎧=--=-+0sin 1.0cos 5.00)cos(1.0sin 5.02211211x x x x x x x 的根,其初始迭代值取(0,0)。

实验一非线性方程组求解实验报告

实验一非线性方程组求解实验报告

计算方法实验报告专业班级:姓名:学号:实验成绩:1.【实验题目】非线性方程组求解2.【实验目的】(1).掌握二分法、迭代法、牛顿迭代法求方程近似根的基本思想与原理。

(2).掌握常用迭代算法的程序实现。

3.【实验内容】迭代法是求解非线性方程的基本方法,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。

考虑一个简单的代数方程,针对该方程,可以构造多种迭代法,如:取初始值,取,分别用以上迭代格式作实验,记录各算法的迭代过程4. 【实验要求】(1)取定某个初始值,按方案1~3对非线性方程求根,它们的收敛性如何?重复选取不同的初始值,反复实验。

请读者自行设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。

(2)对三个迭代格式的某一种,分别取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)对代数方程,分别用方案1 用二分法求解;方案2 用牛顿法求解;5. 【算法描述】二分法算法步骤1)计算有根区间的端点a,b及预先给定的精度e。

2)计算中点(a+b)/2。

3)若f(x)f(a)<0,则x b,转向4);否则,x a,转向4).⇒⇒4)若b-a<e,则输出满足精度的根x,结束;否则转向2)。

牛顿法迭代法的计算步骤x01)给出初始近根及精度e。

2)计算。

x x x x f f 1000)(')(⇒-3)若|-|<e ,则转向4);否则转向2)。

x 1x 0x x 01⇒4)输出满足精度的根,结束。

x 16. 【源程序(带注释)】二分法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>float f(float x){float a;a=x*x*x-x-1;return a;} /*求函数值,如果求其它函数,只需改成其它函数即可*/ main(){float a,b,e,x; /* a,b 分别表示有根区间的左、右端点, e 是精度要求,x 区间中点值*/system("CLS");//清屏printf("对代数方程x^3-x-1=0,分别用\n 方案1 用二分法求解\n");printf(" \n please input data a =");scanf("%f",&a);printf(" \n please input data b=");scanf("%f",&b);if(f(a)*f(b)<0){while(f(x)!=0){x=(a+b)/2;if(f(x)*f(a)<0){b=x;if(fabs(b-a)<0.000001)break;elsecontinue;}else{a=x;if(fabs(b-a)<0.000001)break;else continue;}}printf("\n");x=(b+a)/2;printf("the root of f(x)=0 is x=%f\n",x);}elseprintf("\ not root! afresh input\n"); /*表示[a,b] 区间无根,重新选择有根区间*/getch();return(x);}牛顿法#include<stdio.h>#include<math.h>#include<conio.h>#include<windows.h>#define maxrept 1000 /*最大迭代次数*/float f(float x) {float a;a=x*x*x-x-1;return a; /*函数f(x) */}float df(float x) {return(1+exp(-x)); /* 函数f(x)的导数) (x f ′*/ }float iterate(float x) {float x1;x1=x-f(x)/df(x); /* 牛顿迭代函数iterate(x)=x-f(x) / ) (x f ′*/return(x1);}main() {float x0,x1,d;int k=0;//clrscr();system("CLS");printf("对代数方程x^3-x-1=0,分别用\n方案2 用牛顿法求解\n");printf("\n please input x0="); /* 输入迭代初值x0 */scanf("%f",&x0);printf("\n k xk\n");printf("\ %d %f\n",k,x0);do {k++;x1=iterate(x0);printf(" %d %f\n",k,x1);d=fabs(x1-x0);x0=x1;}while((d>=0.000001)&(k<maxrept));if(k<maxrept)printf("the root of f(x)=0 is x=%f, k=%d\n",x1,k);elseprintf("\n the iteration is failed!\n");getch();}7.【实验结果与分析总结(含运行结果截图)】。

Newton 法解非线性方程组

Newton 法解非线性方程组

Newton法解非线性方程组一.题目重述:编程实现非线性方程组的牛顿解法,并求解如下方程组。

3x1−cos x2x3−0.5=0x12−81x2+0.12+sin x3+1.06=0e−x1x2+20x3+10π−33=0二.算法:非线性方程组的牛顿法为:给定初始解向量x(0),对于k≥1生成x(k)=x(k−1)−J x k−1−1F(x(k−1)).三.编程实现:这里用MATLAB程序实现,建立三个文件如下:1.函数F(X)文件function F =F( X)F(1,1)=3*X(1)-cos(X(2)*X(3))-0.5;F(2,1)=X(1)^2-81*(X(2)+0.1)^2+sin(X(3))+1.06;F(3,1)=exp(-X(1)*X(2))+20*X(3)+(10*pi-3)/3;end2.J(X) 函数(即Jacobian矩阵)文件function F1= F1(X )F1(1,:)=[3,sin(X(1)*X(2))*X(3),sin(X(1)*X(2))*X(2)];F1(2,:)=[2*X(1),-162*(X(2)+0.1),cos(X(3))];F1(3,:)=[exp(-X(1)*X(2))*(-X(2)),exp(-X(1)*X(2))*(-X(1)),20];end3.解题脚本文件文件名zu%% 牛顿法解非线性方程组clear;X0=[0.1;0.1;-0.1];for i=1:200X=X0-F1(X0)\F(X0); %这里采用MATLAB的左除方法,避免算逆矩阵X0=X;endXabs(0-F(X)) % 计算误差四.编程实现结果:在MATLAB中调用上述解题脚本文件(迭代200次),下图中的zu即为上述解题脚本文件名,而format long 是将MATLAB的显示结果调整为15位数字的形式,结果为即解为:x1=0.5,x2=0,x3=−0.5236.(上面出现-0.00000000…的原因是由于MATLAB太过于精确,求得x2是一个绝对值非常小的负数,这里可取x2=0).且误差为:10^-14*(0,0.0222,0.1776),即已达到了10^-14的精度。

科学计算与数学建模实验报告牛顿法求解非线性方程

科学计算与数学建模实验报告牛顿法求解非线性方程

科学计算与数学建模实验报告牛顿法求解非线性方程一、引言非线性方程是数学中的一个重要研究内容,其求解方法有很多,其中之一就是牛顿法。

牛顿法是一种迭代方法,通过不断逼近函数的零点来求解非线性方程。

在本实验中,我们将使用牛顿法来求解给定的非线性方程,并验证其有效性。

二、实验方法1.确定问题:给定非线性方程f(x)=0,需要求解方程的根。

2.初始化:选择一个初始解x_0,并给定停止准则,如迭代次数、函数误差等。

3.迭代计算:a)计算函数f(x)在x_i处的导数f'(x_i)。

b)利用牛顿迭代公式进行迭代计算:x_{i+1}=x_i-f(x_i)/f'(x_i)。

c)检查迭代终止条件,若满足条件则停止迭代,否则返回步骤a)继续迭代。

4.输出结果:输出迭代过程中的迭代次数和解x。

三、实验结果我们选择一个较为简单的非线性方程f(x)=x^2-2来进行牛顿法求解。

初始解选取为x_0=1,停止准则为函数误差小于等于0.0001根据上述计算方法,我们进行迭代计算,并记录迭代次数和解x的变化情况。

具体结果如下表所示:迭代次数解x-----------------11.521.416731.414241.4142(收敛)从表中可以看出,当迭代4次时,解x已经收敛于1.4142,符合停止准则,因此我们可以认为此时已经找到了方程的根。

四、实验讨论通过上述实验可以发现,牛顿法是一种有效的求解非线性方程的方法。

它利用了函数在特定点处的导数的信息来逼近函数的零点,从而实现了迭代计算。

同时,牛顿法的收敛速度比较快,迭代次数较少,可以在较短的时间内找到方程的根。

然而,牛顿法也存在一些不足之处。

首先,它对初始解的选择较为敏感,不同的初始解可能导致迭代结果的差异。

其次,牛顿法可能出现发散现象,即迭代过程无法收敛到方程的根。

因此,对于一些复杂的非线性方程,我们需要选择合适的方法来求解。

五、总结通过本次实验,我们了解了牛顿法求解非线性方程的基本过程,并验证了其有效性。

数值分析 数值分析 Newton迭代法求解非线性方程实验

数值分析  数值分析  Newton迭代法求解非线性方程实验
intf("%Lf\n",u[k][j]);
}//计算出u[i][j]并输出.
第二部分 for(i=k+1;i<n;i++)
{s=0.0;
for(r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][k];}
l[i][k]=(a[i][k]-s)/u[k][k];
printf("%Lf\n",l[i][k]);
{s=0.0;
for(r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][k];}
l[i][k]=(a[i][k]-s)/u[k][k];
printf("l[%d][%d]%Lf\n",i,k,l[i][k]);}
}
}
六、实验结果
七、上机实验体会
在这个试验中同样叶出现了很多问题,对L,U的求解输出中,输出的位置的不同,结果也就会出差错.经过多次调整,结果总算输出了.
通过此次试验,我理解了多重循环的运用,并了解了古人的聪明智慧,]讲将复杂问题简单化,现在的大学生们,应该学习他们的创新及钻研精神。
for(k=0;k<n;k++)
{for(j=k;j<n;j++)
{s=0.0;
for (r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][j];}
u[k][j]=a[k][j]-s;
printf("u[%d][%d]=%Lf\n",k,j,u[k][j]); }
for(i=k+1;i<n;i++)

关于非线性方程组Newton解法的研究综述

关于非线性方程组Newton解法的研究综述

关于非线性方程组Newton 解法的研究综述作者:谢玉婧 王培一、研究现状非线性代数方程组求解是一个基本而又重要的问题,这是因为在工程实践、经济学、信息安全和动力学等方面有大量的实际问题最终转化为代数方程组。

这一类问题,我们不可能找到它们的解析解,数值解是目前主要的研究方向。

数值解法较为成熟,速度快,但其往往只能求出部分解,而且通常只能求出近似解。

它一般用于解决大型问题。

Newton 法是数值方法求解非线性方程组的一种基本方法。

根据其特点和不足,对Newton 法进行简化和修正。

并且与其他数值解法(如区间法)相结合,形成其他更加完善的求解非线性方程组的方法。

二、问题的提出n 个变量个方程的非线性方程组, 其一般形式如下:n 112n 212nn 12n f (x ,x ,,x )0f (x ,x ,,x )0f (x ,x ,,x )0=⎧⎪=⎪⎨⎪⎪=⎩L L M L)1(式(1)中是定义在维欧式空间中开域上的实值函数。

若用向量记,令:)n ,,2,1i )(x x ,x (f n 21i L L =n n R D ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡====⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=X)(f X)(f )X (f 0)x ,x ,(x f 0)x ,x ,(x f 0)x ,x ,(x f )X (F ,x x x X n 21n 21n n 212n 211n 21M L ML L M 则方程组(1)也可以表示为:0)X (F = )2(其中:,n 0n n R )X (F ,R R :F ,R X ∈→∈n R 为赋值空间。

非线性数值方法种类较多,最常用的是Newton 迭代法。

求解非线性方程组的Newton 法是一个最基本而且十分重要的方法,目前使用的很多有效的迭代法都是以Newton 法为基础,或由它派生而来。

下面首先介绍几种Newton 法及其原理,然后使用Mathwmatica 编写求解程序,最后通过一个计算实例说明几种牛顿法的差异。

非线性方程组求解实验报告

非线性方程组求解实验报告

实验十一非线性方程组求解练习三(4)题目:用牛顿切线迭代法求x^2-2*x*eps(-x)+eps(-x)=0的根。

能否构造出其他形式的迭代序列,使其收敛到该方程的一个根。

牛顿切线迭代法程序:f=inline('x^2-2*x*exp(x)+exp(-x)');df=inline('2*x-2*exp(x)-2*x*exp(x)-exp(-x)');d2f=inline('2-4*exp(x)-2*x*exp(x)+exp(-x)');a=-1;b=1;dlt=1.0e-5;if f(a)*d2f(a)>0x0=a;elsex0=b;endm=min(abs(df(a)),abs(df(b)));k=1;while abs(f(x0))>m*dltx1=x0-f(x0)/df(x0);x0=x1;vpa(x0,7)k=k+1end结果:弦截法程序:f=inline('x^2-2*x*exp(x)+exp(-x)');x0=0;b=1;dlt=1.0e-5;k=1;while abs(f(x0))>dltx1=b-(b-x0)*f(b)/(f(b)-f(x0));x0=x1;vpa(x0,7)k=k+1end结果:练习四(1)题目:Feigenbaum在做研究时,对超越函数y=rsin(pi*x)(r为非负实数)进行了分叉和混沌的研究,试利用迭代格式x(k+1)=r*sin(pi*x(k)),做出相应的Feigenbaum图。

程序:clear;clf;hold onfor r=0.1:0.005:1x=[0.1];fori=2:150x(i)=r*sin(pi*x(i-1));endfprintf('r=%.3f\n',r)fori=101:150plot(r,x(i),'k.');endend结果:练习五(3)题目:有一艘宽为5m的长方形驳船欲驶过某河道的直角湾,经测量知河道的宽为10m 和5m,试问要驶过该直角湾驳船的长度不能超过多少米?程序:Syms xf=(((10/tan(x))+12)*sin(x)-5)/(sin(x)*cos(x)); %建立船长与角度的关系diff(f,x)z=inline('(-10/tan(x)^2*(1+tan(x)^2)*sin(x)+(10/tan(x)+12)*cos(x))/sin(x)/cos(x)-((10/tan(x)+12)* sin(x)-5)/sin(x)^2+((10/tan(x)+12)*sin(x)-5)/cos(x)^2');a=0;b=3.14;dlt=1.0e-5;while abs(b-a)>dltc=(a+b)/2if z(c)==0break;elseif z(c)*z(b)<0a=c;else b=c;endfprintf('k=%d,x=%.5f\n',k,c);k=k+1;end结果:k=1,x=1.57000k=2,x=0.78500k=3,x=0.39250k=4,x=0.58875k=5,x=0.68688k=6,x=0.73594k=7,x=0.71141k=8,x=0.72367k=9,x=0.72980k=10,x=0.73287k=11,x=0.73134k=12,x=0.73210k=13,x=0.73172k=14,x=0.73191k=15,x=0.73201k=16,x=0.73196k=17,x=0.73198k=18,x=0.73200k=19,x=0.73200结论:用程序x=0.73200;s=eval(f);求得s=21.0372。

第二次实验报告(非线性方程求根)

第二次实验报告(非线性方程求根)

班级: 学号: 姓名: 成绩:实验2 非线性方程的数值解法实验1实验目的1)进一步熟练掌握求解非线性方程的牛顿迭代法和弦截法。

2)根据牛顿迭代法和弦截法的原理,编写程序求解非线性方程,提高编程解决问题的能力。

2 实验内容(1)用牛顿法和割线法求下列方程的根x^2-e^x=0;x*e^x-1=0;(23实验原理(1)牛顿迭代公式:1()/'()k k k k x x f x f x +=- 双点弦法公式:111()()()()k k k k k k k f x x x x x f x f x +--=--- (2)令2()f x x A =-,再用牛顿法求根。

4实验步骤1)根据牛顿迭代法,双点弦法的算法编写相应的求根函数;2)用牛顿迭代法和双点弦法分别对方程进行求解;5 程序设计牛顿迭代法x0=1.0;N=100;k=0;eps=5e-6;delta=1e-6;while(1)x1=x0-fc1(x0)/fc2(x0);k=k+1;if k>Ndisp('Newton method failed')breakendif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endx0=x1;endfprintf('%f',x0)fprintf('%f',abs(fc1(x1)))双点弦法function cutline(x0,x1)N=100;k=0;delta=5e-8;while(1)(abs(x1-x0)>=delta)c=x1;x1=cutnext(x0,x1);x0=c;k=k+1;if k>Ndisp('Cutline method failed')break;endif(abs(x1-x0)<delta || abs(fc1(x1))<delta) break;endendfprintf('%10f\n',x1);function y=cutnext(a,b)y=b-fc(b)/(fc(b)-fc(a))*(b-a);1)原函数function fc1=fc1(x)fc1=x^2-exp(x);end导函数function fc2=fc2(x)fc2=2*x-exp(x);end2)原函数导函数3)原函数导函数6实验结果及分析注:牛顿迭代法由于设置delta=1e-6,所以算出的误差e<1.0*10^-6;割线法由于设置delta=5e-8,所以误差e<5.0*10^-8.7总结。

牛顿迭代法实验报告总结

牛顿迭代法实验报告总结

一、实验目的本次实验旨在通过牛顿迭代法求解非线性方程的根,并分析牛顿迭代法的原理、过程、优缺点以及在实际应用中的表现。

二、实验原理牛顿迭代法,又称牛顿-拉弗森方法,是一种在实数域和复数域上近似求解方程的方法。

其基本思想是利用函数的一阶导数来寻找函数的零点,即函数的根。

设函数f(x)在x0附近连续可导,且f(x0)≠0,那么牛顿迭代法的迭代公式为:x_{n+1} = x_n - f(x_n) / f'(x_n)其中,x_n表示第n次迭代得到的近似根,f(x_n)表示函数在x_n处的函数值,f'(x_n)表示函数在x_n处的导数值。

三、实验过程1. 选择初始值:根据题目要求,选择一个接近方程根的初始值x0。

2. 迭代计算:根据牛顿迭代法公式,计算x1,x2,...,直到满足误差要求。

3. 误差分析:计算每次迭代后近似根与实际根之间的误差,分析迭代过程是否收敛。

四、实验结果与分析1. 实验结果:以方程f(x) = x^3 - 3x + 2 = 0为例,选取初始值x0 = 1,经过6次迭代后,近似根x6 ≈ 1.324718,实际根为x ≈ 1.324717957244746。

2. 结果分析:(1)收敛性:从实验结果可以看出,牛顿迭代法在求解方程f(x) = x^3 - 3x + 2 = 0时具有较好的收敛性。

(2)误差分析:通过计算迭代过程中的误差,可以观察到误差随着迭代次数的增加逐渐减小,说明牛顿迭代法具有较好的精度。

(3)迭代次数:在本次实验中,经过6次迭代即可达到误差要求,说明牛顿迭代法具有较高的效率。

(4)适用范围:牛顿迭代法适用于连续可导且导数不为零的函数,对于不可导或导数为零的函数,牛顿迭代法可能无法得到有效的解。

五、实验结论1. 牛顿迭代法是一种有效的求解非线性方程根的方法,具有较好的收敛性和精度。

2. 牛顿迭代法在实际应用中具有较高的效率,适用于求解连续可导且导数不为零的函数。

牛顿法解非线性方程组实验报告

牛顿法解非线性方程组实验报告

由f i ( x) 偏导数作成的矩阵记为 J(x)或 F ' ( x) 称为 F(x)的 Jacobi 矩阵
设 x* 为 F(x)=0 的解,且设 x( k )
数f i ( x) 在 x( k ) 点的泰勒公式有
f i ( x)
1 2

j
J( x ) F ' ( x ) x1 x2
(2) 求解一个线性方程组: J( x( k ) )x( k ) F( x( k ) )
(3) 计算 x( k 1) x( k ) x( k ) 。 2、流程图见附图 1
4 程序代码及注释
%牛顿法解非线性方程组 function [Z,P,k,e] = newton(P,e0) %用P输入初始猜想矩阵,不断迭代输出计算解 %Z为迭代结束后的F矩阵 %k为迭代次数,e为每次迭代后的无穷范数,e0为误差限 Z=F(P(1),P(2)); J=JF(P(1),P(2)); Q=P-J\Z; e=norm((Q-P),inf); P=Q; Z=F(P(1),P(2)); k=1; while e>=e0
00要求10算法原理与流程图1算法原理设有非线性方程组称为fx的jacobi矩阵的第k1次近似解记为求解非线性方程组fx0牛顿法或为程序代码及注释牛顿法解非线性方程组functionnewtonpe0用p输入初始猜想矩阵不断迭代输出计算解z为迭代结束后的f矩阵k为迭代次数e为每次迭代后的无穷范数e0为误差限qpjz
xi gi ( x1, x2, , xn ) ,(i 1, 2, n)
或者简记为 x=g(x),其中 gi : Rn R, g : Rn Rn
g( x)


g1(
g2(

数值代数实验2-牛顿下山法解非线性方程组1

数值代数实验2-牛顿下山法解非线性方程组1

数值代数上机实验2----牛顿下山法解非线性方程组一.题目用牛顿下山法解非线性方程组:要求数值解:(,,)T k k k k X x y z =-8精确到1022()13cos()0281(0.1)sin 1.0601032003xy x yz x y z e z π-⎧--=⎪⎪⎪-+++=⎨⎪-⎪++=⎪⎩二.实验程序clear;clc;syms x y zX=[x,y,z];p=rand(1,3) %随机生成初始值x (0)f(1)=3*x-cos(y*z)-1/2;f(2)=x^2-81*(y+0.1)^2+sin(z)+1.06;f(3)=exp(-x*y)+20*z+(10*pi-3)/3;f=[f(1);f(2);f(3)]; %非线性方程组f 的表达式 lamda=1; %取λ=1df=jacobian([f(1),f(2),f(3)],[x,y,z]); %f 的jacobi 矩阵,即f 的导数q1=-lamda*(inv(df))*f; %线性方程组df*Δx=-λ*f 的解Δx 的表达式q2=subs(q1,X,p); %用数值替代所有的变量,即得到Δx 在初值下的数值q=q2';x=p+q; %x(k+1)=x(k)+Δx(k)在k=0时候第一次迭代的值f_shu=subs(f,X,p); %f在初始值为p时的函数值while 1 %开始循环p=x; %开始进行迭代f_shu=subs(f,X,p);q1=-lamda*(inv(df))*f;q2=subs(q1,X,p);q=q2';x=p+qf_shu1=subs(f,X,x);if (norm(f_shu1)<norm(f_shu))&&norm(x-p)<10^(-8) %进行判定,如果满足条件则跳出循环breakelse if norm(f_shu1)>=norm(f_shu)&&norm(x-p)<10^(-8)lamda=1/2*lamdaendendendx=vpa(x,8) %精确到小数点后8位三.实验结果由于初始值是随机的,故每次迭代过程中的数值会稍有不同,下面展示程序运行一次后的结果p =0.92181297074480 0.73820724581067 0.17626614449462 x =0.50100128862717 0.12384727405195 -0.52052025228022 x = 0.50030282625234 0.03428999561774 -0.52270319340081 x =0.50003968690486 0.00438423110156 -0.52348413826969 x =0.50000084057602 0.00009224380948 -0.52359636288955 x =0.50000000038843 0.00000004258871 -0.52359877448432 x =0.50000000000000 0.00000000000001 -0.52359877559830 x =0.50000000000000 -0.00000000000000 -0.52359877559830 x =[ 0.50000000, 0.39005723e-17, -0.52359878]即最后得到的解为x=0.50000000 y=0.39005723×10(-17)z=-0.52359879。

数值分析实验报告_清华大学_非线性方程的解法

数值分析实验报告_清华大学_非线性方程的解法

非线性方程的解法实验1.算法设计与比较问题提出:非线性方程组的求解方法很多,基本的思想是线性化。

不同的方法效果如何,要靠计算的实践来分析、比较。

实验内容:考虑算法(1)牛顿法(2)拟牛顿法分别编写它们的matlab程序。

实验要求:(1)用上述方法,分别计算两个例子。

在达到精度相同的前提下,比较迭代次数、浮点运算次数和CPU时间等。

1.1程序清单为使用flops统计浮点运算次数,使用MATLAB5.3版本%f1.m原函数f1function y=f(x)y(1)=12*x(1)-x(2)^2-4*x(3)-7;y(2)=x(1)^2+10*x(2)-x(3)-8;y(3)=x(2)^3+10*x(3)-8;end%ff1.m原函数f1的雅克比矩阵function y=ff(x)y(1,:)=[12,-2*x(2),-4];y(2,:)=[2*x(1),10,-1];y(3,:)=[0,3*x(2)^2,10];end%f1.m原函数f2function y=f2(x)y(1)=3*x(1)-cos(x(2)*x(3)) -1/2;y(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;y(3)=exp(-x(1)*x(2))+20*x(3)+1/3*(10*pi-3);end%ff2.m原函数f2的雅克比矩阵function y=ff2(x)y(1,:)=[3,x(3)*sin(x(2)*x(3)),x(2)*sin(x(2)*x(3))];y(2,:)=[2*x(1),-2*81*(x(2)+0.1),cos(x(3))];y(3,:)=[-x(2)*exp(-x(1)*x(2)),-x(1)*exp(-x(1)*x(2)),20]; end%牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;u=[1,1,1]';tic;while (norm(u)>tol*norm(x(:,i))&(i<n))A=ff1(x(:,i));b=f1(x(:,i))';u=-A\b;x(:,i+1)=x(:,i)+u;i=i+1;end;x(:,i)iter=i-1t=toc%拟牛顿法(以第一个方程组为例)clear;x0=[0,0,0]';n=10;tol=1e-6;x(:,1)=x0;i=1;p=[1,1,1]';A=ff1(x(:,1));tic;while (norm(p)>tol*norm(x(:,i))&(i<n))x(:,i+1)=x(:,i)-A\f1(x(:,i))';p=x(:,i+1)-x(:,i);q=f1(x(:,i+1))'-f1(x(:,i))';A=A+(q-A*p)*p'/norm(p,2)^2;i=i+1;end;iter=i-1t=tocx(:,i)1.2运行结果1.2.1第一个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6 (1)取()(0)1,1,1x T=牛顿迭代法迭代3次收敛,浮点运算次数为440,每次迭代平均浮点运算次数为147,CPU 耗时t =0(s)拟牛顿法迭代4次收敛,浮点运算次数为1048,每次迭代平均浮点运算次数为262,CPU 耗时t =0(s)(2)取()(0)000x T =,, 牛顿迭代法迭代4次收敛,浮点运算次数为510,每次迭代平均浮点运算次数为128,CPU 耗时t =1.600e-002(s)拟牛顿法迭代6次收敛,浮点运算次数为1493,每次迭代平均浮点运算次数为248,CPU 耗时t =1.50e-002(s)(3)取()(0)50,5050x T=,牛顿迭代法迭代15次收敛,浮点运算次数为2118,每次迭代平均浮点运算次数为141,CPU 耗时t =1.600e-002(s)拟牛顿法迭代338次收敛,浮点运算次数为88454,每次迭代平均浮点运算次数为262,CPU 耗时t =3.100e-002(s)1.2.2第二个方程组精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6(1)取()(0)000x T=,, 牛顿迭代法迭代5次收敛,浮点运算次数为776,每次迭代平均浮点运算次数为155.2,CPU 耗时t =0(s)拟牛顿法迭代6次收敛,浮点运算次数为1635,每次迭代平均浮点运算次数为273,CPU 耗时t =0(s)(2)取()(0)888x T=,, 牛顿迭代法迭代9次收敛,浮点运算次数为1519,每次迭代平均浮点运算次数为169,CPU 耗时t =0(s)拟牛顿法迭代21次收敛,浮点运算次数为5924,每次迭代平均浮点运算次数为282,CPU 耗时t =1.600e-002(s)(3)对于离精确解更远的初值(如()(0)101010x T=,,),在计算中会出现奇异或接近奇异的矩阵,计算结果误差很大或计算根本无法进行下去。

非线性方程组的牛顿迭代法的应用

非线性方程组的牛顿迭代法的应用

非线性方程组的牛顿迭代法的应用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 ®这边是牛顿迭代法的算法过程,牛顿迭代法是工程上应用最多的一种非线性方 程组的计算方程法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称: 牛顿法解非线性方程组
1 引言
我们已经知道,线性方程组我们可以采取Jacobi 迭代法,G-S 迭代法以及SOR 迭代方法求解。

而在科学技术领域里常常提出求解非线性方程组的问题,例如,用非线性函数拟合实验数据问题、非线性网络问题,用差分法求解非线性微分方程问题等。

我们在解非线性方程组时,也考虑用迭代法求解,其思路和解非线性方程式一样,首先要将F(x)=0转化为等价的方程组
12(,,,),(1,2,
)i i n x g x x x i n ==
或者简记为x =g (x ),其中:,:n n n i g R R g R R →→
112
2()()(),()n n n g x g x g R g x ⎡⎤⎡⎤
⎢⎥⎢⎥⎢⎥⎢⎥==∈⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦
x x x x x 迭代法:首先从某个初始向量(0)x 开始,按下述逐次代入方法构造一向量序列(){}k x :
(1)()()
1(,,),(1,2,,)k k k i i n
x g x x i n +== 其中,()()()
()12
(,,,)k k k k T
n
x x x =x 。

或写成向量形式:(1)()(),(0,1,2,)k k g k +==x x
如果()*lim k k →∞
≡x x (存在),称(){}k x 为收敛。

且当()i g x 为连续函数时,可得
*()*(lim )()k k g g →∞
==x x x
说明*x 为方程组的解。

又称为x =g (x )的不动点。

本实验中采用牛顿迭代法来求解非线性方程组。

2 实验目的和要求
运用matlab 编写一个.m 文件,要求用牛顿法非线性方程组:
12(0)(1)()3211
cos 02,(取(0,0),要求10)1sin 0
2
T
k k x x x x x x x +-∞
⎧-=⎪⎪=-<⎨
⎪-=⎪⎩
3 算法原理与流程图
1、算法原理
设有非线性方程组 F(x )=0
其中:12()((),(),
,())
T k F f f f =x x x x 由()i f x 偏导数作成的矩阵记为J(x )或'()F x 称为F(x )的Jacobi 矩阵
1111
2
2
2
212
12()()()()()
()()'()()()()n n n n n n f f f x x x f f f J x F x x x x f f f x x x ⎡⎤
∂∂∂⎢
⎥∂∂∂⎢⎥⎢⎥
∂∂∂⎢⎥≡≡∂∂∂⎢⎥⎢⎥⎢
⎥⎢⎥
∂∂∂⎢
⎥∂∂∂⎢⎥

⎦x x x x x x x x x
设*x 为F(x )=0的解,且设()()()
()12
(,,,)k k k k T
n
x x x =x ,为*x 的近似解,现利用多元函数()i f x 在()k x 点的泰勒公式有
()()()
()()
11
1
2
()()
,1
()()()()()()
()
1
()()()2
k k k k k i i i i n n
n
n
k k i i j j l l
i j l
j l
f f f f x x x x x x f x x x x P R
x x =∂∂=+-+
+-∂∂∂+--≡+∂∂∑x x x x C x
其中,i C 在()k x 与x 的所连的线段内。

如果用泰勒公式中的线性函数()i P x 近似代替()i f x ,并将线性方程组
()
()
()()
()111
()()()()()()0(1,2,,)
k k k k k i i
i i n n
n
f f P f x x x x x x i n ∂∂≡+-+
+-=∂∂=x x x x 的解作为*x 的第k+1次近似解记为(1)k +x 将上述方程写成矩阵形式:
()()()()()()0k k k F J +-=x x x x
如果()()k J x 为非奇异矩阵,则得到牛顿迭代公式:
(0)(1)()()1()
(初始向量)
[()](),(0,1,2,)k k k k J F k +-⎧⎨=-=⎩x x
x x x 求解非线性方程组F(x )=0牛顿法或为
(0)
()()()(1)()()()()k k k k k k J F +⎫⎪
∆=-⎬⎪=+∆⎭
x x x x x x x 用上式可知,每计算一步()(1)k k +→x x ,需要: (1) 计算矩阵()()k J x 及()()k F x ;
(2) 求解一个线性方程组:()()()()()k k k J F ∆=-x x x (3) 计算(1)()()k k k +=+∆x x x 。

2、流程图见附图1
4 程序代码及注释
5算例分析
(1)()k k x x +∞
-
6讨论与结论
在本次的程序设计中,我采用了C 语言中子函数调用的思想,使得程序的可读性增强,条理清晰。

其次,在求每一步的()k ∆x 时,要解方程()()()()()k k k J F ∆=-x x x ,此语句可以用
Q=P-inv (J )*Z;但考虑到算法的时间复杂性,本语句采用了Q=P-J\Z 来实现,从而减少了计
算机时间。

参考文献
[1] 易大义,沈云宝,李有法. 计算方法(第2版),浙江大学出版社. p.29-53. [2] 张琨 高思超 毕靖 编著 MA TLAB2010从入门到精通 电子工业出版社
n
1,2,,)
附图1 流程图。

相关文档
最新文档