Jacobi 迭代法与Gauss-Seidel迭代法算法比较

Jacobi 迭代法与Gauss-Seidel迭代法算法比较
Jacobi 迭代法与Gauss-Seidel迭代法算法比较

Jacobi 迭代法与Gauss-Seidel迭代

法算法比较

目录

1 引言 (1)

1.1Jacobi迭代法 (2)

1.2Gauss-Seidel迭代法 (2)

1.3逐次超松弛(SOR)迭代法 (3)

2算法分析 (3)

3 结论 (5)

4 附录程序 (5)

参考文献 (8)

Jacobi 迭代法与Gauss-Seidel 迭代法比较

1 引言

解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。

迭代法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。因此迭代法存在收敛性与精度控制的问题。

迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。设n 元线性微分方程组

b Ax = (1)

的系数矩阵A 非奇异,右端向量0≠b ,因而方程组有唯一的非零解向量。而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi 迭代法、Gauss —Seidel 迭代法,逐次超松弛迭代法(SOR 法),这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 分解成两个矩阵N 和P 的差,即P N A -=;其中N 为可逆矩阵,线性方程组(1)化为:

b x P N =-)( b Px Nx +=

b N Px N x 11--+=

可得到迭代方法的一般公式:

d Gx x

k k +=+)

)

1(( (2)

其中:P N G 1

-=,b N d 1

-=,对任取一向量)

0(x 作为方程组的初始近似解,按递推公式产

生一个向量序列)

1(x ,)

2(x ,...,)

k x

(,...,当k 足够大时,此序列就可以作为线性方程组的

近似解。

一阶定常迭代法收敛的充分必要条件是: 迭代矩阵G 的谱半径小于1,即1<)

(G ρ;又因为对于任何矩阵范数恒有≤)(G ρ‖G ‖,故又可得到收敛的一个充分条件为:‖G ‖< 1。

2 算法分析

例1 用雅可比迭代法求解下列方程组

???

??=+--=-+-=--2

45382102

7210321321321.x x x .x x x .x x x

解 将方程组按雅可比方法写成

??

??

???++=++=++=8402020830201072

020*******

2321.x .x .x .x .x .x .x .x .x

取初始值

()()()

()()()T T ,,,x ,x ,x x 0000302010==按迭代公式

()()()()()

()()()()??

????++=++=++=+++840202083020107202010211331

123211.x .x .x .x .x .x .x .x .x k k k k k k k k k 例2 用高斯——塞德尔迭代法求解例1.

解 取初始值

()()()()

()()T

T

,,,x ,x ,x x 0000302010==,按迭代公式

()()

()()()()()(

)()

?????++=++=++=++++++840202083020107202010121113

311123211.x .x .x .x .x .x .x .x .x k k k k k k k k k

进行迭代,其计算结果如下表2

3 结论

使用Gauss-Seidel迭代法迭代法,7次就可以求出方程的解,收敛速度要比Jacobi迭代法收敛快(达到同样的精度所需迭代次数少);但是这个结论,在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯—塞德尔迭代法却是发散的.

4 附录程序

/* 求解线性方程组--Gauss-Seidel迭代法*/

#include

#include

using namespace std;

/* 二维数组动态分配模板*/

template

T** Allocation2D(int m, int n)

{

T **a;

a = new T*[m];

for (int i=0; i

{

a[i] = new T[n];

}

return a;

}

/* 一维数组动态分配模板*/

template

T* Allocation1D(int n)

{

T *a;

a = new T[n];

return a;

}

/* 求矩阵的一范数*/

float matrix_category(float* x, int n)

{

float temp = 0;

for(int i=0; i

{

temp = temp + fabs(x[i]);

}

return temp;

}

int main()

{

const int MAX = 1000; // 最大迭代次数

int i,j,k; // 循环变量

int n; // 矩阵阶数

float** a; // 增广矩阵

float* x_0; // 初始向量

float* x_k; // 迭代向量

float precision; // 精度

cout<<"输入精度e:";

cin>>precision;

/* 动态生成增广矩阵*/

cout<>n;

a = Allocation2D(n, n+1);

/* 输入增广矩阵的各值*/

cout<

{

for(j=0; j

{

cin>>a[i][j];

}

}

/* 生成并初始化初始向量*/

x_0 = Allocation1D(n);

cout<

for(i=0; i

{

cin>>x_0[i];

}

/* 生成迭代向量*/

x_k = Allocation1D(n);

float temp;

/* 迭代过程*/

for(k=0; k

{

for(i=0; i

{

temp = 0;

for(j=0; j

{

temp = temp + a[i][j] * x_k[j];

}

x_k[i] = a[i][n] - temp;

temp = 0;

for(j=i+1; j

{

temp = temp + a[i][j] * x_0[j];

}

x_k[i] = (x_k[i] - temp) / a[i][i];

}

/* 求两解向量的差的范数*/

for(i=0; i

{

x_0[i] = x_k[i] - x_0[i];

}

if(matrix_category(x_0,n) < precision)

{

break;

}

else

{

for(i=0; i

{

x_0[i] = x_k[i];

}

}

}

/* 输出过程*/

if(MAX == k)

{

cout<<"迭代不收敛\n";

}

cout<<"迭代次数为:"<

cout<<"解向量为:\n";

for(i=0; i

{

cout<<"x"<

}

return 0;

}

参考文献

[1]颜庆津. 数值分析[M]. 北京:航空航天大学出版社,1999.

[2]黎建玲,简金宝,李群宏.数值分析与实验[M].北京:科学出版社,2012.

[3]宋叶志.MATLAB数值分析与应用[M].北京:机械工业出版社,2013.

雅可比迭代法

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 称为雅可比方法迭代矩阵。

牛顿迭代法文献综述

“牛顿迭代法”最新进展文献综述牛顿法是一种重要的迭代法,它是逐步线性化的方法的典型代表。牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。 介绍一下牛顿迭代法研究的前沿进展,1992年南京邮电学院基础课部的夏又生写的一篇题名一类代数方程组反问题的牛顿迭代法,对一类代数方程组反问题提出了一个可行的迭代解法。从算法上看,它是一种解正问题—迭代—解正问题迭代改善的求解过程。湖南师范大学的吴专保;徐大发表的题名堆浸工艺中浸润面的非线性问题牛顿迭代方法,为了研究堆浸工艺的机理,用牛顿迭代公式寻求浸润面的非线性方程的数值解,经过14次迭代的误差达到了,说明此算法收敛有效。浙江大学电机系的林友仰发表的牛顿迭代法在非线性电磁场解算中的限制对非线性电磁场解算中的限制做了分析,求解非线性方程组时迭代法是不可避免的。牛顿—拉斐森迭代法由于它的收敛速度快常被优先考虑。应用这个方法的主要问题是求雅可比矩阵。因为雅可比矩阵元素的计算非常费时。然而,本文要说明的是当利用以三角形为单元的有限元法求解非线性方程组时,应用牛顿法其雅可比矩阵容易求得,并且它保持了原系数的对称性和稀疏性,因而节省了时间。与此相反,若在差分法中应用牛顿迭代,并且按习惯用矩形网格进行剖分,则雅可比阵的计算很费时,而且不再保持原有对称性,这就使得存贮量和计算时间大为增加。南株洲工学院信息与计算科学系的吕勇;刘兴国发表的题名为牛顿迭代法加速收敛的一种修正格式,主要内容牛顿迭代法是求解非线性方程的一种重要的数值计算方法,在通常情况下,它具有至少平方收敛。本文利用文献[4]所建立的迭代格式xn+1=xn-αf(xfn)(x+n)f′(xn),对迭代格式中的参数α的讨论,实现了牛顿迭代法加速收敛的一种修正格式。

牛顿迭代法

牛顿迭代法 李保洋 数学科学学院信息与计算科学学号:060424067 指导老师:苏孟龙 摘要:牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,即牛顿迭代法.迭代法是一种不断用变量的旧值递推新值的过程.跟迭代法相对应的是直接法或者称为一次解法,即一次性解决问题.迭代法又分为精确迭代和近似迭代.“牛顿迭代法”属于近似迭代法,本文主要讨论的是牛顿迭代法,方法本身的发现和演变和修正过程,避免二阶导数计算的Newton迭代法的一个改进,并与中国古代的算法,即盈不足术,与牛顿迭代算法的比较. 关键词:Newton迭代算法;近似求解;收敛阶;数值试验;中国古代数学; 九章算术;Duffing方程;非线性方程;收敛速度;渐进性 0 引言: 迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法或者称为一次解法,即一次性解决问题.迭代法又分为精确迭代和近似迭代.“二分法”和“牛顿迭代法”属于近似迭代法. 迭代算法是用计算机解决问题的一种基本方法.它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值.具体使用迭代法求根时应注意以下两种可能发生的情况: (1)如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制. (2)方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败. 所以利用迭代算法解决问题,需要做好以下三个方面的工作: 1、确定迭代变量.在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量. 2、建立迭代关系式.所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系).迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成. 3、对迭代过程进行控制,在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题.不能让迭代过程无休止地重复执行下去.迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定.对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件. 1牛顿迭代法:

Jacobi迭代法

第一题 算法解释 Jacobi迭代法 方程组Ax=b,其中A∈R nxn,b∈R n,且A为非奇异,则A可以写成A=D-L-U。 其中,D=diag[a11, a22,…, a nn],而-L,-U分别为A的上三角和下三角部分(不包括对角线元素) 则x=D-1(L+U)x+D-1b,由此可以构造迭代法:x(k+1)=Bx(k)+f 其中:B= D-1(L+U)x=I-D-1A,f=D-1b。 M文件 function[x,n]=jacobi(A,b,x0,eps,varargin) %采用Jacobi迭代法求线性方程组Ax=b的解 %线性方程组的系数矩阵:A %线性方程组中的常数向量:b %迭代初始向量:x0 %解的精度控制:eps %迭代步数控制:varargin %线性方程组的解:x %求出所需精度的解实际的迭代步数:n if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A)); %求A的对角矩阵 L=-tril(A,-1); %求A的下三角阵 U=-triu(A,1); %求A的上三角阵 B=D\(L+U); f=D\b; x=B*x0+f; n=1; %迭代次数 %迭代过程 while norm(x-x0)>=eps x0=x; x=B*x0+f; n=n+1; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!');

return; end end x n 例题 Jacobi迭代法求线性方程组实例。用Jacobi迭代法求解以下线性方程组10x1-x2=9 -x1+10x2+-2x3=7 -x2+10x3=6 在matlab命令窗口输入如下程序: >> a=[10 -1 0;-1 10 -2;0 -2 10]; >> b=[9;7;6]; >> jacobi(a,b,[0;0;0]) y = 0.9958 0.9579 0.7916 输出的迭代次数为: n = 11 ans = 0.9958 0.9579 0.7916

ICA使用牛顿迭代法对FastICA算法经行改进

ICA用牛顿迭代法改进的FastICA算法 ICA算法原理: 独立分量分析(ICA)的过程如下图所示:在信源()st中各分量相互独立的假设下,由观察xt通过结婚系统B把他们分离开来,使输出yt逼近st。 图1-ICA的一般过程 ICA算法的研究可分为基于信息论准则的迭代估计方法和基于统计学的代数方法两大类,从原理上来说,它们都是利用了源信号的独立性和非高斯性。基于信息论的方法研究中,各国学者从最大熵、最小互信息、最大似然和负熵最大化等角度提出了一系列估计算法。如FastICA算法, Infomax算法,最大似然估计算法等。基于统计学的方法主要有二阶累积量、四阶累积量等高阶累积量方法。本实验主要讨论FastICA算法。 1. 数据的预处理 一般情况下,所获得的数据都具有相关性,所以通常都要求对数据进行初步的白化或球化处理,因为白化处理可去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程,而且,通常情况下,数据进行白化处理与不对数据进行白化处理相比,算法的收敛性较好。 若一零均值的随机向量 满足 , 其中:I为单位矩阵,我们称这个向量为白化向量。白化的本质在于去相关,这同主分量分析的目标是一样的。在ICA中,对于为零均值的独立源信号 , 有: , 且协方差矩阵是单位阵cov( S ) = I,因此,源信号 S( t )是白色的。对观测信号X( t ),我们应该寻找一个线性变换,使X( t )投影到新的子空间后变成白化向量,即:

其中,W0为白化矩阵,Z为白化向量。 利用主分量分析,我们通过计算样本向量得到一个变换 其中U和 分别代表协方差矩阵XC的特征向量矩阵和特征值矩阵。可以证明,线性变换W0满足白化变换的要求。通过正交变换,可以保证 因此,协方差矩阵: 再将 代入 且令 有 由于线性变换A~连接的是两个白色随机矢量Z( t )和S( t ),可以得出A~ 一定是一个正交变换。如果把上式中的Z( t )看作新的观测信号,那么可以说,白化使原来的混合矩阵A简化成一个新的正交矩阵A~。证明也是简单的: 其实正交变换相当于对多维矢量所在的坐标系进行一个旋转。 在多维情况下,混合矩阵A是N*N 的,白化后新的混合矩阵A~ 由于是正交矩阵,其自由度降为N*(N-1)/2,所以说白化使得ICA问题的工作量几乎减少了一半。 白化这种常规的方法作为ICA的预处理可以有效地降低问题的复杂度,而且算法简单,用传统的PCA就可完成。用PCA对观测信号进行白化的预处理使得原来所求的解混合矩阵退化成一个正交阵,减少了ICA的工作量。此外,PCA本身具有降维功能,当观测信号的个数大于源信号个数时,经过白化可以自动将观测信号数目降到与源信号维数相同。

§2.3牛顿Newton法及其变形.doc

2.3 牛顿(Newton )法及其变形 一、Newton 迭代方法 牛顿迭代法计算公式的推导过程 设*x 是()0f x =的根,()f x 在*x 的邻域内具有二阶连续导数,在*x 的邻域内取一点0x ,使0()0f x '≠,则()f x 在*x 的邻域内连续,将它在0x 点二阶Taylor 展开得 2 0000000()()()()()()2! ()()() f f x f x f x x x x x f x f x x x ξ'''=+-+-'≈+- 又()0f x =,则有 000()()()0f x f x x x '+-≈ 故()0f x =的近似解000()()f x x x f x ≈-',记0100()() f x x x f x =-' 类似,在点1x 处Taylor 展开,可得: 111()() f x x x f x ≈-',记1211()()f x x x f x =-' 依次往下做,可得一般的迭代格式:

上述迭代格式称为求()0 f x=的解的牛顿迭代法。 几何意义 在点 00 (,()) x f x处作() f x的切线,交x轴于一点,求该点的横坐标。此切线方程为 000 ()()() y f x f x x x ' -=-, 当0 y=时,得0 () () f x x x f x =- ' ,正是 1 x的值。 类似地,在点(,()) k k x f x作函数() f x的切线,交x轴于一点,切线方程为 ()()() k k k y f x f x x x ' -=-, 当0 y=时,得 () () k k k f x x x f x =- ' ,正是 1 k x + 的值。 所以,牛顿迭代法又称为切线求根法。 例6用牛顿迭代法求方程x x e- =在0.5 x=附近的根。解.将原方程化为()0 x f x x e- =-=,则牛顿迭代格式为

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

实验五 矩阵的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 k j 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

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组

作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。 可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1) = (2) = Jacobi迭代法: 流程图 开 始 判断b中的最大值 有没有比误差大 给x赋初值 进行迭代 求出x,弱到100次还没到,警告不收 结束

程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e for i=1:n d=A(i,i); if abs(d)100 warning('不收敛'); end end x=x0;

程序结果(1)

(2)

Gauss-Seidel迭代法: 程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3]; A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵A不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵U=zeros(n); D=zeros(n); G=zeros(n);%G=-inv(D+L)*U d=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化L和U for j=1:n if ij U(i,j)=A(i,j); end end end for i=1:n%初始化D D(i,i)=A(i,i); end G=-inv(D+L)*U;%初始化G d=(D+L)\b;%初始化d %迭代开始 x1=x; x2=G*x+d; while norm(x2-x1,inf)>10^(-6)

数值计算(二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法))

本科生实验报告 实验课程数值计算方法 学院名称信息科学与技术学院 专业名称计算机科学与技术 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一六年五月二〇一六年五月

实验一非线性方程求根 1.1问题描述 实验目的:掌握非线性方程求根的基本步骤及方法,。 实验内容:试分别用二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法),求x5-3x3+x-1= 0 在区间[-8,8]上的全部实根,误差限为10-6。 要求:讨论求解的全过程,对所用算法的局部收敛性,优缺点等作分析及比较, 第2章算法思想 2.1二分法 思想:在函数的单调有根区间内,将有根区间不断的二分,寻找方程的解。 步骤: 1.取中点mid=(x0+x1)/2 2.若f(mid)=0,则mid为方程的根,否则比较与两端的符号,若与f(x0) 异号,则根在[x0,mid]之间,否则在[mid,x1]之间。 3并重复上述步骤,直达达到精度要求,则mid为方程的近似解。

2.2 简单迭代法 思想:迭代法是一种逐次逼近的方法,它是固定公式反复校正跟的近似值,使之逐步精确,最后得到精度要求的结果。 步骤:1.构造迭代公式f(x),迭代公式必须是收敛的。 2.计算x1,x1=f(x0). 3.判断|x1-x0|是否满足精度要求,如不满足则重复上述步骤。 4.输出x1,即为方程的近似解。 f为迭代函数

2.3 Newton迭代法 思想:设r 是的根,选取作为r的初始近似值,过点 做曲线 的切线L,L 的方程为,求出L与x轴交点的 横坐标,称x 1 为r的一次近似值。过点做曲线 的切线,并求该切线与x 轴交点的横坐标,称为r的二次近似值。重复以上过程,得r 的近似值序列,其中,称为r 的 次近似值 步骤:1.计算原函数的导数f’(x);构造牛顿迭代公式 2.计算 ,若f’(x0)=0,退出计算,否则继续向下迭代。 3.若|x1-x0|满足精度要求,x1即为方程的近似解。

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])

else x0=x1 end if end if end do end function f(x) implicit none real::f real::x f=x*x*x-x-1 return end function function y(x) implicit none real::y real::x y=3*x*x-1 return end function 五、求解结果 3 1.324718 4 1.324718 5 1.324718 6 1.324718 7 1.324718 8 1.324718 9 1.324718 六、算法评价及讨论 1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时 需要迭代6次,而输入区间左端值为1.5时,却只要4次。初

线性方程组的迭代法应用及牛顿迭代法的改进

线性方程组的迭代法应用及牛顿迭代法的改进 摘要: 迭代解法就是通过逐次迭代逼近来得到近似解的方法。由于从不同 的问题而导出的线性代数方程组的系数矩阵不同,因此对于大型稀疏矩阵所对应线性代数方程组,用迭代法求解。本文论述了Jacobi 法,Gauss-Seidel 法,逐次超松弛法这三种迭代法,并在此基础上对牛顿型的方法进行了改进,从而使算法更为精确方便。 关键词:线性方程组,牛顿迭代法,Jacobi 法,Gauss-Seidel 法,逐次超松弛 法 1.线性方程组迭代法 1.1线性方程组的迭代解法的基本思想 迭代法求解基本思想:从某一初始向量X (0)=[x 1(0) ,x 2(0) ,……………x n (0) ]出发,按某种迭代规则,不断地对前一次近似值进行修改,形成近似解的向量{X (k)}。当近似解X (k) =[x 1(k) ,x 2(k) ,……………x n (k) ]收敛于方程组的精确解向量X* =[x 1*,x 2*,……………x n *]时,满足给定精度要求的近似解向量X (k)可作为X*的数值解。 1.2 线性方程组的迭代法主要研究的三个问题 (1) 如何构造迭代公式 (2) 向量数列{X (k)}的收敛条件 (3) 迭代的结束和误差估计 解线性方程组的迭代解法主要有简单迭代法、 Gauss-Seidel 法和SOR 法。简单迭代法又称同时代换法或Jacobi 法,是最简单的解线性方程组的迭代解法也是其他解法的基础。 1.3Jacobi 迭代法 设方程组点系数矩阵n n j A ai R ???=∈??满足条件0ii a ≠,i=0,1,2, …n 。把A 分解为 A=D+L+U

牛顿迭代法求平方根

牛顿迭代法求平方根 求n的平方根,先假设一猜测值X0 = 1,然后根据以下公式求出X1,再将X1代入公式右边,继续求出X2…通过有效次迭代后即可求出n的平方根,X k+1 (迭代公式) 简单推导 假设f(x)是关于X的函数: 求出f(x)的一阶导,即斜率: 简化等式得到: 然后利用得到的最终式进行迭代运算直至求到一个比较精确的满意值,为什么可以用迭代法呢理由是中值定理(Intermediate Value Theorem):

如果f函数在闭区间[a,b]内连续,必存在一点x使得f(x) = c,c是函数f在闭区间[a,b]内的一点 我们先猜测一X初始值,例如1,当然地球人都知道除了1本身之外任何数的平方根都不会是1。然后代入初始值,通过迭代运算不断推进,逐步靠近精确值,直到得到我们主观认为比较满意的值为止。例如要求768的平方根,因为252 = 625,而302 = 900,我们可先代入一猜测值26,然后迭代运算,得到较精确值:。 回到我们最开始的那个”莫名其妙”的公式,我们要求的是N的平方根,令x2 = n,假设一关于X的函数f(x)为: f(X) = X2 - n 求f(X)的一阶导为: f'(X) = 2X 代入前面求到的最终式中: X k+1 = X k - (X k2 - n)/2X k 化简即得到我们最初提到的那个求平方根的神奇公式了: 用泰勒公式推导 我之前介绍过在The Art and Science of C一书中有用到,其实牛顿迭代法也可以看作是泰勒公式(Taylor Series)的简化,先回顾下泰勒公式:

仅保留等式右边前两项: 令f(X0+ε) = 0,得到: 再令X1 = X0+ ε0,得到ε1…依此类推可知: 转化为: 引申 从推导来看,其实牛顿迭代法不仅可以用来求平方根,还可以求立方根,甚至更复杂的运算。 同样,我们还可以利用pascal语言来实现下那个最简单的求平方根的公式(尽管我们可以直接用sqrt()完成) program asd (input,output); var a,x,n,i:real; begin writeln('Please input a!');

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

实验报告一:实验题目 一、 实验目的 掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。 二、 实验内容 1、编写二分法、牛顿迭代法程序,并使用这两个程序计算 02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 4 10- ,比较两种方法收敛速度。 2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。 3、由中子迁移理论,燃料棒的临界长度为下面方程的根cot x =(x 2?1)/2x ,用牛顿迭代法求这个方程的最小正根。 4、用牛顿法求方程f (x )=x 3?11x 2+32x ?28=0的根,精确至8位有效数字。比较牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。 三、 实验程序 第1题: 02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。 画图函数: function Test1() % f(x) 示意图, f(x) = x + exp(x) - 2; f(x) = 0 r = 0:0.01:1; y = r + exp(r) - 2 plot(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>0 return; end for k=1:100 c=(a+b)/2; yc= c + exp(c) - 2; if abs(yc)<=delta a=c; b=c; elseif yb*yc>0 b=c; yb=yc; else a=c; ya=yc; end if abs(b-a)

雅可比迭代实验报告

雅可比迭代法求解线性方程组的实验报告 一、实验题目 分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组: 使得误差不超过 0.00001。 二、实验引言 1.实验目的 ①掌握用迭代法求解线性方程组的基本思想和步骤,熟悉计算机fortran 语言; ②了解雅可比迭代法在求解方程组过程中的优缺点。 2.实验意义 雅克比迭代法就是众多迭代法中比较早且较简单的一种,求解方便实用。 三、算法设计 1.雅可比迭代法原理: 设有线性方程组Ax=b 满足0≠ii a , 将方程组变形为: x=Bx+f, 则雅可比 (Jacobi)迭代法是指f Bx X k k +=+)1(,即 由初始解逐步迭代即可得到方程组的解。 算法步骤如下: ?????=+--=-+-=--2.453.82102.7210321 321321x x x x x x x x x

步骤1.给定初始值)0()0(2)0(1,,,n x x x ?,精度e,最大容许迭代次数M ,令k=1。 步骤2.对i=1,2,…,n 依次计算 )0()1()0()1(11| |) n ,2,1,0(/)(i i i i i ii ii j n i j j ij j x x x x e i a a x a b x →-=?=≠-=∑≠=, 步骤3.求出}{max 1i n i e e ≤≤=,若ε

四、程序设计program jacobi implicit none integer::i,j integer::k save k real,parameter::e=0.001 integer,parameter::n=3 real::x(n),y(n),b(n)

牛顿迭代法收敛定理

关于牛顿迭代法的课程设计实验指导 非线性方程(或方程组)问题可以描述为求 x 使得f (x ) = 0。在求解非线性方程的方法中,牛顿迭代法是求非线性方程(非线性方程组)数值解的一种重要的方法。牛顿是微积分创立者之一,微积分理论本质上是立足于对世界的这种认识:很多物理规律在微观上是线性的。近几百年来,这种局部线性化方法取得了辉煌成功,大到行星轨道计算,小到机械部件设计。牛顿迭代法正是将局部线性化的方法用于求解方程。 一、牛顿迭代法及其收敛速度 牛顿迭代法又称为牛顿-拉夫逊方法(Newton-Raphson method ),是一种在实数域和复数域上通过迭代计算求出非线性方程的数值解方法。方法的基本思路是利用一个根的猜测值x 0做初始近似值,使用函数f (x )在x 0处的泰勒级数展式的前两项做为函数f (x )的近似表达式。由于该表达式是一个线性函数,通过线性表达式替代方程中的求得近似解x 1。即将方程f (x ) = 0在x 0处局部线性化计算出近似解x 1,重复这一过程,将方程f (x ) = 0在x 1处局部线性化计算出x 2,求得近似解x 2,……。详细叙述如下:假设方程的解x *在x 0附近(x 0是方程解x *的近似),函数f (x )在点x 0处的局部线化表达式为 )()()()(000x f x x x f x f '-+≈ 由此得一次方程 0)()()(000='-+x f x x x f 求解,得 ) ()(0001x f x f x x '-= 如图1所示,x 1比x 0更接近于x *。该方法的几何意义是:用曲线上某点(x 0,y 0)的切线代替曲线,以该切线与x 轴的交点(x 1,0)作为曲线与x 轴的交点(x *,0)的近似(所以牛顿迭代法又称为切线法)。设x n 是方程解x *的近似,迭代格式 ) ()(1n n n n x f x f x x '-=+ ( n = 0,1,2,……) 就是著名的牛顿迭代公式,通过迭代计算实现逐次逼近方程的解。牛顿迭代法的最大优点是收敛速度快,具有二阶收敛。以著名的平方根算法为例,说明二阶收敛速度的意义。 例1.已知4.12≈,求2等价于求方程f (x ) = x 2 – 2 = 0的解。由于x x f 2)(='。 应用牛顿迭代法,得迭代计算格式 )/2(2 11n n n x x x +=+,(n = 0,1,2,……) 取x 0= 1.4为初值,迭代计算3次的数据列表如下 图1 牛顿迭代法示意图

牛顿迭代法的一种改进方法

第30卷第5期 佛山科学技术学院学报(自然科学版) Vol.30No.5  2012年9月 Jo ur nal of Fo shan University(Natural Science Edition)Sep.2012文章编号:1008-0171(2012)05-0001-03 牛顿迭代法的一种改进方法 陈玉骥 (佛山科学技术学院环建学院,广东佛山528000) 摘要:牛顿迭代法是求解非线性方程的一种常用方法,该法对初值要求较高,只具有局部收敛性。在牛顿迭代法的基础上,通过调整非线性方程对应曲线切线的斜率,从而保证在取任意初值时,迭代均可收敛,有效改善了牛顿迭代法对初值的苛刻要求。 关键词:牛顿迭代法;非线性方程;初值;斜率 中图分类号:O242.23 文献标志码:A 工程上,不少实际问题的数学模型都涉及到非线性方程f(x)=0的求解。由于工程问题对应的方程f(x)=0大多不存在求根公式,因此确定精确解十分困难。故近似解的计算成为人们关心的主要问题。目前,人们已提出了不少求解非线性方程f(x)=0近似解的方法[1-8],其中,牛顿迭代法是最基本的方法之一。由于牛顿迭代法在方程的单根附近具有平方收敛速度,而且还可以求解方程的重根和复根,故该法得到了广泛应用。但牛顿迭代法对初值的要求较苛刻,只有适当选取初值,才能保证其收敛性。 为保证牛顿迭代法局部收敛,必须对f(x)和初值附加如下条件[9]: (1)f(x)在区间[a,b]上二阶可导; (2)f(a)f(b)<0; (3)f′(x)≠0; (4)f″(x)在区间[a,b]上不变号; (5)初值x0∈[a,b]应使f″(x0)f(x0)>0。 其中,条件(1)、(2)保证了方程f(x)=0根的存在性;条件(3)表示函数单调变化,则方程的根惟一;条件(4)表示函数f(x)的图形凸凹向不变;条件(5)是对初值的要求。 只要满足以上条件,就可保证牛顿迭代法的收敛性。但当表达式f(x)很复杂时,确定f(x)导数的计算量很大,且求出f″(x)的表达式非常复杂,要满足条件(3)、(4)比较困难。另外,还有不少方程不完全符合上述条件,无法按以上要求确定初值,迭代过程很难确保收敛性。 为了扩大牛顿迭代法的适用性,本文提出一种牛顿迭代法的改进方法,可以有效避免牛顿迭代法对初值选取范围的苛刻要求。其基本思想是,通过不断增加非线性方程对应曲线切线的斜率,达到迭代收敛的目的。所以,笔者将该法称为“改变斜率法”。 1 改变斜率法 在定义域内取任一初值x0∈[a,b],按牛顿迭代法的公式进行计算,得 收稿日期:2012-03-13 基金项目:国家自然科学基金资助项目(50978058);广东省自然科学基金资助项目(S2011010005037) 作者简介:陈玉骥(1962-),男,海南文昌人,佛山科学技术学院教授,博士。

相关文档
最新文档