台湾国立大学郭彦甫Matlab教程笔记(21)

today:
linear equation 线性方程
linear system 线性系统

我们先看第一部分

linear equation

假定一个线性方程组:

下面我们用矩阵的形式表示这个二元一次方程组:Ax=b的形式

WHy matrix form?

可能多元,问题本身很复杂,矩阵方法可以通吃。
下面是一道电路题目:给定电源电压和电阻值,求解电流值是多少

老师口中的tilde 是波浪线的意思

这道题目的求解需要用到基尔霍夫电流定律和基尔霍夫电压定律,这里不详细展开
基尔霍夫电压定律 voltage law:一个回路电压和为零
基尔霍夫电流定律 current law:一个节点的流入电流和流出电流代数和为0

列出来的线性方程组如下:

我们需要求解是i,转化成矩阵是这样的形式:

得到的矩阵为:

usually when solving linear equations:
1.
A and b are known
2.
x is unknown

solving linear equations求解线性方程

两类方法:
1.消去法 successive elimination (through factorization)
2.克拉姆法则(Cramer’s method)

第一类消去法里面又分类

第一种:高斯消去法Gaussian Elimination

例题:


把方程组写成矩阵的形式,增广矩阵

利用矩阵的性质,第一行*(-2)加到第二行中,第一行乘以(-1)加到第三行中,得到下面的矩阵(行列式,矩阵的化简,多出现0,便于计算和分析)下图得到上三角

这样就可以计算出来x3等于多少 ,x3=1(只看第三行)
然后把x3=1带入到第二个方程,解出来x2,然后再代入到第一个方程,解出来x1

这个过程就是高斯消去法的思路

下面我们看在matlab中如何使用Gaussian Elimination

Gaussian Elimination --rref()

首先把方程组表示成为增广矩阵的形式


代码表示:
[A b]表示的是一个增广矩阵

A=[1 2 1 ;2 6 1;1 1 4];
b=[2;7;3];
R=rref([A b])

我们执行这段代码看看这个方程组解的情况:

以上表示x1=-3;x2=2;x3=1;也就是方程组的解

接着看下一个消去的方法:

LU Factorization追赶法

这个是我一篇博文里记录的:追赶法
factorization 是因数分解的意思
L:lower-triangular matrix下三角矩阵
U:upper-triangular matrix上三角矩阵

思路是把A矩阵拆分成两个三角阵


两个三角阵是这样的形式:A等于L的逆矩阵乘以U矩阵

因式分解矩阵的目的是:把L的inverse 乘以U代入得到下式,然后把Ux令为y,然后解的问题就转化为:先求y,然后求x。
这样处理,因为三角行列式有一半是0,求解起来变得简单。

知道追赶法的原理了,我们现在来看一下下三角矩阵和上三角矩阵


下面的问题是:如何得到这个L和U矩阵呢?
下图中左边乘以很多Li,最终是让右边成为一个上三角矩阵(左下角全为零),这些L的目的是一列一列的来计算,一列一列的让其变成零

通过矩阵乘法,左边乘
A=inv(L)U
LA=L
inv(L)*U
LA=U

怎么算呢?举个例子

给定一个A矩阵

解体过程:
因为A左边乘的是一个下三角矩阵,其主对角线上的元素全为1,右上角全为零。
现在,让L左下角等于什么,使得运算完成只有右边U的第一列为零?


求解:u(2,1)是L的第二行A的第一列得到的结果,可以求得 L(2,1)=-2
同理u(3,1)=L的第三行
A的第一列,可以求得L(3,1)=-4
所以,把这两个数放进去,计算

然后以此类推:L1A左边还要乘以L2(也是一个下三角矩阵:对角线还是1)

L2(3,2)需要填什么使得右边U第二列下面也变成零(使之不断朝向上三角矩阵靠近)
同理,L2(3,2)=-2
这样就算出来U上三角矩阵长什么样子

而且,我们有了L2和L1,所有下三角矩阵也有了 L=L2*L1

下一步呢?
算出来L的inverse, 和b矩阵,来求y矩阵

求出来y之后,用u矩阵和y矩阵来求x即可。

通过以上具体的例子,读者肯定对这个追赶法(上下三角分解法)的原理有了进一步的认识。
下面就看matlab中具体指令是怎么样的

LU Factorization -lu()函数

还是这个矩阵A,矩阵b

A=[1 1 1;2 3 5 ; 4 6 8];
[L,U,P]=lu(A);
通过函数lu()可以求出原矩阵的上三角矩阵U和下三角阵L
然后:
inv(L)%L矩阵的逆矩阵


算出来,上面两个式子:

下面笔者实操一下看看具体的matlab实现过程:

代码:
A=[1 1 1;2 3 5 ; 4 6 8];
[L,U,P]=lu(A)%得到下三角矩阵和上三角阵
得到的结果:

然后需要求inv(L)
invL=inv(L)
求得结果:


然后需要invL*y=b来求解,需要回顾前面老师讲的线性方程组的求法:高斯消去法rref()函数
当然要输入进来b矩阵 b=[1 2 7]’


用高斯消去法求解y
y=rref([invL,b])
求得y矩阵:

同样的道理,高斯消去法求解x矩阵
这里y的解分别是y1=2,y2=7.5,y3=4;
需要重新整理y矩阵,得到y的解矩阵

y1=y(:,4)
结果:

然后求解x
x=rref([U,y1])
得到x的结果:

x1=x(:,4)


笔者:上次参加上海市数学建模培训时候,2018年A题关于防热服的题目,其中关于矩阵的运算用到了追赶法,因为数据量比较大,得到的线性方程组很多,计算量很大,直接来高斯消去法很慢或者解不出来,老师讲到的数据处理的技巧就是追赶法的应用。

希望读者好好体会这个追赶法的使用,可以很好的简化计算的复杂度,尤其是数据量很大的时候。

【总结一下】
本文记录了线性方程组的一些解法。
【1】高斯消去法rref()函数。
【2】追赶法:上下三角阵:Ax=b ,A =inv(L)U
得到 y=U
x
先求解:inv(L)*y=b
再求解:Ux=y

台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)相关推荐

  1. 台湾大学郭彦甫matlab百度云,台湾国立大学郭彦甫Matlab教程笔记(23) linear systems...

    台湾国立大学郭彦甫Matlab教程笔记(23) linear systems linear system线性系统 线性系统和线性方程组实际上是解决的两类不同的问题. 下面一个系统.这个系统 是一个矩阵 ...

  2. 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)

    台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...

  3. 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)

    台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric) symbolic vs. numeric符号法和数值法的区别对比 symbolic 1)advantages ...

  4. 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration

    台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration 数值积分 calculating the numerical value of a definite inte ...

  5. 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation

    台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...

  6. 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分

    台湾国立大学郭彦甫Matlab教程笔记(15) Polynomial integration多项式积分 一个多项式和它的积分如下 MATlAB中如何计算积分? polynomial integrati ...

  7. 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分

    台湾国立大学郭彦甫Matlab教程笔记(14) today: polynomial differentiation and integration多项式微分与积分 numerical differen ...

  8. 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下

    台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...

  9. 台湾国立大学郭彦甫Matlab教程笔记(11) advanced 2D plots 上

    台湾国立大学郭彦甫Matlab教程笔记(11) today: 1.advanced 2D plots 2.color space色彩使用 3.3D plots 图形概览,做研究的时候需要选择图形 sp ...

最新文章

  1. 总结—elasticsearch启动失败的几种情况及解决
  2. python处理svg 平移 旋转_d3.js封装文本实现自动换行和旋转平移等功能
  3. mysql pool not open_安装 MariaDb 时报错:Could not open mysql.plugin table
  4. wxWidgets:显示如何从 DLL 使用 wx 的示例
  5. jquery插件 autoComboBox 自动创建联动的下拉框 如:省市区联动
  6. 赠与大学毕业生_出售,赠与或交易iPhone之前应该做什么
  7. 写博客的这几个月,获益良多
  8. iOS buttonWithType:101 苹果私有api
  9. 计算机技能大赛试题及答案,全国中职计算机技能大赛(园区网)试题及参考答案...
  10. 用Golang写一个搜索引擎(0x03)
  11. python判断是否为素数的函数 是返回字符串yes_编写函数,判断一个数字是否为素数,是则返回字符串 YES ,否则返回字符串 NO 。_学小易找答案...
  12. mysql language sql immutable_sql - PostgreSQL是否支持“不区分重音”排序规则?
  13. 微信8.0自动发送炸弹python脚本
  14. 中国地质大学英语语音学习笔记(三):音节与单词变形(ed,es,ing,est,er,派生等)导致的音节数和读音变化
  15. 功能测试数据测试之因果图分析方法
  16. 产品经理必修课(4):深挖需求
  17. 宁德时代与蔚来签署全面战略合作协议;中国通信服务委任闫栋为公司总裁 | 美通企业日报...
  18. java求sobel算子代码_sobel算子原理及opencv源码实现
  19. virtual 关键字
  20. Visual Studio安装与使用教程

热门文章

  1. c mysql封装 jdbc_彻底封装JDBC操作MySQL的连接。
  2. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第4章-具有随机扰动的多智能体系统脉冲一致性
  3. 【Paper】2016_Cooperative UAV-UGV modeled by Petri Net Plans specification
  4. 【Matlab 图像】bwlabel() 连通域及图像分割
  5. PyTorch 实现经典模型5:ResNet
  6. 2.11 总结-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  7. 3.6 权值初始化-机器学习笔记-斯坦福吴恩达教授
  8. verilog基础篇--常用的信号生成模块
  9. HTTP Server Mock 从手工到平台的演变(二)
  10. Notadd 4.0.0-alpha.1 基于 nest.js 的微服务架构