当前位置:文档之家› 雅可比迭代法

雅可比迭代法

雅可比迭代法
雅可比迭代法

2013-2014(1)专业课程实践论文

题目:雅可比迭代法

一、算法理论

设有方程组),...,2,1(1

n i b x a i j n j ij ==∑=

记作,b Ax = (1)

A 为非奇异阵且),,...,2,1(0n i a ij =≠将A 分裂为U L D A --=,其中 D =????????????????nn a a a 22

11,L =-???

?????

????

????-00001,21323121n n n n a a a a a a

U =-??

?

??

?

?

?

????????-0000,122311312n

n n

n a a a a a a

将式(1)第)....2,1(n i i =个方程用ii a 去除再移项,得到等价方程组

(),,...,2,111n i x a b a x n i j j j ij i ii i =???

?

?

??

-=∑≠=

(2) 简记作 ,0f x B x +=

其中 ().,111

0b D f U L D A D I B ---=+=-=

对方程组(2)应用迭代法,得到解式(1)的雅可比迭代公式

()

()

()()()()()?????????

??

? ??-

==∑≠=+,1,...,11002010n i j i k j ij i ii k i t

n x a b a x x x x x ,

初始向量

(3)

其中()()()()()T

k n k k k x x x x ,,...,21=为第k 次迭代向量。设()k x 已经算出,由式(3)可计算下一次迭代向量()(),,...,2,1,...;2,1,01n i k x k ==+

显然迭代公式(3)的矩阵形式为

()()()()???+=+,010f x B x

x k k ,初始向量 其中0B 称为雅可比方法迭代矩阵。

数值实验报告

数值实验报告五 班级:2017级学号:**** 姓名:*** 2017.12.5 1.数值实验问题 试用雅可比迭代法,高斯-赛德尔迭代法,超松驰迭代计算线性方程组: 取=(0,0,0,松弛因子分别取w=0.1t,1要求达到精度 。试通过数值计算得出不同的松弛因子所需要的迭代次数和收敛最快的松弛因子,并指出哪些松弛因子使得迭代发散。 2.数值方法 A=, L=-, U=-, D=diag() (1)雅可比迭代公式:

D. (2)高斯-赛德尔迭代法公式: (3)超松驰迭代方法公式: 其中w为松弛因子。 3.数值结果 如下表

最后四组,测得其在前10次内迭代所产生的结果,其中每一列为一

次迭代结果,分别如图: SOR-1.6 SOR-1.7 SOR-1.8 SOR-1.9 由于计算数据限制,其前五十列数据基本为空,所以取51到60列

由此看出,最后四组数据是发散的,数据结果不稳定,不收敛。所以最后四组得不到所需数据。 4.讨论 本次实验,分别用雅可比迭代公式,高斯-赛德尔迭代公式,超松驰迭代公式计算了此线性方程组。其中,雅可比和高斯迭代能够很好的进行运算,而超松驰迭代方法中,若松弛因子取得不够恰当,则会导致整个运算失败,得不到所需的结果,迭代不收敛,发散。此外,在进行初始值的赋值中,我是对每个矩阵都进行了赋值操作,而更简便的是,调用matlab中存在的函数,对矩阵进行运算,从而简化操作和代码,也使程序适用性更广。 程序代码: 1.雅可比迭代 function [x]=yakebi(D,L,U,b,j) format long B=D\(L+U);

第二章 迭代法的一般原理

第二章 迭代法的一般原理 非线性方程组无论从理论上还是计算方法上,都比线性方程组复杂得多。一般的非线性方程组很难求出解析解,往往只能求出其数值解,且往往只能借助于迭代法。本章我们将讨论迭代法的一般原理、迭代法的一般构造及迭代收敛速度的衡量标准。 2-1 迭代法与不动点定理 设n n R R D →?:f ,考虑方程 ()0=x f (2-1) 若存在D *∈x ,使()0=*x f ,则称*x 为方程(2-1) 的解。 用迭代法求解(2-1) ,先将(2-1)化为等价的方程 ()x g x = (2-2) 这里映象n n R R D →?:g 。 方程(2-2)的解*x (即()**x g x =)称为映象g 的不动点。因此用迭代法解方程(2-1),就是求(2-2)中映象g 的不动点。这样以及g 是否存在不动点自然就是我们关心的问题。 定理2-1 若n n R R D →?:g 为有界闭集D D ?0上的严格非膨胀映象,()00D D ?g ,则g 在0D 内有唯一不动点。 证 唯一性 设g 在0D 内至少有两个不动点1x ,2x ,则 ()() 2121x x x g x g x x 21-≤-=-α 因1<α,所以由上式推得21x x =。唯一性得证。 记()()x g x x -=?,由g 及泛数的连续性可知1:R R D n →??连续。因0D 为有界闭集,故?在0D 上有最小值。设0D *∈x 为最小点,即

()()x g x x -=∈min 0 D x *? 则*x 为g 的不动点。因为若不然,则有()**x g x ≠,再由g 严格非膨胀,可得 ()()()()()***x g g x g x g -=?()()***x x g x ?=-< 这与*x 为?的最小点相矛盾,故*x 为g 的不动点。 注 定理中0D 的有界闭性、g 的压缩性和g 映0D 入自身,此3个条件缺一不可。例如,()x x x g 1+=在[)+∞=,D 10上严格非膨胀,但它在0D 中却没有不动点。 下面我们介绍在应用上非常广泛的不动点定理。 定理2-2 (Brouwer 不动点定理) 设n n R R D →?:g 在有解闭凸集D D ?0上连续,且()00D D G ?,则g 在0D 至少有一个不动点。 本定理在一维情形下叙述为:[]b a f ,: []b a ,→则f 在[]b a ,中至少有一个不动点。几何解释见图2-1。 x b a 图2-1 一维Brouwer 定理

雅可比迭代法

2013-2014(1)专业课程实践论文 题目:雅可比迭代法

一、算法理论 设有方程组),...,2,1(1 n i b x a i j n j ij ==∑= 记作,b Ax = (1) A 为非奇异阵且),,...,2,1(0n i a ij =≠将A 分裂为U L D A --=,其中 D =????????????????nn a a a 22 11,L =-??? ????? ???? ????-00001,21323121n n n n a a a a a a U =-?? ? ?? ? ? ? ????????-0000,122311312n n n n a a a a a a 将式(1)第)....2,1(n i i =个方程用ii a 去除再移项,得到等价方程组 (),,...,2,111n i x a b a x n i j j j ij i ii i =??? ? ? ?? -=∑≠= (2) 简记作 ,0f x B x += 其中 ().,111 0b D f U L D A D I B ---=+=-= 对方程组(2)应用迭代法,得到解式(1)的雅可比迭代公式 () () ()()()()()????????? ?? ? ??- ==∑≠=+,1,...,11002010n i j i k j ij i ii k i t n x a b a x x x x x , 初始向量 (3)

其中()()()()()T k n k k k x x x x ,,...,21=为第k 次迭代向量。设()k x 已经算出,由式(3)可计算下一次迭代向量()(),,...,2,1,...;2,1,01n i k x k ==+ 显然迭代公式(3)的矩阵形式为 ()()()()???+=+,010f x B x x k k ,初始向量 其中0B 称为雅可比方法迭代矩阵。

MATLAB样例之雅克比迭代法

要求: 下面分别使用雅克比迭代法和高斯-赛德尔迭代法求一个方程组的近似解用的线性方程组是按实验要求给的: 7*x1+x2+2*x3=10 x1+8*x2+2*x3=8 2*x1+2*x2+9*x3=6 雅克比迭代法的matlab代码:(老师写的) A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(any(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); while 1 x1=B*x0+f K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end 高斯-赛德尔迭代法matlab代码:(自己改的)

A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(all(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); x00=x0; while 1 x11=B*x0+f; x00(1,1)=x11(1,1); x12=B*x00+f; x00(2,1)=x12(2,1); x13=B*x00+f; x00(3,1)=x13(3,1); x1=x00 K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end

数学实验“线性方程组的J-迭代,GS-迭代,SOR-迭代解法”实验报告(内含matlab程序代码)

西京学院数学软件实验任务书 课程名称数学软件实验班级数0901 学号0912020107 姓名李亚强 实验课题线性方程组的J-迭代,GS-迭代,SOR-迭代方法。 实验目的 熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代方法。 实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成。 实验内容线性方程组的J-迭代;线性方程组的GS-迭代;线性方程组的SOR-迭代。 成绩教师

实验四实验报告 一、实验名称:线性方程组的J-迭代,GS-迭代,SOR-迭代。 二、实验目的:熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法,编程实现雅可比方法和高斯-赛德尔方法求解非线 性方程组121231 235210 64182514 x x x x x x x x +=?? ++=??++=-?的根,提高matlab 编程能力。 三、实验要求:已知线性方程矩阵,利用迭代思想编程求解线性方程组的解。 四、实验原理: 1、雅可比迭代法(J-迭代法): 线性方程组b X A =*,可以转变为: 迭代公式(0)(1)() k 0,1,2,....k k J X X B X f +???=+=?? 其中b M f U L M A M I B J 111),(---=+=-=,称J B 为求解 b X A =*的雅可比迭代法的迭代矩阵。以下给出雅可比迭代的 分量计算公式,令),....,() ()(2)(1)(k n k k k X X X X =,由雅可比迭代公式 有 b X U L MX k k ++=+) () 1()(,既有i n i j k i ij i j k i ij k i ij b X a X a X a +- -=∑∑+=-=+1 )(1 1 )() 1(, 于

Jacobi迭代法求解线性方程组实验报告

仿真平台与工具应用实践 Jacobi迭代法求解线性方程组 ^ 实验报告 : 院系: 专业班级: 姓名: 学号: 指导老师: }

一、 ; 二、 实验目的 熟悉Jacobi 迭代法原理; 学习使用Jacobi 迭代法求解线性方程组; { 编程实现该方法; 三、 实验内容 应用Jacobi 迭代法解如下线性方程组: , ?? ???=++--=+-=+-1552218474321321321x x x x x x x x x ,要求计算精度为710- 四、 ^ 五、 实验过程 (1)、算法理论 Jacobi 迭代格式的引出是依据迭代法的基本思想:构造一个向量系列(){}n X ,使其收敛至某个极限*X ,则*X 就是要求的方程组的准确解。 Jacobi 迭代

将方程组: ???????=+++=+++=+++n n nn n n n n n n b x a x a x a b x a x a x a b x a x a x a 22112222212111212111 )1( ~ 在假设0≠ii a ,改写成()??? ????++++=++++=++++=--n n n n n n n n n n n g x b x b x b x g x b x b x b x g x b x b x b x 112211223231212113132121 )2( 如果引用系数矩阵 ??????????=nn n n a a a a A 1111,???? ??????=0011 n n b b B 及向量??????????=n x x X 1,??????????=n b b b 1,??????????=n g g g 1, 方程组(1)和(2)分别可写为:b AX =及g BX X +=,这样就得到了jacobi 迭代格式01g BX X k k +=+用jacobi 迭代解方程组b AX =时,就可任意取初值0X 带入迭代可知式g BX X k k +=+1,然后求k k X ∞ →lim 。但是,n 比较大的时候,写方程组)1(和)2(是很麻烦的,如果直接由A ,b 能直接得到B ,g 就是矩阵与向量的运算了,那么如何得到B ,g 呢实际上,如果引进非奇异对角矩阵 ()0≠ii a ???? ??????=nn a a D 00011 将A 分解成:,D D A A +-=要求b AX =的解,实质上就有,)(DX X D A AX +-=而D 是非奇异的,所以1-D 存在,,)(X A D AX DX -+=从而有,11b D AX D X --+=我们在这里不妨令,1A D I B --=b D g 1-=就得到jacobi 迭代格式:g BX X k k +=+1 】

jacobi迭代法和Gauss-Seidel迭代法

数值计算方法实验报告(五) 班级:地信10801 序号:姓名: 一、实验题目:jacobi迭代法和Gauss-Seidel迭代法 二、实验学时: 2学时 三、实验目的和要求: 1.掌握迭代法的基础原理。 2.掌握jacobi迭代法和Gauss-Seidel迭代法的步骤。 3.能用程序语言对jacobi迭代法和Gauss-Seidel迭代法进行编程实现。 四、实验过程代码及结果 1、代码: #include #include float x[100],xk[100]; float e; int N,M=1000; float a[100][101]; void initdata() { cout<<"输入方程阶数:"; cin>>N; cout<<"输入误差限e:"; cin>>e; cout<<"输入方程系数:"<>a[i][j]; cout<<"输入初始解向量x0:"<>xk[i]; } void jocobi() { int Nx=0,times=0; while(Nx=M){cout<<"发散"<

for(int i=1;i<=N;i++) { float sum=0; for(int j=1;j<=N;j++) if(i!=j)sum+=xk[j]*a[i][j]; x[i]=(a[i][N+1]-sum)/a[i][i]; if(fabs(x[i]-xk[i])

雅可比迭代法与矩阵的特征值

实验五 矩阵的lu分解法,雅可比迭代法 班级: 学号: 姓名:

实验五 矩阵的LU 分解法,雅可比迭代 一、目的与要求: 熟悉求解线性方程组的有关理论和方法; 会编制列主元消去法、LU 分解法、雅可比及高斯—塞德尔迭代法德程序; 通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。 二、实验内容: 会编制列主元消去法、LU 分解法、雅可比及高斯—塞德尔迭代法德程序,进一步了解 各种方法的优缺点。 三、程序与实例 列主元高斯消去法 算法:将方程用增广矩阵[A ∣b ]=(ij a )1n (n )+?表示 1) 消元过程 对k=1,2,…,n-1 ①选主元,找{}n ,,1k ,k i k +∈使得 k ,i k a = ik a n i k max ≤≤ ②如果0a k ,i k =,则矩阵A 奇异,程序结束;否则执行③。 ③如果k i k ≠,则交换第k 行与第k i 行对应元素位置, j i kj k a a ? j=k,┅,n+1 ④消元,对i=k+1, ┅,n 计算 kk ik ik a a l /= 对j=l+1, ┅,n+1计算 kj ik ij ij a l a a -= 2) 回代过程 ①若0=nn a ,则矩阵A 奇异,程序结束;否则执行②。 ②nn n n n a a x /1,+=;对i=n-1, ┅,2,1,计算 ii n i j j ij n i i a x a a x /11,??? ? ? ?- =∑+=+ 程序与实例 程序设计如下:

#include #include using namespace std; void disp(double** p,int row,int col){ for(int i=0;i>p[i][j]; } } int findMax(double** p,int start,int end){ int max=start; for(int i=start;iabs(p[max][start])) max=i; } return max; } void swapRow(double** p,int one,int other,int col){ double temp=0; for(int i=0;i

实验二迭代法初始值与收敛性 (3)

实验二:迭代法、初始值与收敛性 一:实验要求 考虑一个简单的代数方程 210,x x --= 针对上述方程,可以构造多种迭代法,如211111,1,n n n n n x x x x x +++=-=+ =记录各算法的迭代过程。 二:实验要求及实验结果 (1) 取定某个初始值,按如上迭代格式进行计算,它们的收敛性如何?重复选取不同放入初始值,反复实验。请读者自行设计 一种比较形象的记录方式(如何利用Matlab 的图形功能),分析三种迭代法的收敛性与初值的选取关系。 (2) 对三个迭代法中的某一个,取不同的初值进行迭代,结果如何?试分析对不同的初值是否有差异? 实验内容: ⅰ)对211n n x x +=-进行迭代运算,选取迭代次数n=20;分别选择初值-0.6, 1.6进行实验,并画出迭代结果的趋势图。 编写MATLAB 运算程序如下: %迭代法求解 %令x=x^2-1 clear n=30; x=-0.5; x1=x^2-1; for i=1:n x1=x1^2-1; xx(i)=x1; end m=linspace(0,29,n); plot(m,xx) title('x=-0.5') x=-0.6 x=1.6 如上图所示,选取初值分别为-0.6、1.6时,结果都是不收敛的。

分析:2()1n g x x =-,'()2g x x =,要想在某一邻域上'()21,[1,1]g x x x =,此时n x 相当于是在[1.65,]+∞范围内的初始值,迭代公式产生的序列收敛。所以初值的选取对数列的收敛性没有影响。 ⅲ)对1n x +=n=20;分别选择初值=-0.6,2.1进行实验,并画出迭代结果的趋势图。 编写MATLAB 运算程序如下: %迭代法求解 %令x=sqrt(1+x)

迭代法

题目:Newton-Raphson 迭代法 (1)计算原理 (2)编出计算机程序 (3)给出算例(任意题型) (1)计算原理: 牛顿-拉夫森(Newton-Raphson)迭代法也称为牛顿迭代法,它是数值分析中最重要的方法之一,它不仅适用于方程或方程组的求解,还常用于微分方程和积分方程求解。 用迭代法解非线性方程时,如何构造迭代函数是非常重要的,那么怎样构造的迭代函数才能保证迭代法收敛呢?牛顿迭代法就是常用的方法之一,其迭代格式的来源大概有以下几种方式: 1设()[]2,f x C a b ∈,对()f x 在点[]0,x a b ∈,作泰勒展开: 略去二次项,得到()f x 的线性近似式:()()()()000f x f x f x x x '≈+- 由此得到方程()0f x =的近似根(假定()00f x '≠),() () 000f x x x f x =-' 即可构造出迭代格式(假定()00f x '≠):() () 1k k k k f x x x f x +=- ' 这就是牛顿迭代公式,若得到的序列{}k x 收敛于α,则α就是非线性方程的根。 2 牛顿迭代法 牛顿切线法,这是由于()f x 的线性化近似函数()()()()000l x f x f x x x '≈+-是曲线()y f x =过点()()00,x f x 的切线而得名的,求()f x 的零点代之以求() l x !2))((''))((')()(2 0000x x f x x x f x f x f -+ -+= ξ

的零点,即切线与x 轴交点的横坐标,如左图所示,这就是牛顿切线法的几何解释。实际上,牛顿迭代法也可以从几何意义上推出。利用牛顿迭代公式,由 k x 得到1k x +,从几何图形上看,就是过点()(),k k x f x 作函数()f x 的切线k l ,切线k l 与x 轴的交点就是1k x +,所以有()() 1 k k k k f x f x x x +'=-,整理后也能得出牛顿迭 代公式: 3 要保证迭代法收敛,不管非线性方程()0f x =的形式如何,总可以构造: 作为方程求解的迭代函数。因为: 而且 在根附近越小,其局部收敛速度越快,故可令: 若0(即根不是0的重根),则由得: , 因此可令 ,则也可以得出迭代公式: 。 4 迭代法的基本思想是将方程改写成等价的迭代形式,但随之而来的问题却是迭代公式不一定收敛,或者收敛的速度较慢。运用前述加速技巧,对于简单迭代过程 ,其加速公式具有形式: ,其中 记,上面两式可以合并写成: 这种迭代公式称作简单的牛顿公式,其相应的迭代函数是: 。 需要注意的是,由于是的估计值,若取,则实际上便是的估计值。假设,则可以用代替上式中的, 就可得到牛顿法的迭代公式: 。 )(')(1k k k k x f x f x x - =+)()()(x f x k x x x -==?)0)((≠x k )(')()()('1)('x f x k x f x k x --=?) ('x ?α0)('=α?≠)('αf α=)(x f 0)('=α?)('1 )(ααf k = )('1 )(x f x k = )(')(1k k k k x f x f x x - =+0)(=x f )(x x ?=)(1n n n x f x x +=+θθ?--= +1)(1n n n x x x ) (111n n n x x x --+=++θθ )(1 n n x x ?=+1-=θL L x f x x n n n )(1- =+L x f x x )()(- =?L )('x ?)()(x f x x +=?)('x ?)('x f 0)('≠x f )('x f L )(')(1n n n n x f x f x x - =+

雅克比迭代法和高斯-赛德尔法解线性方程组(C++)

作业:① 分别用J 法和G-S 法求解下列方程,并讨论结果。 123122*********x x x -?????? ??? ?= ??? ? ??? ??????? #include using namespace std; //J 法解线性方程 int main(){ int m,n,i,j,times=0,mtimes; double s,sum,max; cout<<"请输入系数矩阵行数m 、列数n :"<>m>>n; if(m>A[i][j]; cout<<"请输入常数向量B :"<>B[i]; cout<<"请输入最大允许误差s:"<>s; cout<<"请输入最大迭代次数:"<>mtimes; cout<<"请输入一零级向量X:"<>X[i]; T[i]=X[i];//T[]存放上一次迭代结果 }

matlab Jacobi迭代法Gauss-seidel和SOR迭代

1.Jacobi迭代法 例1 用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。 解:编写jacobi迭代法的函数文件,保存为jacobi.m function [x,k]=jacobi(A,b,x0,eps,N) % 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数 % 输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ――――――― end if norm(x-x0,inf)

end x0=x; end 编写主程序如下 format long clear A=[8 -1 1;2 10 -1;1 1 -5]; b=[1 ;4; 3]; x0=[0.125; 0.4 ;-0.6 ]; % x0为初始列向量N为最大迭代次数err=1e-4; % err为误差容限 N=25; % N为最大迭代次数 [x,k]=jacobi(A,b,x0,err,N) 得到结果如下 x = 0.22492315625000 0.30561995000000 -0.49388680000000

k = 6 2.Gauss-seidel迭代法 例2 用Gauss-seidel迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。 解:编写Gauss-seidel迭代法的函数文件,保存为gaus.m function [x,k]=gaus(A,b,x0,eps,N) % 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数% 输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ―――――― end if norm(x-x0,inf)

实验五矩阵的LU分解法雅可比迭代

实验五矩阵的LU分解法,雅可比迭代 实 验 报 告 学院:计算机科学与软件学院班级:116班 姓名:薛捷星 学号:112547

一、目的与要求: 熟悉求解线性方程组的有关理论和方法; 会编制列主元消去法、LU 分解法、雅可比及高斯—塞德尔迭代法德程序; 通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。 二、 实验内容: 会编制列主元消去法、LU 分解法、雅可比及高斯—塞德尔迭代法德程序,进一步了解各种方法的优缺点。 三、 程序与实例 列主元高斯消去法 算法:将方程用增广矩阵[A ∣b ]=(ij a )1n (n )+?表示 1) 消元过程 对k=1,2,…,n-1 ①选主元,找{}n ,,1k ,k i k +∈使得 k ,i k a =ik a n i k max ≤≤ ②如果0a k ,i k =,则矩阵A 奇异,程序结束;否则执行③。 ③如果k i k ≠,则交换第k 行与第k i 行对应元素位置, j i kj k a a ? j=k,┅,n+1 ④消元,对i=k+1, ┅,n 计算 kk ik ik a a l /=

对j=l+1, ┅,n+1计算 kj ik ij ij a l a a -= 2) 回代过程 ①若0=nn a ,则矩阵A 奇异,程序结束;否则执行②。 ②nn n n n a a x /1,+=;对i=n-1, ┅,2,1,计算 ii n i j j ij n i i a x a a x /11,??? ? ? ?- =∑+=+ 程序与实例 例1 解方程组 ?? ? ??=++-=++-=++035 .3643x .5072x .1835x .2137.2623x .43712x 347x .1 1.183 3.555x 2.304x 0.101x 321321321 输出结果如下: X[0]=-0.398234 X[1]= 0.013795 X[2]= 0.335144 程序如下: #include #include main() { int i,j,p,o,l,q; double a[3][4]={{0.101,2.304,3.555,1.183},{-1.347,3.712,4.623,2.137},{-2.835,1.072,5.643,3.035}}; double x[3],z[4]; printf("列主元消去法\n"); for(j=0;j<2;j++) { for(i=j+1;i<3;i++) { if(fabs(a[j][j])

牛顿-拉夫逊迭代法原理及其实现

牛顿迭代法(简写)就是一种近似求解实数域与复数域求解方程的数学方法。那么这个方法是具体是什么原理呢? 牛顿迭代如何迭代? 直接看数学公式描述如何迭代不直观,先来看动图就很容易理解牛顿迭代法为什么叫迭代法以及怎样迭代的: 牛顿迭代法是原理是根据一个初始点在该点做切线,切线与X轴相交得出下一个迭代点的坐标,再在处做切线,依次类推,直到求得满足精度的近似解为止。 由前面描述知道,牛顿迭代法是用来近似求解方程的,这里有两个点需要说明:?为啥要近似求解?很多方程可能无法直接求取其解 ?迭代法非常适合计算机编程实现,实际上计算机编程对于牛顿迭代法广为应用来看看,数学上如何描述的? 其中为函数在处的一阶导数,也就是该点的切线。 来简单推一推上面公式的由来,直线函数方程为: 知道一个直线的一个坐标点以及斜率则该直线的方程就很容易可以得知:

那么该直线与轴的交点,就是y=0也即等式x 的解: 啥时候停止迭代呢? 1.计算出 2.给出一个初始假定根值x0,利用上面迭代式子进行迭代 3.计算绝对相对迭代近似误差 4.将绝对相对近似误差与预定的相对误差容限进行比较。如果,则迭 代步骤2,否则停止算法。另外,检查迭代次数是否已超过允许的最大迭代次数。如果是这样,则需要终止算法并退出。另一个终止条件是: 如何编码呢? 由于牛顿迭代法主要目的是解方程,当然也有可能用于某一个数学函数求极值,所以无法写出通用的代码,这里仅仅给出一个编代码的思路。相信掌握了思路,对于各种实际应用应该能很快的写出符合实际应用的代码。 假定一函数为 其波形图如下: 其一阶导数为:

那么对于该函数的根: 从图上大致可以知道有两个根,如果直接解方程,则很难求出其根,可以编个代码试试: #include #include #include /*假定待求根函数如下*/ #define F(x) (2*(x)*(x)-10*cos(x)+(x)-80) /*其一阶导数为*/ #define DF(x) (4*(x)+10*sin(x)+1) float newton_rooting(float x0,float precision,float min_deltax,int max_iterations) { float xn,xn1,fn,fn1,dfn; float deltax; int step = 0; xn = x0; xn1 = x0; do{ xn = xn1; fn = F(xn); dfn = DF(xn); /*判0*/ if( fabs(dfn) <1e-6 ) { if( fabs(fn)>precision ) return NAN; else return fn; } xn1 = xn - fn/dfn; fn1 = F(xn1); deltax = fabs(xn1-xn); step++; if( step>max_iterations ) { if( fabs(fn1)precision || deltax>min_deltax );

第二章 迭代法得一般原理

第二章迭代法得一般原理 非线性方程组无论从理论上还就是计算方法上,都比线性方程组复杂得多。一般得非线性方程组很难求出解析解,往往只能求出其数值解,且往往只能借助于迭代法。本章我们将讨论迭代法得一般原理、迭代法得一般构造及迭代收敛速度得衡量标准。 2-1 迭代法与不动点定理 设,考虑方程 (2-1) 若存在,使,则称为方程(2-1) 得解。 用迭代法求解(2-1) ,先将(2-1)化为等价得方程 (2-2) 这里映象。 方程(2-2)得解(即)称为映象g得不动点。因此用迭代法解方程(2-1),就就是求(2-2)中映象g得不动点。这样以及g就是否存在不动点自然就就是我们关心得问题。 定理2-1若为有界闭集上得严格非膨胀映象,,则g在内有唯一不动点。 证唯一性设g在内至少有两个不动点,,则 因,所以由上式推得。唯一性得证。 记,由g及泛数得连续性可知连续。因为有界闭集,故?在上有最小值。设为最小点,即 则为g得不动点。因为若不然,则有,再由g严格非膨胀,可得 这与为?得最小点相矛盾,故为g得不动点。 注定理中得有界闭性、g得压缩性与g映入自身,此3个条件缺一不可。例如,在上严格非膨胀,但它在中却没有不动点。 下面我们介绍在应用上非常广泛得不动点定理。 定理2-2 (Brouwer不动点定理)设在有解闭凸集上连续,且,则g在至少有一个不动点。 本定理在一维情形下叙述为: 则f在中至少有一个不动点。几何解释见图2-1。

2-2 迭代格式得构造 前一节我们谈到,用迭代法求解方程(2-1),就是先将这个方程化为等价得方程(2-2),然后求映象g 得不动点,通常(也就是最简单得情形)构造如下迭代序列: , (2-3) 我们希望这个迭代序列收敛到g 得不动点,亦即方程得解。如果g 就是压缩得,可望迭代序列收敛。图2-2展示了一维迭代收敛得一种情形。 对于(2-3) f 与。如果 g 不依赖于迭代步k 只依赖于,k ,则迭代形式可表示为 (2-4) 并称之为,这时得迭代为多步迭代。例如,则迭代可写为 (2-5) 称这种迭代为m 步迭代。类似地有m 步非定常迭代。 通常称g 或为迭代函数。用不同得方法构造得迭代函数可得到不同得得到法。设,如果一个迭代法得到得序列则称得到序列就是适定得,适定性就是迭代法得起码要求。 若就是方程(2-1)得解,且序列满足 则称迭代序列收敛于。 定义2-1 设,就是方程得一个解。若存在得一个邻域,使对任何初始值(对于m 步迭代法,初值为 ),迭代序列总就是适定得且收敛于,则称就是迭代序列得吸引点。 不少迭代法都就是设法使迭代函数g 就是压缩得,这时迭代序列得吸引点恰就是g 得不动点。有时候也可使g 具有某种单调性,构成单调单调法。 2-3 迭代法得收敛性与收敛阶 前面谈到,一个迭代法,当其产生得迭代序列在适定与收敛时才有意义。单步迭代格式(2-3)在实际中被采用得最多,这里,我们不加证明地给出三个与(2-3)格式有关得收敛性定理。 定理2-4 设就是方程得解,。若存在一个开球S = 与常数,使得对一切,有 x 021(x ) 图2-2 迭代序列收敛

相关主题
文本预览
相关文档 最新文档