A.Kaw矩阵代数初步学习笔记 8. Gauss-Seidel Method
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授。
PDF格式学习笔记下载(Academia.edu)
第8章课程讲义下载(PDF)
Summary
- Algorithm
Given a general set of $n$ equations and $n$ unknowns $$\begin{cases}a_{11}x_1 + a_{12}x_2 +\cdots + a_{1n}x_n = c_1 \\ a_{21}x_1 + a_{22}x_2 +\cdots + a_{2n}x_n = c_2 \\ \vdots\\ a_{n1}x_1 + a_{n2}x_2 +\cdots + a_{nn}x_n = c_n \\\end{cases}$$ If the diagonal elements are non-zero, each equation is rewritten for the corresponding unknown, that is, $$\begin{cases}x_1 = \displaystyle{c_1-a_{12}x_2 - a_{13}x_3-\cdots -a_{1n}x_n\over a_{11}}\\ x_2 = \displaystyle{c_2-a_{21}x_1 - a_{23}x_3-\cdots -a_{2n}x_n\over a_{22}}\\ \vdots\\ x_n = \displaystyle{c_n-a_{n1}x_1 - a_{n2}x_2-\cdots -a_{n,n-1}x_{n-1}\over a_{11}}\\ \end{cases}$$ $$\Rightarrow \begin{cases}x_1 = \displaystyle{c_1-\displaystyle\sum_{j=1,j\neq1}^{n}a_{1j}x_j\over a_{11}}\\ x_2 = \displaystyle{c_1-\displaystyle\sum_{j=1,j\neq2}^{n}a_{2j}x_j\over a_{22}}\\ \vdots\\ x_n = \displaystyle{c_n-\displaystyle\sum_{j=1,j\neq n}^{n}a_{nj}x_j\over a_{nn}}\\ \end{cases}$$ Hence for any row $i$, $$x_i = {c_i-\displaystyle\sum_{j=1,j\neq i}^{n}a_{ij}x_j\over a_{ii}}$$ where $i=1$, $2$, $\cdots$, $n$. - Iteration
To find $x_i$, we assume an initial guess for the $x_i$ and then use the rewritten equations to calculate the new estimates. We always use the most recent estimates to calculate the next estimates, $x_i$. At the end of each iteration, we calculate the absolute relative approximate error for each $x_i$ as $$\varepsilon_i = \left|{x_i^{\text{new}} - x_i^{\text{old}}\over x_i^{\text{new}}}\right|$$ where $x_i^{\text{new}}$ is the recently obtained value of $x_i$, and $x_i^{\text{old}}$ is the previous value of $x_i$. When the absolute relative approximate error for each $x_i$ is less than the pre-specified tolerance, the iterations are stopped. - Convergent
The coefficient matrix $[A]$ in $[A][X]=[B]$ must be diagonally dominant, that is, $$\begin{cases}|a_{ii}| \geq \displaystyle\sum_{j=1, j\neq i}^{n}a_{ij}&\text{for all}\ i\\ |a_{ii}| > \displaystyle\sum_{j=1, j\neq i}^{n}a_{ij} & \text{for at least one}\ i\end{cases}$$ - An example
Suppose the following system of equations $$\begin{cases}12x_1 + 3x_2 -5x_3 =1\\ x_1 + 5x_2 +3x_3 =28\\ 3x_1 + 7x_2 +13x_3 =76\end{cases}$$ Use $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix}1\\ 0\\ 1\end{bmatrix}$$ as the initial guess and conduct two iterations.- Diagonally dominant test: $$\begin{cases}|a_{11}|=12 > |a_{12}| + |a_{13}| = 3+5=8\\ |a_{22}|=5 > |a_{21}| + |a_{23}|=1+3=4\\ |a_{33}|=13 > |a_{31}|+|a_{32}| = 3+7=10 \end{cases}$$ Hence the solution should converge using Gauss Seidel method.
- Rewriting the equations: $$\begin{cases}x_1 = \displaystyle{1-3x_2 +5x_3 \over 12}\\ x_2 = \displaystyle{28-x_1-3x_3\over 5}\\ x_3= \displaystyle{76-3x_1-7x_2\over 13}\end{cases}$$ And the initial value is $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix}1\\ 0\\ 1\end{bmatrix}$$
- Iteration 1: $$\begin{cases}x_1 = \displaystyle{1 - 3\times0 + 5\times1 \over 12} = 0.5\\ x_2 = \displaystyle{28 - 0.5 - 3\times1 \over 5} = 4.9\\ x_3= \displaystyle{76-3\times 0.5-7\times 4.9\over 13}=3.0923\end{cases}$$ Notice that the second and the third equations above, $x_1$ and $x_2$ are updated immediately.
And the absolute relative approximate error is $$\begin{cases}\varepsilon_1 = \displaystyle{|0.5-1|\over0.5} = 1\\ \varepsilon_2 = \displaystyle{|4.9 - 0|\over 4.9} = 1\\ \varepsilon_3 = \displaystyle{|3.0923 - 1|\over3.0923}=0.67662 \end{cases}$$ - Iteration 2: $$\begin{cases}x_1 = \displaystyle{1 - 3\times4.9 + 5\times3.0923 \over 12} = 0.14679\\ x_2 = \displaystyle{28 - 0.14679 - 3\times3.0923 \over 5} = 3.7153\\ x_3= \displaystyle{76-3\times 0.14679-7\times 3.7153\over 13} = 3.8118 \end{cases}$$ And the absolute relative approximate error is $$\begin{cases}\varepsilon_1 = \displaystyle{|0.14679-0.5|\over0.14679} = 2.4\\ \varepsilon_2 = \displaystyle{|3.7153 - 4.9|\over 3.7153} = 0.31889\\ \varepsilon_3 = \displaystyle{|3.8118 - 3.0923|\over3.8118}=0.18874 \end{cases}$$
- Final result:
After 6 iterations, we have the solution $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix}0.99919\\ 3.0001\\ 4.0001 \end{bmatrix}$$ which is very close to the exact solution $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix}1\\ 3\\ 4 \end{bmatrix}$$
- R code:
Some comments:
- In the second function PrepA, we use the elementary row operation $R_i + mR_j$ if the diagonal element in $R_i$ equals to zero.
- In the third function IterSolve, we use $$\varepsilon=\sum\left|x^{\text{new}}-x^{\text{old}}\right|$$ instead of the absolute relative approximate error.
- x0 is a vector in the main function, which is the initial guess of the system. And eps is the tolerance of the error, which can be smaller or bigger in different cases. The last parameter is maxit is the number of iterations, it does not need to be too much in most cases.
- Using this code to calculate the previous example:
A = matrix(c(12, 1, 3, 3, 5, 7, -5, 3, 13), ncol = 3)
b = matrix(c(1, 28, 76), ncol = 1)
IterSolve(A, b, c(1, 0, 1))$x
# Result
# Converged after 11 iterations
# [1] 1 3 4
Selected Problems
1. Given the system of equations $$\begin{cases}3x_1 + 7x_2 + 13x_3 =76\\ x_1 +5x_2 + 3x_3 =28\\ 12x_1 +3x_2 -5x_3 =1\end{cases}$$ find the solutions using the Gauss-Seidel method. Use $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix}1\\ 0\\ 1\end{bmatrix}$$ as the initial guess.
Solution: Note that the coefficient matrix is not diagonal dominant: $$\begin{cases}|a_{11}| = 3 < |a_{12}| + |a_{13}| = 7+13 =20\\ |a_{33}| = 5 < |a_{31}| + |a_{32}| = 12 + 3 = 15\end{cases}$$ Hence it may diverge. Moreover, we can use our R code to test it:
A = matrix(c(3, 1, 2, 7, 5, 3, 13, 3, -5), ncol = 3)
b = matrix(c(76, 28, 1), ncol = 1)
IterSolve(A, b, c(1, 0, 1))$x
# Result
# [1] -2.496896e+172 1.261843e+171 -9.230477e+171
# Warning message:
# In IterSolve(A, b, c(1, 0, 1)) : Maxit reached
2. Solve the following system equations using Gauss-Seidel method. $$\begin{cases}12x_1 + 7x_2 + 3x_3 = 17\\ 3x_1 + 6x_2 +2x_3 =9\\ 2x_1 + 7x_2 -11x_3 =49\end{cases}$$ Choose the initial guess as $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix}1\\ 3\\ 5\end{bmatrix}$$
Solution:
Firstly, we test whether the coefficient matrix is diagonal dominant: $$\begin{cases}|a_{11}| = 12 > |a_{12}| + |a_{13}| =10\\ |a_{22}|=6 > |a_{21}| +|a_{23}|=5\\ |a_{33}| = 11 > |a_{31}| +|a_{32}|= 9\end{cases}$$ which means it is diagonal dominant. Then we will conduct two iterations: $$I_1=\begin{cases}x_1 = \displaystyle{17-7x_2-3x_3\over12} = {17-7\times3 -3\times5\over12} = -1.583333\\ x_2 = \displaystyle{9-3x_1-2x_3\over6} = {9-3\times(-1.583333) -2\times5\over6} = 0.625000\\ x_3=\displaystyle{49-2x_1-7x_2\over -11} = {49-2\times(-1.583333) -7\times 0.625000\over -11} = -4.344697\end{cases}$$ $$I_2=\begin{cases}x_1 = \displaystyle{17-7x_2-3x_3\over12} = \displaystyle{17-7\times0.625000 -3\times(-4.344697)\over12} = 2.138258\\ x_2 = \displaystyle{9-3x_1-2x_3\over6} = {9-3\times2.138258-2\times(-4.344697)\over6} = 1.879104\\ x_3=\displaystyle{49-2x_1-7x_2\over -11} = {49-2\times2.138258 -7\times 1.879104\over -11} = -2.869978\end{cases}$$ Alternatively, we can use R code to solve it directly:
A = matrix(c(12, 3, 2, 7, 6, 7, 3, 2, -11), ncol = 3)
b = matrix(c(17, 9, 49), ncol = 1)
IterSolve(A, b, c(1, 3, 5), eps = 1e-8)$x
# Result
# Converged after 16 iterations
# [1] 1 2 -3
That is, the solution is $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix}1\\ 2\\ -3\end{bmatrix}$$
3. Solve the following system equations using Gauss-Seidel method. $$\begin{cases}3x_1 + 6x_2 + 2x_3 =9\\ 12x_1 +7x_2 + 3x_3=17\\ 2x_1 +7x_2 -11x_3=49\end{cases}$$ Choose the initial guess as $$\begin{bmatrix}x_1\\ x_2\\ x_3 \end{bmatrix} = \begin{bmatrix} 1.1\\ 2.1\\ -2.9 \end{bmatrix}$$
Solution:
We will use the R code to solve it directly:
A = matrix(c(3, 12, 2, 6, 7, 7, 2, 3, -11), ncol = 3)
b = matrix(c(9, 17, 49), ncol = 1)
IterSolve(A, b, c(1, 0, 1), eps = 1e-8)$x
# Result
# Error in IterSolve(A, b, c(1, 3, 5)) : The algorithm diverges
Recall the R function, the result is divergent when the solution in the iterations goes to infinity. Moreover, we can read off its non-convergent according to it is not diagonal dominant since $$\begin{cases}|a_{11}|=3 < |a_{12}|+|a_{13}|=8\\ |a_{22}|=7 < |a_{21}|+|a_{23}|=15\end{cases}$$
A.Kaw矩阵代数初步学习笔记 8. Gauss-Seidel Method的更多相关文章
- A.Kaw矩阵代数初步学习笔记 10. Eigenvalues and Eigenvectors
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 9. Adequacy of Solutions
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 7. LU Decomposition
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 6. Gaussian Elimination
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 5. System of Equations
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 4. Unary Matrix Operations
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 3. Binary Matrix Operations
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 2. Vectors
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
- A.Kaw矩阵代数初步学习笔记 1. Introduction
“矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...
随机推荐
- Java 基础【10】 I/O流概念分析整理
转载地址:http://blog.csdn.net/yuebinghaoyuan/article/details/7388059 java.io 中的流,可以从不同的角度进行分类. 按照数据流的方向不 ...
- opencv6.4-imgproc图像处理模块之直方图与模板
接opencv6.3-imgproc图像处理模块之边缘检测 九.直方图的相关操作 直方图是图像中像素强度分布的图形表达方式:它统计了每一个强度值所具有的像素个数 上图是一个灰色图像,通过对图像的每个不 ...
- 备忘:hibernate, logback, slf4j实际应用一例
用hibernate写一些简单的数据库的Java应用.主要是温习一下.之前弄过的一些都忘了.发现还是得记下来,不然很快就忘. 1. Eclipse版本,用Juno, J2EE版本.最好下载zip版本的 ...
- 基于FPGA的电压表与串口通信(上)
实验原理 该实验主要为利用TLC549采集模拟信号,然后将模拟信号的数字量通过串口发送到PC上上位机进行显示,使用到的TLC549驱动模块在进阶实验已经使用到了,串口模块在基础实验也已经使用到了,本实 ...
- Who Says What to Whom on Twitter-www2011-20160512
分析性论文 what: who? 本文将Twitter中的用户分为了两大类--普通用户和精英用户,精英用户又被分为四类,分别为媒体(media).名人(celebrities).博主(bloggers ...
- SQL语言概述
功能概述 DDL,数据库定义语言,创建,修改,删除数据库,表,视图,索引,约束条件等 DML,数据库操纵语言,对数据库中的数据进行增,删,改,查 DCL,数据库定义语言,对数据库总数据的访问设置权限 ...
- app状态监听广播
手机中的应用在安装.更新和卸载时都会发送广播 清单文件 <?xml version="1.0" encoding="utf-8"?> <man ...
- js简易函数性能测试器
如果你不想用浏览器的js性能测试工具,可以用下面这个简单的函数测试一下(1毫秒一下的就测不出来了) function testFn(fn,param){ var start = new Date(). ...
- shell正则表达式(zhuan)
匹配中文字符的正则表达式:[u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个 ...
- redis的主从复制,读写分离,主从切换
当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能. redis提供了一个master,多个s ...