[MATLAB]线性方程组求解(雅可比迭代和高斯迭代源码实现)

本试验取材于中南大学《科学计算与MATLAB语言》。

直接解法

  • 高斯消去法
  • 列主元消去法
  • 矩阵的三角分解法
    (1)利用左除运算符的直接解法
Ax=b------>x=a\b

注意:如果矩阵A是奇异的或接近奇异的,则MATLAB会给出警告信息。
在这里插入图片描述

>> A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
>> b=[13,-9,6,0]';
>> x=A\b

x =

  -66.5556
   25.6667
  -18.7778
   26.5556

(2)利用矩阵分解求解线性方程组

  • LU分解
  • QR分解
  • Cholesky分解
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
>> A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];
>> b=[13,-9,6,0]';
>> [L,U]=lu(A);
>> x=U\(L\b)

x =

  -66.5556
   25.6667
  -18.7778
   26.5556

>> 

迭代解法

  • 雅可比(Jacobi)迭代法
  • 高斯-赛德尔(Gauss-Serdel)迭代法
    这里先讲一下雅可比迭代法,雅可比迭代法,特别花里胡哨,但是我在求复合函数偏导数特别好使,因此下面给出雅可比迭代法的具体实现步数
    在这里插入图片描述
    创建一个jacobi.m
function [y,n]=jacobi(A,b,x0,ep)
%%输出的参数 y指方程的解 n为迭代的次数
% 输入的参数分别是系数矩阵 右端列向量 迭代的初值 精度
D=diag(diag(A))%%求对角矩阵
L=-tril(A,-1);%%求下三角
U=-triu(A,1);%%求上三角
B=D\(L+U);
f=D\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep %%2范数去逼近
    x0=y;
    y=B*x0+f;
    n=n+1;
end

这段代码巧妙实现了雅可比迭代算法流程
(2)高斯–赛德尔(Gauss-Serdel)迭代法
第二种方法是站在第一种方法基础上,将代码稍微更改,直接变成高斯—赛德尔迭代法.
在这里插入图片描述
创建一个gauseidel.m

function [y,n]=gauseidel(A,b,x0,ep)
D=diag(diag(A))%%求对角矩阵
L=-tril(A,-1);%%求下三角
U=-triu(A,1);%%求上三角
B=(D-L)\U;
f=(D-L)\b;
y=B*x0+f;
n=1;
while norm(y-x0)>=ep %%2范数去逼近
    x0=y;
    y=B*x0+f;
    n=n+1;
end

在这里插入图片描述
在这里插入图片描述

>> A=[4,-2,-1;-2,4,3;-1,-3,3];
>> b=[1,5,0]';
>> [x,n]=jacobi(A,b,[0,0,0]',1.0e-6)

x =

    0.9706
    0.8529
    1.1765


n =

    35

>> [x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)

x =

    0.9706
    0.8529
    1.1765


n =

    16

>> 

小结:虽然你可以看到感觉高斯迭代次数更少,可以直接迭代出更雅可比一样的值,但现实是两者无法作为比较,一种可能连收敛性都无法确定。
在这里插入图片描述

>> A=[1,2,-2;1,1,1;2,2,1];
>> b=[9;7;6];
>> [x,n]=jacobi(A,b,[0;0;0],1.0e-6)

x =

   -27
    26
     8


n =

     4

>> [x,n]=gauseidel(A,b,[0;0;0],1.0e-6)

x =

  1.0e+305 *

      -Inf
       Inf
   -1.7556


n =

        1011

>> 

相信各位看官看见了,高斯迭代竟然不收敛!

  • 39
    点赞
  • 210
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
模糊数学在工程技术、管理科学、金融工程等领域应用中的很多问题都可以用模糊方程和模糊线性系统来描述。 但是,实现模糊方程和模糊线性系统的求解十分困难,对求解的研究一直以来都是重点,也是难点。 无论从理论研究还是从实际应用的角度来说,对模糊方程和模糊线性系统的求解研究都具有重要意义。 本文针对传统方求解模糊方程和模糊线性系统在模糊数运算、隶属函数解析表示、模糊解判定等方面存在的困难,借助模糊结构元理论,相应地提出了一套模糊方程和模糊线性系统的求解。首先,利用两个单调函数的自反单调变换构造了等式限定算子,推广了等式限定运算,处理了存在负模糊情况下关于乘运算的不可逆问题。 并将等式限定运算思想应用到求解模糊线性方程中,给出了模糊解的结构元表示方和解存在的充要条件。同时,推广了模糊线性方程,研究了更一般的双重模糊线性方程。此外,还研究了关于矩形复模糊数和圆楔形复模糊数线性方程的求解问题。 其次,定义了幂模糊数和幂模糊数方程,基于结构元方研究了幂模糊数运算和幂模糊数方程的求解。同时,实现了一元二次模糊方程的求解,利用区间[-1,1]上的单调函数将一元二次模糊方程的求解问题转化为二元二次参数方程组的求解问题,给出了二次模糊方程解存在的充要条件,并辅以数值例子。 最后,利用结构元技术提出了模糊线性系统的求解,给出了模糊解存在的充要条件,并辅以实例计算。由于该求解是借助[-1,1]上关于y轴对称的单调函数实现的,结果表明在解存在的判定上优于Embedding。 同时,管理毕业论文www.yifanglunwen.com [-1,1]还研究了一类由模糊结构元线性生成的模糊线性系统,其求解特点是可转为经典线性系统,避免了参数的讨论。本文提出的模糊方程和模糊线性系统的结构元求解,极大地简化了模糊数运算的困难,实现了模糊解的判定和解析表达,为模糊数学基础理论问题的研究以及实际问题中的应用与推广奠定了基础。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值