MATLAB数值分析学习笔记:线性代数方程组的求解和高斯-赛德尔方法

这篇具有很好参考价值的文章主要介绍了MATLAB数值分析学习笔记:线性代数方程组的求解和高斯-赛德尔方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

迭代法是前面介绍的消元法的有效替代,线性代数方程组常用的迭代法有高斯-赛德尔方法雅克比迭代法,下面会讲到二者的不同之处,大家会发现两者的实现原理其实类似,只是方法不同,本篇只重点介绍高斯-赛德尔方法。

原理:

看了我之前的笔记的同学应该已经对迭代法不再陌生了,无非就是首先取初始值,然后选取一个方法进行迭代,直到满足终止条件为止,简单概括为:

高斯赛德尔迭代计算方法matlab,MATLAB学习笔记,线性代数,matlab,学习

 高斯-赛德尔方法也是如此,首先猜测xi的初始值(i=1,2···n),一种简单的方法是xi=0.

把这些初始值(除了x1)带入第一个方程,就可以解出x1的新值为把这个新的x1和其他初始值(除了x2)带入第二个方程,解出新的x2,以此类推,直到第一个迭代过程结束,重复迭代直到下面的终止准则成立(迭代过程收敛)

高斯赛德尔迭代计算方法matlab,MATLAB学习笔记,线性代数,matlab,学习

高斯-赛德尔方法中,一旦计算出某个xi的新值,就会作为已知被代入到下一个方程中,二前文提到的雅克比迭代法则不是如此,该方法一一次迭代为单位进行更新,也就是说,xi的新值不会马上被代入到下一个方程中,而是等到本次迭代之后再带入到下一次迭代,下面引用《工程于科学数值方法的MATLAB实现》(第4版)的一张图说明问题

高斯赛德尔迭代计算方法matlab,MATLAB学习笔记,线性代数,matlab,学习

 左边为高斯-赛德尔方法,右边为雅克比迭代法。

 代码实现:

function x = GuessSeidel(A,b,es,maxit)
%%GuessSeidel:高斯-赛德尔方法求解线性方程组
%   高斯-赛德尔方法是一种迭代法,首先猜测各个xi的初始值(一个简单的方法是设各个xi为0)
%将这些初始值带入到第一个方程解出x1,然后更新x1,将xi带入第二个方程x2,更新x2
%依次迭代,直至数值解非常接近真实值为止
%判断条件:对任意的i,有ea(i)=abs((x(i)-xold(i))/x(i))<=es
%即:max(ea)<=es

%%输入
%A=系数矩阵
%b=右侧矩阵
%es=终止准则(default = 0.00001%)
%maxit=最大迭代次数(default = 50)
%输出:
%x=解向量

%%代码实现
%思路:解向量可以简单的表示为x=d-C*x
%其中di=b_i/a_ii,C的对角线元素为0。
if nargin<2,error('至少输入系数矩阵和右侧矩阵'),end
if nargin<4||isempty(maxit),maxit=50;end
if nargin<3||isempty(es),es=0.0000001;end

[m,n]=size(A);
if m~=n,error('系数矩阵必须为方阵'), end

%求解C
C = A;
for i = 1:n
    C(i,i)=0;
    x(i) = 0;%顺便求初始x
end
x=x';
for i = 1:n
    C(i,1:n) = C(i,1:n)/A(i,i);
end
%求解d
for i=1:n
    d(i)=b(i)/A(i,i);
end
%开始迭代
iter=0;
while(1)
    xold=x;%记录上次的x
    for i=1:n
        x(i)=d(i) - C(i,:)*x;%求解并更新xi
        if x(i)~=0
            ea(i)=abs((x(i)-xold(i))/x(i));
        end
    end
    iter = iter+1;
    if max(ea)<=es || iter>=maxit,break, end
end

end

问题求解:

问题:

高斯赛德尔迭代计算方法matlab,MATLAB学习笔记,线性代数,matlab,学习

下面分别用了 高斯-赛德尔方法,逆矩阵法和高斯消元法求解该问题。

%%使用高斯赛德尔方法求解一组线性方程组
A=[3 -0.1 -0.2;0.1 7 -0.3;0.3 -0.2 10];
b=[7.85 -19.3 71.4]';
%下分别使用高斯赛德尔,逆矩阵法,选主元高斯法求解问题
x_1=GuessSeidel(A,b,1e-1,20)
x_2=inv(A)*b
x_3=GaussPivot(A,b)
>> GuessSeidel_test
x_1 =
    3.0000
   -2.5000
    7.0000
x_2 =
    3.0000
   -2.5000
    7.0000
x_3 =
    3.0000
   -2.5000
    7.0000

声明:文章来源于笔者学习【美】Steven C. CHapra所著,林赐译 《工程于科学数值方法的MATLAB实现》(第4版)的笔记,如有谬误或想深入了解,请翻阅原书。文章来源地址https://www.toymoban.com/news/detail-744939.html

到了这里,关于MATLAB数值分析学习笔记:线性代数方程组的求解和高斯-赛德尔方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数:齐次线性方程组学习笔记

    齐次线性方程组是指所有方程的常数项均为零的线性方程组,即形如 A x = 0 Ax=0 A x = 0 的方程组。 其中,矩阵 A A A 是一个 m × n m times n m × n 的矩阵,向量 x x x 是一个 n n n 维列向量, 0 mathbf{0} 0 是一个 m m m 维零向量。 齐次线性方程组有以下性质: 1. 性质1 齐次线性方程组的

    2024年01月20日
    浏览(38)
  • 数值线性代数: Krylov子空间法

    本文旨在总结线性方程组求解的相关算法,特别是Krylov子空间法的原理及流程。 注1:限于研究水平,分析难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 对于、,若矩阵第行第列元素的共轭等于矩阵第行第列元素,即,则称矩阵是矩阵的共轭转置矩阵,记作。 可

    2024年02月13日
    浏览(29)
  • 线性代数:正交变换学习笔记

    在线性代数中,如果一个矩阵 A A A 满足 A T A = A A T = I A^T A = A A^T = I A T A = A A T = I ,则称其为正交矩阵。正交矩阵也常被称为正交变换。 正交变换是线性变换的一种特殊形式,它不改变向量的长度和夹角。因此,它可以用来描述旋转、镜像等几何变换。 正交矩阵有以下性质:

    2024年02月03日
    浏览(44)
  • 深度学习笔记之线性代数

    一、向量 在数学表示法中,向量通常记为粗体小写的符号(例如, x , y , z )当向量表示数据集中的样本时,它们的值具有一定的现实意义。例如研究医院患者可能面临的心脏病发作风险,用一个向量表示一个患者,其分量为最近的生命特征、胆固醇水平、每天运动时间等

    2024年02月08日
    浏览(36)
  • 线性代数:增广矩阵学习笔记

    定义 对于一个 n × m ntimes m n × m 的矩阵 A = [ a i j ] A=[a_{ij}] A = [ a ij ​ ] ,我们可以在它的右边加上一个 n × 1 ntimes1 n × 1 的列向量 b b b ,得到一个 n × ( m + 1 ) ntimes(m+1) n × ( m + 1 ) 的矩阵 [ A ∣ b ] begin{bmatrix} A bigl| bend{bmatrix} [ A ​ ​ ​ b ​ ] ,这个矩阵被称为 A A A 的

    2024年02月05日
    浏览(47)
  • 线性代数——高斯消元 学习笔记

    消元法 消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其带入到另一方程中,这就消去了一未知数,得到一解;或将方程组中的一方程倍乘某个常数加到另外一方程中去,也可达到消去一未知数的目的。消元法主要用于二元一次方程组的求解。

    2024年02月08日
    浏览(30)
  • 【算法小记】——机器学习中的概率论和线性代数,附线性回归matlab例程

    内容包含笔者个人理解,如果错误欢迎评论私信告诉我 线性回归matlab部分参考了up主DR_CAN博士的课程 在回归拟合数据时,根据拟合对象,可以把分类问题视为一种简答的逻辑回归。在逻辑回归中算法不去拟合一段数据而是判断输入的数据是哪一个种类。有很多算法既可以实现

    2024年01月24日
    浏览(32)
  • 数值线性代数:Arnoldi求解特征值/特征向量

    线性方程组求解 、 最小二乘法 、 特征值/特征向量求解 是(数值)线性代数的主要研究内容。 在力学、气象学、电磁学、金融等学科中,许多问题最终都归结为特征值、特征向量的求解。 ARPACK 使用 IRAM ( Implicit Restarted Arnoldi Method )求解大规模系数矩阵的部分特征值与特征向量

    2024年01月18日
    浏览(44)
  • 线性代数:克莱姆法则学习笔记

    克莱姆(Cramer)法则又称为克拉默法则,是在线性代数中解决线性方程组问题的一种方法。克莱姆法则的基本思想是通过用系数矩阵的行列式来判断线性方程组是否有唯一解,从而进一步求出各个未知数的值。其原理基于克莱姆定理: 对于 n 元线性方程组 Ax = b,如果系数矩

    2024年02月08日
    浏览(35)
  • 线性代数 --- 向量的内积(点积)(个人学习笔记)

    向量与向量的乘法 - 内积         两个向量的内积,也叫点积(但在我们这个笔记的前半部分,我们说的,或者用到的更多的应该是点积),他的计算方式是两个同维度向量(例如两个n维向量)的内部元素从1到n, 逐一相乘再相加后的累加和 ,得到的是一个数。 注意,

    2023年04月08日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包