MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

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

工程和科学计算的许多基本方程都是建立在守恒定律的基础之上的,比如质量守恒等,在数学上,可以建立起形如 [A]{x}={b} 的平衡方程。其中{x}表示各个分量在平衡时的取值,它们表示系统的状态响应;右端向量{b}由无关系统性态的常数组成通常表示为外部激励。矩阵A则表示为由系统各部分相互作用或耦合关系的参数组成的系数矩阵。在工程上则意味着[相互作用][响应]=[激励]

对于单个方程,可以采用前面介绍的一些求根法加以求解,然而事实上还有一些关系式是彼此相互耦合的,比如复杂电路的基尔霍夫定律。这就需要将这些关系式表示为一个线性代数方程组。下面就此问题介绍MATLAB求解线性代数方程组的一些方法,重点介绍高斯消元法


目录

一、取逆和“左除”

取逆

左除

二、克莱姆法则

代码实现:

问题求解:

三、高斯消元法

原理:

代码实现:

问题求解:

四、三对角方程组的求解

代码实现:

问题求解:


一、取逆和“左除”

对于形如 A*x=b的线性代数方程组,MATLAB提供了两种直接求解的方法:取逆 和“左除”

  • 取逆

        MATLAB的矩阵取逆函数为inv(A)

        故   x=inv(A)*b

  • 左除

        x=A\b


二、克莱姆法则

学习过线性代数的同学应该对克莱姆法则并不陌生,这里不再赘述,只是讲一下在MATLAB中的实现:

问题:求解

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

代码实现:

A=[0.3 0.52 1;0.5 1 1.9;0.1 0.3 0.5];
b=[-0.01 0.67 -0.44]';
D=det(A);
A(:,1)=b;
x(1)=det(A)/D;
A=[0.3 0.52 1;0.5 1 1.9;0.1 0.3 0.5];
A(:,2)=b;
x(2)=det(A)/D;
A=[0.3 0.52 1;0.5 1 1.9;0.1 0.3 0.5];
A(:,3)=b;
x(3)=det(A)/D;
x

问题求解:

>> Clem
x =
  -14.9000  -29.5000   19.8000

三、高斯消元法

对于小型方程,使用克莱姆法则还是很方便的,但工程上往往面对的是庞大的方程组问题,这个时候仅仅用克莱姆法则是万万不够的。

高斯消元法尽管是求解联立方程组最古老的方法之一,但直到今天依然是实际应用中最为重要的方法之一。

原理:

一般方程组(A*x=b):

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

步骤:向前消元-->向后回代

向前消元:第一阶段是将A矩阵消为一个上三角矩阵。方法是将第一个方程左右同时乘以

然后用第二个方程去减它这样就消掉了.

类似的,反复这样进行,就可以将原方程组变换为新的“上三角方程组”。

向后回代:第二个阶段是利用“上三角方程组”解出x。

首先解出然后将其带入倒数第二个方程,求解,以此类推。

这样就成功的解出了x。

然而,不知道大家发没发现,如果在执行向前消元时遇到=0,或者很小很小,这样就遇到了一个问题——“除数不可以为0”,这就需要每一次执行的时候选出最大的数作为“主元”,将主元作为新的“除数”。

称之前的高斯法叫朴素的高斯消元法,后者为选主元的高斯消元法。

代码实现:

function x = GaussPivot(A,b)
%%建立高斯消元法的实现代码
%求解方程A*x=b
%步骤:
%(1)向前消元;
%(2)向后回代。
%%输入:
%A=系数矩阵
%b=右向量
%%输出:
%x=方程的解向量

[m,n]=size(A);
if m~=n,error("系数矩阵须为方阵");end
nb=n+1;
Aug=[A b];
%向前消元
for k=1:n-1
    %选主元(max函数可以传回最大值和最大值索引)
    [big,i] = max(abs(Aug(k:n,k)));
    ipr = i+k-1;
    if ipr~=k
        Aug([k,ipr],:) = Aug([ipr,k],:);%交换:将绝对值大的数作主元
    end
    for i=k+1:n
        factor = Aug(i,k)/Aug(k,k);
        Aug(i,k:nb) = Aug(i,k:nb)-factor*Aug(k,k:nb);
    end
end
%向后回代
x = zeros(n,1);%创建解向量
x(n)=Aug(n,nb)/Aug(n,n);%先求出最后一个值
for i=n-1:-1:1
    x(i)=(Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i);
end
end

问题求解:

问题:

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

%%高斯消元法
A=[0.3 0.52 1;0.5 1 1.9;0.1 0.3 0.5];
b=[-0.01 0.67 -0.44]';
x = GaussPivot(A,b)

 结果:

>> GaussPivot_test
x =
  -14.9000
  -29.5000
   19.8000

 四、三对角方程组的求解

工程上经常遇到形如如下的方程组:

MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

求解步骤依然是向前消元-->向后回代,只不由于A的稀疏性,再使用高斯消元法就太消耗时间了,书中专门为其设计了代码

代码实现:

function x = Tridiag(e,f,g,r)
%求解三对角方程组
%   由于三对角方程的系数矩阵稀疏,运算量与n成正比,而不是高斯消元的n^3
%%输入:
%e =下对角线
%f = 主对角线
%g =上对角线
%r = 右向量
%%输出:
%x=方程的解向量
n=length(f);
for k=2:n
    factor=e(k)/f(k-1);
    f(k)=f(k)-factor*g(k-1);
    r(k)=r(k)-factor*r(k-1);
end
x(n)=r(n)/f(n);
for k= n-1:-1:1
    x(k)=(r(k)-g(k)*x(k+1))/f(k);
end

问题求解:

就上述问题进行求解

e=[0,-1,-1,-1];
f=[2.04,2.04,2.04,2.04];
g=[-1,-1,-1,0];
r=[40.8,0.8,0.8,200.8];
x = Tridiag(e,f,g,r)
>> Tridiag_test
x =
   65.9698   93.7785  124.5382  159.4795

声明:文章来源于笔者学习【美】Steven C. CHapra所著,林赐译 《工程于科学数值方法的MATLAB实现》(第4版)的笔记,如有谬误或想深入了解,请翻阅原书。文章来源地址https://www.toymoban.com/news/detail-413963.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日
    浏览(50)
  • 数值线性代数: Krylov子空间法

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

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

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

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

    定义 对于一个 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日
    浏览(61)
  • 线性代数:正交变换学习笔记

    在线性代数中,如果一个矩阵 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日
    浏览(58)
  • 线性代数——高斯消元 学习笔记

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

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

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

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

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

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

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

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

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

    2023年04月08日
    浏览(79)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包