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

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


目录

一、取逆和“左除”

取逆

左除

二、克莱姆法则

代码实现:

问题求解:

三、高斯消元法

原理:

代码实现:

问题求解:

四、三对角方程组的求解

代码实现:

问题求解:


一、取逆和“左除”

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

  • 取逆

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

故   x=inv(A)*b

  • 左除

x=A\b


二、克莱姆法则

学习过线性代数的同学应该对克莱姆法则并不陌生,这里不再赘述,只是讲一下在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):

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

向前消元:第一阶段是将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~=kAug([k,ipr],:) = Aug([ipr,k],:);%交换:将绝对值大的数作主元endfor i=k+1:nfactor = 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:1x(i)=(Aug(i,nb)-Aug(i,i+1:n)*x(i+1:n))/Aug(i,i);
end
end

问题求解:

问题:

%%高斯消元法
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.500019.8000

四、三对角方程组的求解

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

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

代码实现:

function x = Tridiag(e,f,g,r)
%求解三对角方程组
%   由于三对角方程的系数矩阵稀疏,运算量与n成正比,而不是高斯消元的n^3
%%输入:
%e =下对角线
%f = 主对角线
%g =上对角线
%r = 右向量
%%输出:
%x=方程的解向量
n=length(f);
for k=2:nfactor=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:1x(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版)的笔记,如有谬误或想深入了解,请翻阅原书。

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

  1. MATLAB数值分析学习笔记:多项式拟合

    在很多情况下,我们需要估计精确值之间的可能取值,常用的方法是多项式插值法.多项式插值法的原理是n个数据点可以确定n-1次多项式:例如三点确定一条抛物线. 工程上常用的多项式插值的方法有两种:牛顿插值法 ...

  2. 第2-2课:线性代数方程组的求解

    多元一次方程组,又称为线性代数方程组.在数值分析领域里有很多算法都会用到线性代数方程组的求解,比如三次样条曲线拟合时用到的插值算法.求解线性代数方程组可以用高斯消元法,高斯消元法是一种代数的方法,其主 ...

  3. 【数值分析学习笔记】——1、数值分析中的误差

    1.1截断误差与舍入误差 误差 类型 固有误差 模型误差 测量误差 计算误差 截断误差 舍入误差 数值分析中主要讨论的是计算误差,包括截断误差与舍入误差. (1)舍入误差:由于数字计算机不能准确地表示 ...

  4. 用matlab求解线性代数方程组,线性代数方程组数值解法与MATLAB实现综述

    线性代数方程组数值解法及MATLAB 实现综述 廖淑芳 20122090 数计学院 12计算机科学与技术1班(职教本科) 一.分析课题 随着科学技术的发展,提出了大量复杂的数值计算问题,在建立电子计算 ...

  5. 高等数值计算方法学习笔记第6章【解线性代数方程组的迭代方法(高维稀疏矩阵)】

    高等数值计算方法学习笔记第6章[解线性代数方程组的迭代方法(高维稀疏矩阵)] 一.引言 1.例题(说明迭代法的收敛性研究的重要性) 2.定义(迭代法,迭代法收敛)&解误差 二.基本迭代法 1. ...

  6. matlab求解非线性常微分方程组,Matlab数值求解非线性常微分方程 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...

    我最近也在用牛顿迭代解一个非线性方程组 Newton迭代有程序 我拷给你你 编写Newton迭代法的M文件NewtonIterate.如下: function s=NewtonIterate(x,ep ...

  7. 龙格库塔法解微分方程组的matlab程序,MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc...

    MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc MATLAB实例源码教程龙格库塔法求解微分方程组源代码实例题目用经典 Runge-Kutta方法求下列一阶微分方程组的近似解y1 ...

  8. 工程数学(数值分析)第三讲:求解线性代数方程组

    文章目录 第三讲:求解线性代数方程组 克拉默法则 高斯消元法 列选主元高斯消元法 三角分解Dolittle 范数&方程性态 谱半径 雅可比迭代法 高斯赛德尔迭代法 第三讲:求解线性代数方程组 ...

  9. 线性代数方程组数值解法

    线性代数方程组的数值解法 线性代数方程组数值解法 一.向量范数与矩阵范数 1.1 向量范数 1.1.1 满足三个条件(向量范数公理) 1.1.2 常用的向量范数 1.2 矩阵范数 1.2.1 矩阵范数 ...

最新文章

  1. JS - Promise使用随笔
  2. 第十五周程序阅读-范型程序设计(3)
  3. 卡牌系统psv游戏推荐_索尼PSV已经凉了吗?等等,2020年六月还有一款PSV游戏发售...
  4. ****** 三十五 ******、软设笔记【网络基础】-安全性、可靠性与系统性能评测-数据安全与保密...
  5. DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义
  6. safari only css hack,css hack将Safari和Chrome同时作为目标单独使用
  7. linux info文件夹,详解Linux系统中查询文档的man和info命令
  8. nsga2代码解读python_代码资料
  9. transact和onTransact的区别
  10. laravel傻瓜手册6(模型)
  11. WinDriver_资料
  12. python面板数据模型操作步骤_面板数据模型估计一般要做哪些步骤?
  13. usb调试与adb调试
  14. python3手机版画图软件_Python实现画图软件功能方法详解
  15. PCB板常用检测方法
  16. 如何识别媒体偏见_超越偏见:为什么我们不能仅仅“修正”面部识别
  17. 数据结构与算法--单链表相关面试题
  18. GaussDB数据库安装详解
  19. i3 7100黑苹果_黑苹果系统是否好用?
  20. 广告坑死人,这年头如何辨别互联网金融的可靠性?

热门文章

  1. Scratch软件编程等级考试二级——201909
  2. 【C语言】数组的强化训练(详细讲解+源码展示)
  3. 搞定这套 Python 爬虫面试题,面试会 so easy
  4. matplotlib模块总结一【基本绘图操作】
  5. hypermesh闪退启动解决(最全!!!)
  6. 【HGNN】北邮循序渐进研究HGNN
  7. 找回SecureCRT密码
  8. zookeeper介绍及使用
  9. DevOps方法论掌握这四点,实践出真知
  10. 关于图片本身大小、格式、内存、压缩相关知识