概述
前面我们已经知道对于线性方程组,一般有两种数值解法:直接法和迭代法。直接法前面已经写过了,没看的同学可以移步阅读:直接法。本次主要讲述迭代法及其相应的MATLAB代码。
考虑线性方程组
当
本文主要介绍迭代法的基本思路和雅可比(Jacobi)迭代法、高斯-塞德尔(Gauss-Seidel)迭代法、(逐次)超松弛(SOR, Successie over Relaxation)迭代法、共轭梯度(CG, Conjugate Gradient)法。
1. 迭代法的基本思路
对于线性方程组
为了使用迭代法对其进行求解,我们首先需要构造迭代序列,我们将上式改写为
其中
对向量序列
这就是我们构造迭代法的基本思路。MATLAB代码为
function
示例:
clear
运行结果
x
可见只是迭代
2. 雅可比(Jacobi)迭代法
其实上面第1节的代码使用的方法就是最原始的雅可比迭代法,只是在形式上看起来不那么规范。下面我们来看规范的解
其中
其分量计算公式为
但实际编程计算一般采取简洁且高效的矩阵形式,其MATLAB代码为
function
仍然计算第一节的例子,只需把函数名改一下:
clear
运行结果也与第1节一致:
x
3. 高斯-塞德尔(Gauss-Seidel)迭代法
高斯-塞德尔迭代法与雅可比迭代法很相似,可以看成是其的一种改进。其形式为:
其中
其分量计算公式为
其MATLAB代码亦采取矩阵形式:
function
同样计算前面的例子,其结果为:
x
从结果可以看出,对于同样的精度要求,高斯-塞德尔迭代法只需要
3. (逐次)超松弛(SOR)迭代法
简单来说,逐次超松弛迭代法就是在前面高斯-塞德尔迭代法的基础上加了松弛因子
其中
其分量计算公式为
显然,当
其MATLAB代码为
function
还是计算前面那个例子,选择精度为
clear
运行结果为
x
如果采取默认松弛因子(自动选择最佳松弛因子):
clear
其结果为
x
此时迭代次数减少为
4. 共轭梯度(CG)法
也称共轭斜量法,它是一种变分方法,对应于求一个二次函数的极值。CG方法是一种求解大型稀疏对称正定方程组十分有效的方法。
其算法描述为:
(1)任取
(2)对
(3)若
写成MATLAB代码为
function
用此CG方法求解一个
clear
运行结果为:
x
而如果采用Gauss-Seidel迭代法,精度要求为
x
对比结果可以发现,达到类似精度,G-S迭代法需要迭代
最后
以上就是欢喜紫菜为你收集整理的matlab中欠定方程组超定方程组_第6章 解线性方程组的迭代法(基于MATLAB)的全部内容,希望文章能够帮你解决matlab中欠定方程组超定方程组_第6章 解线性方程组的迭代法(基于MATLAB)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复