Jacobi迭代法与Gauss-Seidel迭代法

之前我在博客里介绍过牛顿-拉弗逊迭代法,对数据挖掘技术熟悉的同学应该还知道有梯度下降法(其实也是一种迭代算法)。今天刚好有朋友和我讨论泊松图像融合算法,我说我过去文章里给出的是最原始、最直观的实现算法。对于理解泊松融合的原理比较有帮助,但是效率可能并不理想。印象中,泊松融合是有一个以矩阵为基础的快速算法的。但是过去我浅尝辄止了,也没深究,今天刚好再提到,小看了一下,似乎涉及高斯-塞德尔迭代法。好吧,博主君暂且把知道的这部分内容做个介绍吧。特别说明:以下内容主要取材自《数值方法(MATLAB版)(第四版)》马修斯等著,电子工业出版社2010年出版发行。

一、雅各比迭代法

考虑如下方程组:

4x?y+z=74x?8y+z=?21?2x+y+5z=15

上述方程可表示成如下形式:

x=7+y?z4y=21+4x+z8z=15+2x?y5

这样就提出了下列雅可比迭代过程:

xk+1yk+1zk+1=7+yk+zk4=21+4xk+zk8=15+2xk?yk5(3)

如果从P0=(x0,y0,z0)=(1,2,2)开始,则上式中的迭代将收敛到解(2,4,3)。

将x0=1,y0=2和z0=2代入上式中每个方程的右边,即可得到如下新值:

x1=7+2?24=1.75y1=21+4+28=3.375z1=15+2?25=3.00

新的点P1=(1.75,3.375,3.00)比P1更接近(2,4,3)。使用迭代过程(3)生成点的序列{P0}将收敛到解(2,4,3)。

这个过程称为雅可比迭代,可用来求解某些类型的线性方程组。从上表中可以看出,经过19步选代,选代过程收敛到一个精度为9 位有效数字的近似值(2.00000000, 4.00000000, 3.00000000)。但有时雅可比迭代法是无效的。通过下面的例子可以看出,重新排列初始线性方程组后,应用雅可比迭代法可能会产生一个发散的点的序列。

设重新排列的线性方程组如下:

?2x+y+5z=154x?8y+z=?214x?y+z=7

这些方程可以表示为如下形式:

x=?15+y?5z2y=21+4x+z8z=7?4x+y5

这可以用如下雅可比迭代过程求解:

xk+1yk+1zk+1=?15+yk+5zk2=21+4xk+zk8=7?4xk+yk

如果从P0=(x0,y0,z0)=(1,2,2)开始,则上式中的迭代将对解(2,4,3)发散。将x0=1,y0=2和z0=2带入上式中每个方程的右边,即可得到新值x1,y1和z1:

x1=?15+2+102=?1.5y1=21+4+28=3.375z1=7?4+2=5.00

新的点P1=(?1.5,3.375,5.00)比P0更远地偏离(2,4,3)。使用上述迭代过程生成点的序列是发散的。

二、高斯-塞德尔迭代法

有时候通过其他方面可以加快迭代的收敛速度。观察由雅可比迭代过程(3)产生的三个序列{xk},{yk}和{zk},它们分别收敛到2,4和3。由于xk+1被认为是比xk更好的x之近似值,所以在计算yk+1时用xk+1来替换xk是合理的。同理,可用xk+1和yk+1计算zk+1。下面的例子演示了对上述例子中给出的方程组使用上述方法的情况。

设给定上述线性方程组并利用高斯-塞德尔(Gauss-Seidel)迭代过程求解:

xk+1=7+yk?zk4yk+1=21+4xk+1+zk8zk+1=15+2xk+1?yk+15

如果从P0=(x0,y0,z0)=(1,2,2)开始,用上式中的迭代可收敛到解(2,4,3)。

将y0=2和z0=2代入上式第一个方程可得

x1=7+2?24=1.75

将x1=1.75和z0=2代入第二个方程可得

y1=21+4×1.75+28=3.75

将x1=1.75和y1=3.75代入第三个方程可得

z1=15+2×1.75?3.755=2.95

新的点P1=(1.75,3.75,2.95)比P0更接近解(2,4,3),而且比之前例子中的值更好。用迭

代(7)生成序列{Pk收敛到(2,4,3)。

正如前面讨论的,应用雅各比迭代法计算有时可能是发散的。所以有必要建立一些判定条件来判断雅可比迭代是否收敛。在给出这个条件之前,先来看看严格对角占优矩阵的定义。

设有N×N维矩阵A,如果

其中,i是行号,j是列号,则称该矩阵是严格对角占优矩阵。显然,严格对角占优的意思就是指对角线上元素的绝对值不小于所在行其他元素的绝对值和。

a11x1+a12x2+...+a1jxj+...+a1NxNa21x1+a22x2+...+a2jxj+...+a2NxN......aj1x1+aj2x2+...+ajjxj+...+ajNxN......aN1x1+aN2x2+...+aNjxj+...+aNNxN=b1=b2=bj=bN

设第k点为Pk=(x(k)1,x(k)2,...,x(k)j,...,x(k)N,),则下一点为Pk+1=(x(k+1)1,x(k+1)2,...,x(k+1)j,...,x(k+1)N,)。向量Pk的上标(k)可用来标识属于这一点的坐标。迭代公式根据前面的值(x(k)1,x(k)2,...,x(k)j,...,x(k)N,),使用上述线性方程组中第j行求解x(k+1)j。

雅可比迭代:

x(k+1)j=bj?aj1x(k)1?...?ajj?1x(k)j?1?ajj+1x(k)j+1?...?ajNx(k)Najj

其中j=1,2,...,N。

雅可比迭代使用所有旧坐标来生成所有新坐标,而高斯-塞德尔迭代尽可能使用新坐标得到更新的坐标。

高斯-塞德尔迭代:

x(k+1)j=bj?aj1x(k+1)1?...?ajj?1x(k+1)j?1?ajj+1x(k)j+1?...?ajNx(k)Najj

其中j=1,2,...,N。

下面的定理给出了雅可比迭代收敛的充分条件。

(雅可比选代) 设矩阵A具有严格对角优势,则AX=B有惟一解X=P。利用前面给出的迭代式可产生一个向量序列{Pk},而且对于任意初始向量P0,向量序列都将收敛到P。

当矩阵A具有严格对角优势时,可证明高斯-塞德尔迭代法也会收敛。在大多数情况下,高斯-塞德尔迭代法比雅可比迭代法收敛得更快,因此通常会利用高斯-塞德尔迭代法。但在某些情况下,雅可比迭代会收敛,而高斯-塞德尔迭代不会收敛。

时间: 2024-11-05 08:48:44

Jacobi迭代法与Gauss-Seidel迭代法的相关文章

gauss——seidel迭代

转载:https://blog.csdn.net/wangxiaojun911/article/details/6890282 Gauss–Seidelmethod 对应于形如Ax = b的方程(A为对称正定矩阵或者Diagonally dominant),可求解如下: Jacobi method 另一种方法是Jacobimethod,它与Gauss–Seidelmethod类相似,但是要求A必须是Diagonally dominant.把A分解成D+U+L,仅求D的逆矩阵. Dx = b –

Atitit 迭代法  “二分法”和“牛顿迭代法 attilax总结

Atitit 迭代法  "二分法"和"牛顿迭代法 attilax总结 1.1. ."二分法"和"牛顿迭代法"属于近似迭代法1 1.2. 直接法(或者称为一次解法),即一次性的快速解决问题,1 1.3. 最常见的迭代法是"二分法 牛顿法.还包括以下算法1 1.4.  二分法(dichotomie)1 1.5. 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method

蓝桥杯练习系统 矩阵翻硬币 大数,牛顿迭代法 难度:2

http://lx.lanqiao.org/problem.page?gpid=T126 明显,对于一个格子(i,j),设f(i)为i的约数个数,则(i,j)的翻转次数为(f(i)-1)*(f(j)-1)+1, 而只有翻转次数为奇数,也就是f(i),f(j)都为奇数的格子开始才是反面, 又因为f(i)为奇数当且仅当i为完全平方数,所以只需统计n,m中各有多少个完全平方数,然后相乘即可, 也就是sqrt(n)*sqrt(m), 但是因为n,m是大数,必须要用大数方法解决,这里采用了java的Big

C语言之基本算法11—牛顿迭代法求平方根

//迭代法 /* ================================================================== 题目:牛顿迭代法求a的平方根!迭代公式:Xn+1=(Xn+a/Xn)/2. ================================================================== */ #include<stdio.h> #include<math.h> main() { float a,x0,x1;

007-算法-迭代法

一.概念:(Iteratice Method),迭代是数值分析中通过一个初始估计出发寻找一系列近似解解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法. 常见的迭代法是牛顿法.其它还包括最速下降法.共轭迭代法.变尺度迭代法.最小二乘法.线性规划.非线性规划.单纯型法.惩罚函数法.斜率投影法.遗传算法.模拟退火等等. 二.基本思想 迭代法是通过一种常用的设计方法.迭代式一个不断用新值取代变量的旧值,或者由旧值递推出变量的新值的过程.迭代机制需要以下一些要素: ① 迭代

数值分析课程设计

数值分析学习心得: 插值法:拉格朗日插值,埃米特插值 函数逼近:最小二乘法 求积分的算法:牛顿-科斯特公式,龙贝格求积公式,高斯求积公式 求线性方程组的迭代法:jacobi迭代法,高斯-赛德尔迭代法 求非线性方程的算法:牛顿法 求常微分方程初值问题的算法:欧拉法,龙格-库塔法 数值分析课程设计  浙江大学 陈越 第1章 数值分析课程实践概要1.1 课程实践的意义1.2 实验的基本要求第2章 MATLAB简介2.1 MATLAB概述2.2 常用基本指令2.3 数值技术第3章 案例详解1:误差的影响

&lt;Numerical Analysis&gt;笔记

2ed, by Timothy Sauer DEFINITION 1.3A solution is correct within p decimal places if the error is less than 0.5 × 10$^{−p}$ .-P29Bisection Method的优点是计算次数(step)是确定的(interval<精度).后面介绍的算法的interval是不确定的, 所以什么时候结束计算呢?不知道.所以定义“stopping criteria’’来决定什么时候结束计

多重网格方法(Multigridmethod)

原文链接 多重网格方法是解微分方程的方法.这个方法的好处是在利用迭代法收敛结果的时候速度特别快.并且,不管是否对称,是否线性都无所谓.它的值要思想是在粗糙结果和精细结果之间插值. 前面介绍了Gauss–Seidel方法和Jacobi 方法,现在再用这两个方法来举例.尽管Gauss–Seidel (GS)方法converge更快一些,但其实对于维度很高的系统都很慢.Multigrid(MG)方法的思路是先把问题粗糙化,把原网格投影到一个比较简单的新网格上计算,等到快速收敛以后再经由Interpol

X的平方

题目描述: 实现 int sqrt(int x) 函数,计算并返回 x 的平方根. 样例 sqrt(3) = 1 sqrt(4) = 2 sqrt(5) = 2 sqrt(10) = 3 题解: 解法1: /// 解法1: O(sqrt(n)) class Solution { public: /** * @param x: An integer * @return: The sqrt of x */ int sqrt(int x) { // write your code here for (

线性方程组解法

https://en.wikipedia.org/wiki/Gaussian_elimination Gauss–Seidel method - Wikipedia, the free encyclopedia.html