matlab线性方程组求解

线性方程组的求解主要有两种方法,分别是直接法和迭代法,本节也将围绕这两种方法去讲解一些matlab在求解线性方程组的相关知识。
一、线性方程组的直接解法
主要可以分为以下三种方法:
高斯( Gauss )消去法
列主元消去法
矩阵的三角分解法
高斯( Gauss )消去法是一个经典的直接法,由它改进得到的列主元消去法,是目前计算机上求解线性方程组的标准算法,其特点就是通过消元将一般线性方程组的求解问题转化为三角方程组的求解问题。此外,还有矩阵的三角分解法等许多直接求解算法 。
1、利用左除运算符的直接解法
MATLAB 提供了一个左除运算符“\” 用于求解线性方程组,它使用列主元消去法,使用起来十分方便。对于线性方程组 Ax=b ,可以利用左除运算符反斜杠求解,b左除以A可获得线性方程组的数值解x。
注:这里的A和b是矩阵形式,且A里面的系数写法要与未知数对应。
例、用左除运算符求解下列线性方程组 。
在这里插入图片描述

>>  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分解:
(1) LU 分解的基本思想:
矩阵的 LU分解就是将一个n阶矩阵表示为一个下三角矩阵和一个上三角矩阵的乘积。线性代数中已经证明,只要方阵是非奇异的,LU 分解总是可以进行的。如下图
在这里插入图片描述
对于三角方程很容易求解,于是可以首先求解向量y使 Ly=b,再求解 Ux =y,从而达到求解线性方程组 Ax=b 的目的。
(2)matlab的LU分解函数
LU 分解函数是根据列主元LU分解算法定义的,具有较好的数据稳定性。 lu函数有两种调用格式:
[L,U]= lu (A) :产生一个上三角阵U和一个变换形式的下三角阵L,使之满足A=LU 。注意,这里的矩阵A必须是方阵。
[L,U,P]= lu (A) :产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足 PA=LU 。同样,矩阵A必须是方阵。
注:当使用第一种格式时,矩阵L往往不是一个下三角阵,但可以通过行交换成为一个下三角阵。
还是以上述的线性方程组为例:

>> 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
>> [L,U,P]=lu(A);
>> x=U\(L\P*b)
x =
  -66.5556
   25.6667
  -18.7778
   26.5556

一、 线性方程组的迭代解法
迭代法是一种不断用变量的原值推出它的新值的过程,是用计算机解决问题的一种基本方法 。如下面图片所示 在这里插入图片描述介绍一种 线性方程组的迭代解法——雅可比(Jacobi)迭代法
对于线性方程组Ax=b,对于系数矩阵还是采取上述的矩阵分解的基本思想
在这里插入图片描述
求解公式为:x(k+1)=D(-1)*(L+U)*x(k)+D(-1)*b
在这里插入图片描述
matlab中没有雅可比(Jacobi)迭代法的内置函数,因此此种方法需要自己编程实现,网上也有很多的代码,大家可以去了解一下,下面是网上的一段雅可比(Jacobi)迭代法的代码编写

function [y,n]=jacobi(A,b,x0,ep)
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
x0=y;
y=B*x0+f;
n=n+1;
end

其中,A是系数阵,b是方程组右边的常数,x0是迭代的初始值,ep是精度,在matlab 中将这段代码写入一个function,调用结果如下(以下面的方程组为例):
在这里插入图片描述

>> format long
>> 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.970588483091126
   0.852941039929380
   1.176470992801838
n =
    35   
>> [L,U]=lu(A);
 x=U\(L\b)

x =

   0.970588235294118
   0.852941176470588
   1.176470588235294

可以看出两种方法算出来的结果,很是接近。
当然,除了此方法,还有很多的迭代方法去求解线性方程组,常见的有高斯- - 赛德尔( Gauss- - Serdel )迭代法,附上链接(https://blog.51cto.com/592669550/932010)
本节内容就到这里结束了,下节将推出非线性方程的求解,敬请期待!

关于MATLAB的学习:

大家可以关注我们的知乎专栏——数据可视化和数据分析中matlab的使用:
https://zhuanlan.zhihu.com/c_1131568134137692160

欢迎大家加入我们的MATLAB学习交流群:
953314432
扫码关注我们
发现更多精彩
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值