利用牛顿迭代法求解非线性代数方程组

利用牛顿迭代法求解非线性代数方程组

利用牛顿迭代法求解非线性代数方程组

一、

问题描述

在实际应用的很多领域中,都涉及到非线性方程组的求解问

题。由于方程的非线性,给我们解题带来一定困难。牛顿迭代法是求解非线性方程组的有效方法。下面具体对牛顿迭代法的算法进行讨论,并通过实例理解牛顿迭代法。二、

算法基本思想

牛顿迭代法求解非线性代数方程组的主要思想是将非线性函

数线性化。下面我们具体讨论线性化过程:

令:

00

,,2121n

n x x x x

x

f x f x

f x

F (3-1)

则非线性方程组(3-2)

,,

,0

,,,0,,,21212211n

n n n x x x f x x x f x x x f (3-2)

可写为向量形式

x

F (3-3)

0x

F 成为向量函数。

设k n

k k

x

x

x ,,,2

1是方程组(3-2)的一组近似解,把它的左端

非线性方程组的迭代解法【开题报告】

毕业论文开题报告 信息与计算科学 非线性方程组的迭代解法 一、选题的背景和意义 =的系数矩阵具有两非线性问题是近代数学研究的主流之一,随着计算问题的日益复杂化Ax b 个明显的特点:大型化和稀疏化。大型化指系数矩阵阶数可达上万甚至更高,稀疏性指A的零元素占绝大多数对这样的A作直接三角分解,稀疏性会遭到破坏,零元素被大量填入变为非零元素,因此迫切需要新的数值方法,适用于大型稀疏线性方程,以节省储存空间和计算时间,即提高计算效 =是数值计算的重要任务,但是率,迭代法在这样的背景下得到关注和发展,求解线性方程组Ax b 大多数科学和实际问题本质上是非线性的,能做线性化的毕竟有限,对这些非线性问题是各种解决方案,常常归纳为求解一个非线性方程组,而与线性方程相比非线性方程组的求解要困难和复杂的多,计算量也大的多,现有的理论研究还比较薄弱。而对于非线性方程,一般都用迭代法求解。二、国内外研究现状、发展动态 近年来,国内外专家学者非线性方程组的迭代解法的研究兴趣与日俱增,他们多方面、多途径地对非线性方程组进行了广泛的领域性拓展(科学、物理、生产、农业等),取得了一系列研究成果。这些研究,既丰富了非线性方程组的内容,又进一步完善了非线性方程组的研究体系,同时也给出了一些新的研究方法,促进了数值计算教学研究工作的开展,推动了课程教学改革的深入进行。三、研究的主要内容,拟解决的主要问题(阐述的主要观点) 非线性的迭代法是解非线性方程组的基本途径,是数值计算中非线性方程组求根的重要工具,也是研究非线性方程组整体性质和具体分布的重要工具。就因为这样,很多专家学者对非线性方程组的迭代法进行研究。在前人研究的基础上,本文首先介绍非线性方程组迭代法的产生背景以及国内外状况,然后从数值计算的定义及理论定理出发来研究非线性方程组的迭代法的一些相关的结论,包括非线性方程组的基于不动点原理的迭代法、newton迭代法及其收敛性、非线性方程组的迭代法及其收敛性、最小二乘法、迭代法的收敛加速性等,进一步讨论非线性方程组迭代解法的收敛性质以及其他一些相关定理,以便我们更好、更清楚的看到非线性方程组和迭代法之间的联系,以及收敛和加速。 四、研究(工作)步骤、方法及措施(思路) (一)研究方法

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

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

非线性方程组的牛顿迭代法的应用 一、问题背景 非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在一定条件下由非线性问题简化的,为得到更符合实际的解答,往往需要直接研究非线性科学,它是21世纪科学技术发展的重要支柱,非线性问题的数学模型有无限维的如微分方程,也有有限维的。道遥咏计算机进行科学计算都要转化为非线性的单个方程或方程组的求解。从线性到非线性是一个质的变化,方程的性质有本质不同,求解方法也有很大差别。本文主要介绍的是非线性方程组的牛顿迭代法的数值解法。 二、数学模型 对于方程()0=x f ,如果()x f 湿陷性函数,则它的求根是容易的。牛顿法实质上是一种线性化方法,其基本思想是将线性方程()0=x f 逐步归结为某种线性方程来求解。 设已知方程()0=x f 有近似根k x (假定()0'≠k x f ),将函数()x f 在点k x 展开,有 ()()()()k k k x x x f x f x f -+≈', 于是方程()0=x f 可近似地表示为 ()()()0'=-+k k k x x x f x f 这是个线性方程,记其根为1+k x ,则1+k x 的计算公式 ()() k k k k x f x f x x ' 1- =+, ,1,0=k 这就是牛顿法。 三、算法及流程 对于非线性方程 ()()()???? ????????=n n n n x L x x f M x L x x f x L x x f f ,,,,,,,,,2 1212211 在()k x 处按照多元函数的泰勒展开,并取线性项得到

二分法和牛顿法求解非线性方程(C语言)

(1)二分法求解非线性方程: #include #include #define f(x)((x*x-1)*x-1) void main() {float a,b,x,eps; int k=0; printf("intput eps\n");/*容许误差*/ scanf("%f",&eps); printf("a,b=\n"); for(;;) {scanf("%f,%f",&a,&b); if(f(a)*f(b)>=0)/*判断是否符合二分法使用的条件*/ printf("二分法不可使用,请重新输入:\n"); else break; } do {x=(a+b)/2; k++; if(f(a)*f(x)<0)/*如果f(a)*f(x)<0,则根在区间的左半部分*/ b=x; else if(f(a)*f(x)>0)/*否则根在区间的右半部分*/ a=x; else break; }while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2;/*取最后的小区间中点作为根的近似值*/ printf("\n The root is x=%f,k=%d\n",x,k); } 运行结果: intput eps 0.00001 a,b= 2,-5 The root is x=1.324721,k=20 Press any key to continue 总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。二分法收敛速度较快,但缺点是只能求解单根。 (2)牛顿法求解非线性方程: #include #include float f(float x)/*定义函数f(x)*/ {return((-3*x+4)*x-5)*x+6;} float f1(float x)/*定义函数f(x)的导数*/

牛顿法非线性方程求解

《MATLAB 程序设计实践》课程考核 ---第37-38页 题1 : 编程实现以下科学计算算法,并举一例应用之。(参考书籍《精 通MAT LAB科学计算》,王正林等著,电子工业出版社,2009 年) “牛顿法非线性方程求解” 弦截法本质是一种割线法,它从两端向中间逐渐逼近方程的根;牛顿法本质上是一种切线法,它从一端向一个方向逼近方程的根,其递推公式为: - =+n n x x 1) ()(' n n x f x f 初始值可以取)('a f 和)('b f 的较大者,这样可以加快收敛速度。 和牛顿法有关的还有简化牛顿法和牛顿下山法。 在MATLAB 中编程实现的牛顿法的函数为:NewtonRoot 。 功能:用牛顿法求函数在某个区间上的一个零点。 调用格式:root=NewtonRoot )(```eps b a f 其中,f 为函数名; a 为区间左端点; b 为区间右端点 eps 为根的精度; root 为求出的函数零点。 ,

牛顿法的matlab程序代码如下: function root=NewtonRoot(f,a,b,eps) %牛顿法求函数f在区间[a,b]上的一个零点%函数名:f %区间左端点:a

%区间右端点:b %根的精度:eps %求出的函数零点:root if(nargin==3) eps=1.0e-4; end f1=subs(sym(f),findsym(sym(f)),a); f2=subs(sym(f),findsym(sym(f)),b); if (f1==0) root=a; end if (f2==0) root=b; end if (f1*f2>0) disp('两端点函数值乘积大于0 !'); return; else tol=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; else root=b-fb/dfb; end while(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); end end 例:求方程3x^2-exp(x)=0的一根 解:在MATLAB命令窗口输入: >> r=NewtonRoot('3*x^2-exp(x)',3,4) 输出结果: X=3.7331

C++实现 牛顿迭代 解非线性方程组

C++实现牛顿迭代解非线性方程组(二元二次为例) 求解{0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4; }的方程 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数#define Epsilon 0.0001 // 差向量1范数的上限 #define Max 100 // 最大迭代次数 using namespace std; const int N2=2*N; int main() { void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N] void ffjacobian(float xx[N],float yy[N][N]); //计算雅克比矩阵yy[N][N] void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵inv void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0 计算近似解向量x1 float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm; int i,j,iter=0; //如果取消对x0的初始化,撤销下面两行的注释符,就可以由键盘x读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

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

牛顿迭代法求解非线性方程组 非线性方程组如下: 221122121210801080 x x x x x x x ?-++=??+-+=?? 给定初值()00.0T x =,要求求解精度达到0.00001 1.首先建立函数()F X ,方程编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1),f(2)] ; 2.建立函数()DF X ,用于求方程的jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; %jacobi 矩阵是一阶偏导数以一定方式排列成的矩阵。 3.编程牛顿迭代法解非线性方程组,将newton.m 保存在工作路径中: clear,clc; x=[0,0]'; f=F(x);

df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break; else end end ezplot('x^2-10*x+y^2+8',[-6,6,-6,6]); hold on ezplot('x*y^2+x-10*y+8',[-6,6,-6,6]); 运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117

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

二元非线性方程组求根的牛顿迭代法 摘要:本文根据一元函数的Taybr 公式和求解一元非线性方程的牛顿迭代法之间的关系,利用多元函数的Taybr 公式推导出了二元非线性方程组的牛顿迭代法;在此基础上,通过MA TLAB 仿真计算一个方程组的根来说明该方法是可行的。 关键词:牛顿迭代法;一元函数;二元函数; Taybr 公式; Matlab 0 引言 非线性方程()0f x =的数值解法有逐步搜索法、区间二分法、迭代法、牛顿 迭代法等, 那么, 对于对于非线性方程组(,)0 (,)0f x y g x y =??=?,其牛顿迭代法的迭代方 程是什么? 本文根据一元函数的Taybr 公式和一元非线性方程牛顿迭代法之间的关系,利用多元函数的Taybr 公式推导出了二元非线性方程组的牛顿迭代法,在此基础上利用推导出的二元非线性方程组求根的牛顿迭代法通过matlab 仿真计算出一个方程组的根,检验了所得方法的有效性。 1 基本定理、结论 定理1 (一元函数的Taybr 公式) 如果函数()f x 在含有0x 的某个开区间(,)a b 内具有直(1)n +阶的导数,则对任一(,)x a b ∈ ,有 ()2 0000000()()()()()()()...()()2!! n n n f x f x f x f x f x x x x x x x R x n '''=+-+-++-+ 其中()n R x = ()(1)10() ()1! n n f x x n ξ++-+,这里ξ是0x 与x 之间的某个值。 定理2 (二元函数的Taybr 公式) 设(,)z f x y =在点00(,)x y 的某一邻域内连续且有直到(1)n +阶的连续偏导数, 00(,)x k y k ++为此邻域内任一点,则有 2 000000001(,)(,)(,)(,)... 2!f x k y k f x y h k f x y h k f x y x y x y αααααααα???? ++=++++++ ? ?????

基于Matlab的牛顿迭代法解非线性方程组

基于Matlab 实现牛顿迭代法解非线性方程组 已知非线性方程组如下 2211221212 10801080x x x x x x x ?-++=??+-+=?? 给定初值0(0,0)T x =,要求求解精度达到0.00001 首先建立函数F(x),方程组编程如下,将F.m 保存到工作路径中: function f=F(x) f(1)=x(1)^2-10*x(1)+x(2)^2+8; f(2)=x(1)*x(2)^2+x(1)-10*x(2)+8; f=[f(1) f(2)]; 建立函数DF(x),用于求方程组的Jacobi 矩阵,将DF.m 保存到工作路径中: function df=DF(x) df=[2*x(1)-10,2*x(2);x(2)^2+1,2*x(1)*x(2)-10]; 编程牛顿迭代法解非线性方程组,将newton.m 保存到工作路径中: clear; clc x=[0,0]'; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',0,x(1),x(2)); N=4; for i=1:N y=df\f'; x=x-y; f=F(x); df=DF(x); fprintf('%d %.7f %.7f\n',i,x(1),x(2)); if norm(y)<0.0000001 break ; else end end

运行结果如下: 0 0.0000000 0.0000000 1 0.8000000 0.8800000 2 0.9917872 0.9917117 3 0.9999752 0.9999685 4 1.0000000 1.0000000

非线性方程组牛顿迭代法(1)

华中师范大学 课程结业论文 题目:非线性方程组牛顿法及MATLAB程序 院系:数学与统计学学院 专业:数学与应用数学 年级:2014级 课堂名称:数值分析(1)实验 学生姓名:杨帅 学号:2014212643 2016年6月18

非线性方程组牛顿法及其MATLAB 程序 〔摘要〕学了《数值分析》这门课,了解到非线性方程的数值解法有:对分区间法、简单迭代法、Aitken-Steffensen 加速法、Newton 迭代法、正割法等,自然就会想到非线性方程组的数值解法有哪些呢?和非线性方程的数值解法有哪些不不同呢? 在研究非线性方程组的数值解法之前,首先要给非线性方程组下一个合理定义;n 个变量n 个方程(n>1)的方程组表示为0 ),...,,(2 1 =n i x x x f (其中i=1,2...,n ),若i f 中至少有一个是非线性函数,则称上述 的表示为非线性方程组。在R 中记,T n x x x f f ),...,,(2 1 =,其中记 ),...,()(1n i i i x x f x f f ==且D x ∈。 若存在尣∈D ,使?(尣)=0,则称尣为非线性方程组的解。上述方程组可能有一个解或多个解,也可能有无穷多解或无解。对非线性方程组解的存在性的研究远不如线性方程组那样成熟,现有的解法也不象线性方程组那样有效。除极特殊的方程外,一般不能用直接方法求得精确解,目前主要采用迭代法求近似解。根据不同思想构造收敛于解尣的迭代序列{尣}(k=0,1,…),即可得到求解非线性方程组的各种迭代法;但研究数学问题的时候,一般是由简单到复杂,由特殊到一般。因此要在研究非线性方程组牛顿解法的时候,首先要探究非线性方程的牛顿解法。 1.1求解线性方程组的牛顿法及其MATAB 程序 1.1.1程序设计思路 输入的量:初始值0 x 、近似根k x 的误差限tol ,近似根k x 的函数 值)(k x f 得误差限ftol ,迭代次数的最大值gxmax 、函数fnq (x )=) (x f

线性方程组的迭代法

第六章 线性方程组的迭代法 一、教学目标及基本要求 通过对本节的学习,使学生掌握线性方程组的数值解法。 二、教学内容及学时分配 本节主要介绍线性方程组的数值解法,迭代公式的建立,迭代收敛性。 三、教学重点难点 1.教学重点:迭代公式的建立、迭代收敛性。 2. 教学难点:迭代收敛性。 四、教学中应注意的问题 多媒体课堂教学为主。适当提问,加深学生对概念的理解。 6.2 解线性方程组的迭代法 重要性:解线性代数方程组的有效方法在计算数学和科学计算中具有特殊的地位和作用。如弹性力学、电路分析、热传导和振动、以及社会科学及定量分析商业经济中的各种问题。在实际问题中产生的线性方程组的类型有很多,如按系数矩阵含零元素多少分类,有稠密和稀疏(零元素占80%以上)线性方程组之分;如按阶数的高低分类,有高阶(阶数在1000阶以上)中阶、(500~1000阶) 和低阶(500阶以下)线性方程组之分;如按系数矩阵的形状和性质分类,有对称正定、三对角、对角占优线性方程组之分。因为数值解法必须考虑方法的计算时间和空间效率以及算法的数值稳定性。因此,不同类型的线性方程组,其数值解法也不相同。但是,基本的方法可以归结为两大类,即直接法和迭代法。 分类:线性方程组的解法可分为直接法和迭代法两种方法。 (a) 直接法:对于给定的方程组,在没有舍入误差的假设下,能在预定的运算次数内求得精确解。最基本的直接法是Gauss 消去法,重要的直接法全都受到Gauss 消去法的启发。计算代价高。但实际计算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解,如何避免舍入误差的增长是设计直接法时必须考虑的问题。 (b) 迭代法:基于一定的递推格式,产生逼近方程组精确解的近似序列。收敛性是其为迭代法的前提,此外,存在收敛速度与误差估计问题。迭代法要求方程组系数矩阵具有某种特殊形式(如对角占优阵),是解高阶稀疏矩阵方程组的重要方法。 §6.1 迭代公式的建立 迭代法的基本思想是用逐次逼近的方法求线性方程组的解。 设有方程组b Ax = (1) 将其转化为等价的便于迭代的形式f Bx x += (2) (这种转化总能实现,如令b f A I B =-=,)并由此构造迭代公式

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

牛顿迭代法c++程序设计 求解{0=x*x-2*x-y+0.5; 0=x*x+4*y*y-4; }的方程 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数 #define Epsilon 0.0001 // 差向量1范数的上限 #define Max 100 //最大迭代次数 using namespace std; const int N2=2*N; int main() { void ff(float xx[N],float yy[N]); //计算向量函数的因变量向量yy[N] void ffjacobian(float xx[N],float yy[N][N]);/ /计算雅克比矩阵yy[N][N] void inv_jacobian(float yy[N][N],float inv[N][N]); //计算雅克比矩阵的逆矩阵inv void newdundiedai(float x0[N], float inv[N][N],float y0[N],float x1[N]); //由近似解向量x0 计算近似解向量x1 float x0[N]={2.0,0.25},y0[N],jacobian[N][N],invjacobian[N][N],x1[N],errornorm; int i,j,iter=0; //如果取消对x0的初始化,撤销下面两行的注释符, 就可以由键盘向x0读入初始近似解向量for( i=0;i>x0[i]; cout<<"初始近似解向量:"<

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

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

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

非线性方程组的牛顿迭代法的应用 一、问题背景 非线性是实际问题中经常出现的,并且在科学与工程计算中的地位越来越重要,很多我们熟悉的线性模型都是在一定条件下由非线性问题简化的,为得到更符合实际的解答,往往需要直接研究非线性科学,它是21世纪科学技术发展的重要支柱,非线性问题的数学模型有无限维的如微分方程,也有有限维的。道遥咏计算机进行科学计算都要转化为非线性的单个方程或方程组的求解。从线性到非线性是一个质的变化,方程的性质有本质不同,求解方法也有很大差别。本文主要介绍的是非线性方程组的牛顿迭代法的数值解法。 二、数学模型 对于方程()0=x f ,如果()x f 湿陷性函数,则它的求根是容易的。牛顿法实质上是一种线性化方法,其基本思想是将线性方程()0=x f 逐步归结为某种线性方程来求解。 设已知方程()0=x f 有近似根k x (假定()0'≠k x f ),将函数()x f 在点k x 展开,有 ()()()()k k k x x x f x f x f -+≈', 于是方程()0=x f 可近似地表示为 ()()()0'=-+k k k x x x f x f 这是个线性方程,记其根为1+k x ,则1+k x 的计算公式 () () k k k k x f x f x x ' 1- =+, ,1,0=k 这就是牛顿法。 三、算法及流程 对于非线性方程 ()()()???? ????????=n n n n x L x x f M x L x x f x L x x f f ,,,,,,,,,2 12 12211 在()k x 处按照多元函数的泰勒展开,并取线性项得到

解线性方程组的迭代法

解线性方程组的迭代法 Haha 送给需要的学弟学妹 摘要:因为理论的分析表明,求解病态的线性方程组是困难的,但是实际情况是否如此,需要我们来具体检验。系数矩阵H 为Hilbert 矩阵,是著名的病态问题。因而决定求解Hx b =此线性方程组来验证上述问题。 详细过程是通过用Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法四种方法求解Hx b =线性方程组。 关键词:病态方程组、Gauss 消去法、J 迭代法、GS 迭代法、SOR 迭代法 目录: 一、问题背景介绍 二、建立正确额数学模型 三、求解模型的数学原理 1、Gauss 消去法求解原理 2、Jacobi 迭代法求解原理 3、G-S 迭代法求解原理 4、SOR 迭代法求解原理 5、Jacobi 和G-S 两种迭代法收敛的充要条件 四、计算过程 (一)Hilbert 矩阵维数n=6时 1、Gauss 消去法求解 2、Jacobi 迭代法求解 3、G-S 迭代法求解 4、SOR 迭代法求解 (二)Hilbert 矩阵维数n=20、50和100时 1、G-S 迭代法求解图形 2、SOR 迭代法求解图形 五、编写计算程序 六、解释计算结果 1、Gauss 消去法误差分析 2、G-S 迭代法误差分析 3、SOR 迭代法误差分析 G-S 迭代法与SOR 迭代法的误差比较 七、心得体会 正文: 一、问题背景介绍。 理论的分析表明,求解病态的线性方程组是困难的。实际情况是否如此,会出现怎样的现象呢? 二、建立正确的数学模型。 考虑方程组Hx b =的求解,其中系数矩阵H 为Hilbert 矩阵, ,,1 (), , ,1,2, ,1 i j n n i j H h h i j n i j ?== =+- 这是一个著名的病态问题。通过首先给定解(为方便计算,笔者取x 的各个分量等于1),再计算出右端,b Hx =这样Hx b =的解就明确了,再用Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法四种方法分别求解,Hx b =将求解结果与给定解比较,而后求出上述四种方法的误差,得出哪种方法比较好。 三、求解模型的数学原理。 1、Gauss 消去法求解原理 对于Ax b =(A 非奇异)求解时,可以先将A 分解成一个下三角矩阵L 和一个上三角矩阵U 的乘积,即A LU =,就可以通过

非线性方程的简单迭代法和Steffensen迭代法

《数值计算方法》实验报告 实验名称:实验1 非线性方程的简单迭代法和Steffensen 迭代法 实验题目:分别用简单迭代法和Steffensen 迭代法求方程 010423=-+x x 在 [1, 2] 内的一个实根. 实验目的:理解并掌握简单迭代法和Steffensen 迭代法 基础理论:简单迭代法和Steffensen 迭代法 1).简单迭代法的原理:将一元非线性方程:0)(=x f 改写成等价方程:)(x x ρ= ,对此,从某个初始值x0开始,对应式)(x x ρ= 构成迭代公式 ,...1,0),(1==+k x x k k ρ ,这样就可以确定序列 {}k x (k=0,1,2…)。如果 {}k x 有极限 *lim x x k k =∞→ ,由式 ,...1,0),(1==+k x x k k ρ 两边取极限可得 )(**x x ρ= ,可知 * x 为方程0)(=x f 的近似解。 2)Steffensen 迭代法的原理: 通过把改进的Aitken 方法应用于根据不动点迭代所得到的线性收敛序列,将收敛速度加速到二阶。

()???? ?????+---===+k k k k k k k k k k k x y z x y x x y z x y 2) ()(21ρρ []x x x x x x x +---=)(2)(()()(2ρρρρψ 实验环境:操作系统:Windows 7; 实验平台:Turbo C++ 实验过程:写出算法→编写程序→调试运行程序→计算结果 1)简单迭代法的算法: Input:初始近似值x0,精度要求del,最大迭代次数N Output:近似解x 或失败信息 1. n ←1 2. While n ≤N do; 3. x ←f(x0); 4. if | x-x0|

Newton 法解非线性方程组

Newton法解非线性方程组 一.题目重述:编程实现非线性方程组的牛顿解法,并求解如下方程组。 3x1?cos x2x3?0.5=0 x12?81x2+0.12+sin x3+1.06=0 e?x1x2+20x3+10π?3 3 =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; end 2.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]; end 3.解题脚本文件 文件名zu %% 牛顿法解非线性方程组 clear; X0=[0.1;0.1;-0.1]; for i=1:200 X=X0-F1(X0)\F(X0); %这里采用MATLAB的左除方法,避免算逆矩阵X0=X; end X

不动点迭代法求解非线性方程组

不动点迭代法求解非线性方程组 摘要:一般非线性方程组可以写成()0F x =的形式,其中:n m F R R →是定义在区域 n D R ?上的向量函数。把方程组()0F x =改写成与之等价的形式:(x G x =)。因此,求 方程组()0F x =的解就转化为求函数的(G x )的不动点。本文首先介绍了多变量函数()F x 的微积分性质,接着介绍了用不动点迭代法求解非线性方程组。 关键词:多变量函数;微积分;不动点 Fixed Point Iteration Method For Solving Nonlinear Equations Abstract :General nonlinear equations can be written in the form of ()F x θ=, where the vector function :n m F R R →is defined on the region n D R ?. Transform the equations ()0F x = into its equivalent form: (x G x =).Therefore, we can get the solution of ()0F x = by finding the fixed point of (G x ).In this paper, we first introduce some knowledge about multivariable calculus, then introduce the fixed point iteration method for solving nonlinear equations. Key words: multi-variable function; calculus; fixed point 1 引言 一般非线性方程组及其向量表示法:含有n 个方程的n 元非线性方程组的一般形式为 11221212(,...,)0(,...,)0......(,...,)0 n n m n f x x x f x x x f x x x =??=?? ? ?=? (1) 其中,()1,2,...,i f i n =是定义在n D R ?上的n 元实值函数,且i f 中至少有一个是非线性 函数。

实验八、解线性方程组的迭代法

实验八、解线性方程组的迭代法 解线性方程组的迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,即是从一个初始向量)0(x 出发,按照一定的迭代格式产生一个向量序列}{)(k x ,使其收敛到方程组b Ax =的解。迭代法的优点是所需计算机存储单元少,程序设计简单,原始系数矩阵在计算过程中始终不变等。但迭代法存在收敛性及收敛速度问题。迭代法是解大型稀疏矩阵方程组的重要方法。 一、实验目的 1、熟悉迭代法的有关理论和方法; 2、会编制雅可比迭代法、高斯-塞德尔迭代法的程序; 3、注意所用方法的收敛性及其收敛速度问题。 二、实验任务 1、用雅可比迭代法解方程组 ?????=++=++=-+5222722321 321321x x x x x x x x x . 注意:若用高斯-塞德尔迭代法则发散。 解:输入主程序: function X=jacdd(A,b,X0,P,wucha,max1) [n m]=size(A); for j=1:m %a(j)=sum(abs(A(:,j)))-2*(abs(A(j,j))); %end %for i=1:n %if a(i)>=0 %disp('请注意:系数矩阵A 不是严格对角占优的,此雅可比迭代不一定收敛') %return %end %end %if a(i)<0 disp('请注意:系数矩阵A 是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 ') %end for k=1:max1 k for j=1:m X(j)=(b(j)-A(j,[1:j-1,j+1:m])*X0([1:j-1,j+1:m]))/A(j,j);

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

实验名称: 牛顿法解非线性方程组 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 +-∞ ?-=??=-

matlab实现牛顿迭代法求解非线性方程组

matlab实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0 exp(-x1*x2)+20*x3+(10*pi-3)/3=0 求解要求精度达到0.00001 ———————————————————————————————— 首先建立函数fun 储存方程组编程如下将fun.m保存到工作路径中: function f=fun(x); %定义非线性方程组如下 %变量x1 x2 x3 %函数f1 f2 f3 syms x1 x2 x3 f1=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); end if norm(x-x0)

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

实验报告一:实验题目 一、 实验目的 掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。 二、 实验内容 1、编写二分法、牛顿迭代法程序,并使用这两个程序计算02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 4 10- ,比较两种方法收敛速度。 2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。 3、由中子迁移理论,燃料棒的临界长度为下面方程的根,用牛顿迭 代法求这个方程的最小正根。 4、用牛顿法求方程 的根,精确至8位有效数字。比较 牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。 三、 实验程序 第1题: 02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。 画图函数: f un cti on Te st1() % f(x ) 示意图, f(x) = x + exp (x) - 2; f(x) = 0 r = 0:0.01:1; y = r + e xp(r) - 2 p lot(r, y); gri d on 二分法程序: 计算调用函数:[c,n um ]=bisec t(0,1,1e-4) fu ncti on [c,num ]=bisect (a,b,de lt a) %Inp ut –a,b 是取值区间范围 % -de lta 是允许误差 %O utput -c牛顿迭代法最后计算所得零点值 % -num 是迭代次数 ya = a + exp(a) - 2; yb = b + e xp(b) - 2;

牛顿法求解非线性方程组matlab源程序

牛顿法求解非线性方程组matlab源程序Newton-Raphson 求解非线性方程组matlab源程序 matlab程序如下: function hom [P,iter,err]=newton('f','JF',[;; ],,,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

相关文档
最新文档