台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)
台湾国立大学郭彦甫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=Linv(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=Ux
先求解:inv(L)*y=b
再求解:Ux=y
台湾国立大学郭彦甫Matlab教程笔记(21)linear equations(高斯消去法和追赶法)相关推荐
- 台湾大学郭彦甫matlab百度云,台湾国立大学郭彦甫Matlab教程笔记(23) linear systems...
台湾国立大学郭彦甫Matlab教程笔记(23) linear systems linear system线性系统 线性系统和线性方程组实际上是解决的两类不同的问题. 下面一个系统.这个系统 是一个矩阵 ...
- 台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix逆矩阵法)
台湾国立大学郭彦甫Matlab教程笔记(22) Cramer's method(Inverse matrix) matrix left division左除:\ or mldivide() solvi ...
- 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)
台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric) symbolic vs. numeric符号法和数值法的区别对比 symbolic 1)advantages ...
- 台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration
台湾国立大学郭彦甫Matlab教程笔记(17)numerical integration 数值积分 calculating the numerical value of a definite inte ...
- 台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numerical differentiation
台湾国立大学郭彦甫Matlab教程笔记(16) 数值微分 numeric differentiation 复习:diff()函数用来计算vector前后 entry的差异 数值微分继续 various ...
- 台湾国立大学郭彦甫Matlab教程笔记(15)polynomial integration 多项式积分
台湾国立大学郭彦甫Matlab教程笔记(15) Polynomial integration多项式积分 一个多项式和它的积分如下 MATlAB中如何计算积分? polynomial integrati ...
- 台湾国立大学郭彦甫Matlab教程笔记(14)polynomial differentiation多项式微分
台湾国立大学郭彦甫Matlab教程笔记(14) today: polynomial differentiation and integration多项式微分与积分 numerical differen ...
- 台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下
台湾国立大学郭彦甫Matlab教程笔记(12) advanced 2D plot 下 上文记录的是关于统计的图标的绘制 下面我们来到另一个模块:颜色 fill()填充函数 功能:某一个封闭曲线,图上特 ...
- 台湾国立大学郭彦甫Matlab教程笔记(11) advanced 2D plots 上
台湾国立大学郭彦甫Matlab教程笔记(11) today: 1.advanced 2D plots 2.color space色彩使用 3.3D plots 图形概览,做研究的时候需要选择图形 sp ...
最新文章
- 总结—elasticsearch启动失败的几种情况及解决
- python处理svg 平移 旋转_d3.js封装文本实现自动换行和旋转平移等功能
- mysql pool not open_安装 MariaDb 时报错:Could not open mysql.plugin table
- wxWidgets:显示如何从 DLL 使用 wx 的示例
- jquery插件 autoComboBox 自动创建联动的下拉框 如:省市区联动
- 赠与大学毕业生_出售,赠与或交易iPhone之前应该做什么
- 写博客的这几个月,获益良多
- iOS buttonWithType:101 苹果私有api
- 计算机技能大赛试题及答案,全国中职计算机技能大赛(园区网)试题及参考答案...
- 用Golang写一个搜索引擎(0x03)
- python判断是否为素数的函数 是返回字符串yes_编写函数,判断一个数字是否为素数,是则返回字符串 YES ,否则返回字符串 NO 。_学小易找答案...
- mysql language sql immutable_sql - PostgreSQL是否支持“不区分重音”排序规则?
- 微信8.0自动发送炸弹python脚本
- 中国地质大学英语语音学习笔记(三):音节与单词变形(ed,es,ing,est,er,派生等)导致的音节数和读音变化
- 功能测试数据测试之因果图分析方法
- 产品经理必修课(4):深挖需求
- 宁德时代与蔚来签署全面战略合作协议;中国通信服务委任闫栋为公司总裁 | 美通企业日报...
- java求sobel算子代码_sobel算子原理及opencv源码实现
- virtual 关键字
- Visual Studio安装与使用教程
热门文章
- c mysql封装 jdbc_彻底封装JDBC操作MySQL的连接。
- 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第4章-具有随机扰动的多智能体系统脉冲一致性
- 【Paper】2016_Cooperative UAV-UGV modeled by Petri Net Plans specification
- 【Matlab 图像】bwlabel() 连通域及图像分割
- PyTorch 实现经典模型5:ResNet
- 2.11 总结-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- 3.6 权值初始化-机器学习笔记-斯坦福吴恩达教授
- verilog基础篇--常用的信号生成模块
- HTTP Server Mock 从手工到平台的演变(二)
- Notadd 4.0.0-alpha.1 基于 nest.js 的微服务架构