【MATLAB】(四)MATLAB在线性代数中的应用
文章目录
- 前期教程
- 概述
- 一、矩阵
- 1 矩阵的创建
- a. 直接创建
- b. 创建等距数组
- c. 创建等比数组
- d. 特殊矩阵
- e. 创建对角矩阵
- f. Vandermonde矩阵
- g. 符号矩阵的生成
- h. 多项式伴随矩阵
- i. 高阶矩阵的创建
- 2 矩阵的修改
- 2.1 如何获取一个矩阵的大小
- 2.2 矩阵中的元素操作
- 2.3 一些特殊子矩阵的提取
- 2.4 矩阵变形——reshape //2023.1.4
- 3 矩阵的运算
- 二、线性相关与方程组
- 1 多项式
- 2 向量组的相关性和极大无关组
- 3 齐次线性方程组的解
- 4 非齐次线性方程组的解
- 三、特征值与二次型
- 1 求矩阵的特征值
- 2 二次型的标准化
- 3 二次型正定的判断
前期教程
- 【MATLAB】(一)基本使用入门
- 【MATLAB】(二)基本使用拾遗
- 【MATLAB】(三)MATLAB在高等数学中的应用
概述
本篇博客主要用于记录MATLAB在线性代数中的应用。
一、矩阵
1 矩阵的创建
a. 直接创建
x1 = [1 2 3 4];
x2 = [5,6,7,8]; //创建行向量,空格或逗号进行分隔列x3 = [2;3;1;4]; //创建列向量,用分号分隔行
x3 = [2 3 1 4]'; //转置的方法创建列向量A = [1 2 3;4 5 6;7 8 9];
A = [1 2 3
4 5 6
7 8 9]; //直接创建矩阵,用分号或换行实现分行
b. 创建等距数组
等距数组即线性代数中的向量,这种特殊的向量一般用于循环遍历,和高级语言中数组概念差不多,故也称为数组
注意:用步长的方式可能最后一个数取不到(最后一个数和第一个数的差值不是步长整数倍);但用函数linspace得到的数组是包含首位,共n个数(步长自动计算好了),n可以省略,省略时默认为100。
c. 创建等比数组
和函数linspace一样,首位两个数都能取到,内部的等比已经计算好了。n值也可以省略,省略时默认为50。
d. 特殊矩阵
- A = [ ] : 创建一个空矩阵,空矩阵大小为0
- B = zeros(m, n) : 创建一个m行n列的零矩阵,如果只有一个参数n,则代表创建n阶方阵(下面的也类似),注意函数名有一个"s"!
- C = ones(m, n):创建一个m行n列的全为1的矩阵,注意函数名有一个"s"!
- D = eye(m, n):创建一个m行n列的单位矩阵,注意函数名没有"s"!
- E = rand(m, n): 创建一个m行n列的在 [0, 1] 内均匀分布的随机矩阵,如果需要创建其他范围的随机矩阵,可以用其他表达式乘以该矩阵。
- F = randn(m,n):创建一个m行n列的 标准正态分布(数据范围为[-1, 1]) 的矩阵。
e. 创建对角矩阵
f. Vandermonde矩阵
在MATLAB中创建Vandermonde矩阵的调用格式为:V=vander(C)
,其中C
为一个向量(行向量或列向量无所谓),表示1,a1,a2,...,an−11, a_1,a_2,...,a_{n-1}1,a1,a2,...,an−1,得到的矩阵的阶数为C
的长度。需要注意的是,这里的Vandermonde矩阵是按行分的,而教材上是按列分的。看个例子就很容易明白了。
g. 符号矩阵的生成
在MATLAB中,输入一个表达式,实际代入计算的是它的近似值,即算出表达式的值并取一个近似。这一点从MATLAB中无法利用自然对数eee参与计算即可得知。而符号矩阵的作用就是使矩阵在计算时代入有理表达式,并在计算结果中保留有理表达式。如下图所示。
h. 多项式伴随矩阵
这里的伴随矩阵可不是线性代数中常用的A∗A^*A∗,而是多项式的伴随矩阵,这个矩阵的特点在于它的特征值为该多项式的根。其计算原理如下图所示。
调用方式为A = compan(P)
,其中P
为多项式的系数,从高次到低次。
i. 高阶矩阵的创建
比较少用,有缘再更新。
算了,有需要的还是直接看这个链接吧 ~
2 矩阵的修改
2.1 如何获取一个矩阵的大小
- [row, col] = size(A) %row为矩阵A的行数,col为A的列数
如果不需要某个参数,可以用 ~ 符号代替,表示参数缺省,如:
- [row, ~] = size(A) %表示只取矩阵A的行数row
这个在其他可以省略参数中的函数是一样的,比如只需要第1个参数和第3个参数,而省略第2个参数,则必须用 ~ 代替。否则就会把第3个参数当作第2个参数。
此外,还有其他一些获取矩阵的行列的方式:
- row = size(A, 1) %表示获取矩阵A的第一个参数,即行数
- col = size(A, 2) %表示获取矩阵A的第二个参数,即列数
- a = length(A) %返回值a = max{row, col}
2.2 矩阵中的元素操作
需要注意的是:矩阵、向量的索引都是小括号(),只有三维矩阵的索引和元胞数组(cell)是用 {},千万别搞混了!
2.3 一些特殊子矩阵的提取
- diag(A, k):表示将矩阵 A 的第 k 个对角线的元素提取组成列向量,若 k 省略 等价于k=0,表示主对角线元素。即该函数返回的是一个列向量。
- tril(A, k):表示提取矩阵A的第k个对角线以下的元素组成下三角矩阵,剩余部分补0,如果k省略,等价于k=0,即主对角线元素。该函数返回的是一个矩阵。
- triu(A, k):表示提取矩阵A的第k个对角线以上的元素组成上三角矩阵,剩余部分补0,如果k省略,等价于k=0,即主对角线元素。该函数返回的是一个矩阵。
- rot90(A):表示将矩阵A逆时针旋转90°,注意和转置运算区分开来!
- fliplr(A):表示将矩阵A左右翻转
- flipud(A):表示将矩阵A上下翻转
2.4 矩阵变形——reshape //2023.1.4
在矩阵运算过程中,经常会遇到对一个矩阵进行变形的操作,比如原来是一个向量,现在需要变成一个矩阵,就需要用到reshape
函数。
这个函数在Python中也有,但是奇怪的设定之处在于MATLAB中的reshape函数是按列堆叠的(Python中是按行堆叠的),如以下代码所示。
>> A = 1:6
>> B = reshape(A,[2,3])
A =1 2 3 4 5 6B =1 3 52 4 6
即我们想要的是
1 2 3
4 5 6
但是它却返回了
1 3 5
2 4 6
针对这个问题,最有效的方式就是先转置,再进行reshape操作,比如想要实现将一个向量转换为一个确定列数的矩阵,那么其实就是将其转换为固定行数的矩阵,然后再转置,如下所示。
>> A = [1 2 3 4 5 6]
A =1 2 3 4 5 6
>> B = reshape(A,2,[])' %行数确定,转置后为列数确定
B =1 23 45 6
3 矩阵的运算
矩阵中常用的运算总结如下表:
注意区分带点运算符和不带点运算符!
另外,左除和右除的差别在于逆矩阵乘的位置,如果是A−1BA^{-1}BA−1B,则是A\B(左除),等价于inv(A)*B,如果不是方阵,则相当于求AX=BAX=BAX=B的解;
如果是BA−1BA^{-1}BA−1,则是B/A(右除),等价于B*inv(A),如果不是方阵,等价于XA=BXA=BXA=B的解。
二、线性相关与方程组
1 多项式
poly2sym( p ):输出以向量p为系数的多项式p(x)p(x)p(x)。
polyval(p, a):返回多项式p(x)p(x)p(x)当x=ax=ax=a时的值。
roots( p ):返回多项式函数p(x)=0p(x)=0p(x)=0的所有复数根
conv(p1, p2):返回多项式p1(x)p1(x)p1(x)和p2(x)p2(x)p2(x)的乘积结果的系数
[a, b]=deconv(p1, p2):返回p1(x)p1(x)p1(x)和p2(x)p2(x)p2(x)的商式a和余式b的系数。
collect(f):对符号多项式f(syms x,即f(x) )进行合并同类项
expand(f):对符号多项式f进行展开
horner(f):对符号多项式f进行嵌套分解
factor(f):对符号多项式进行因式分解
[a, b, r] = residue(p, q):将有理分式p(x)/q(x)p(x)/q(x)p(x)/q(x)分解为最简分式之和。看下面这个例子:
[p, q] = residue(a, b, r):将简单分式之和合并为一个有理分式,即上面那个表达式的逆运算。
2 向量组的相关性和极大无关组
- rank(A):求矩阵A的秩
- rref(A):将A化为行简化阶梯形矩阵,且每个主元都化为1,其他非该行主元都化为0。如下图所示。
这个指令的一个重要应用就是可以求矩阵的逆,即将单位阵和被求矩阵放一起再进行简化。
- [R, jb] = rref(A):输出A行变换后的阶梯型矩阵R和入选极大无关组的向量序号jb,因此jb是一个向量。如下图所示。
3 齐次线性方程组的解
- B=null(A):输出A的基础解系的标准正交基,即得到的矩阵B的所有列向量为AX=0AX=0AX=0的解向量,且这些解向量标准正交。
- B=null(A, ‘r’):输出A的基础解系,矩阵B的所有列向量为AX=0AX=0AX=0的解,且不进行正交化。
显而易见,比较常用的公式是后一个,即只求出基础解系。如果B矩阵为空矩阵,表示方程组AX=0AX=0AX=0只有零解,即A满秩。
4 非齐次线性方程组的解
首先补充一下理论知识:
这里只讨论有解的情况。
- 如果A为方阵,且A的行列式不为0,方程组有唯一解。
此时可以用两种方式求解:①X=inv(A)*b或X=A\b;②克莱姆法则求解;③linsolve(A,b),这个函数要求A必须是行满秩(A可以不是方阵)。 - 如果r(A)=r(A b)=r<n,方程组有无穷多解。
此时方程组的解由齐次通解和非齐次特解组成。这里介绍两种求特解的方式:①x0=pinv(A)*b,表示求A的广义逆矩阵,再与b向量相乘;②x0=A\b,用左除法求AX=b的解。需要注意的是,两种方式求得的解一般不同,前者求的是所有解中范数最小的一个,而后者求的是所有解中含零个数最多的一个。
三、特征值与二次型
1 求矩阵的特征值
- d=eig(A):仅计算A的特征值(以向量形式d存放)
- [V, D]=eig(A):其中,D为由特征值构成的对角矩阵,V为由特征向量作为列向量构成的矩阵,且使得AV=VDAV=VDAV=VD成立。
这里有两个注意点:
1. 如果A不可相似对角化,仍然能够求出一个V矩阵,但是V矩阵不是满秩的。
2. 这里得到的V矩阵是已经单位化后的矩阵,如果A为对称矩阵,则V为正交矩阵。
- trace(A):计算矩阵A的迹。
2 二次型的标准化
- [P, T] = schur(A):A为二次型矩阵,即实对称矩阵;T为A的特征值所构成的对角矩阵;P为T对应的正交变换的正交矩阵,P的列向量为A的特征值所对应的特征向量。
经过实验发现,这个函数的作用和eig函数是一致的,即对于实对称矩阵来说,两个函数都能得到其正交变换的矩阵。
3 二次型正定的判断
一般判断二次型是否正定的方式是根据特征值,如果全为正数则为正定矩阵,但还有一种判断二次型是否正定的方法。
- [R, flag]=chol(A):如果A正定,则返回参数flag为0,如果不正定,flag为非零整数。
【MATLAB】(四)MATLAB在线性代数中的应用相关推荐
- MATLAB(五)在线性代数中的应用
MATLAB在线性代数中的应用 (一)向量组的线性相关性 求列向量组A的一个最大线性无关组,可用命令rref(A)将A化成行最简形,其中单位向量对应的列向量即为最大线性无关组所含向量,其他列向量的坐标 ...
- matlab在线性代数中的应用开题报告,矩阵应用开题报告.doc
矩阵应用开题报告 山西大同大学 09 届本科毕业论文(设计)开题报告及任务书学院:数计学院 系别:数学系 专业(专业方向):数学与应用数学 论文题目矩阵的秩及其应用指导教师施智杰职称讲师学生姓名靳倩学 ...
- matlab第八章答案,MATLAB课件第八章线性代数基础
<MATLAB课件第八章线性代数基础>由会员分享,可在线阅读,更多相关<MATLAB课件第八章线性代数基础(15页珍藏版)>请在人人文库网上搜索. 1.第八章 线性代数基础1. ...
- matlab语法手册下载,MATLAB及其在理工课程中的应用指南 第4版.pdf
作 者 :陈怀琛 出版发行 : 西安:西安电子科技大学出版社 , 2018.02 ISBN号 :978-7-5606-4737-1 页 数 : 262 原书定价 : 39.00 开本 : 16开 主题 ...
- 无差异曲线matlab算法,引入Matlab提高经济类线性代数应用能力
摘要:文章针对线性代数教学中出现的计算冗繁.概念抽象现象,提出将Matlab软件工具引入教学,以提高学生解决实际问题的能力,并举例说明Matlab在经济模型及图形直观化上的作用. 关键词:线性代数:M ...
- 常微分方程的解法 (四): Matlab 解法
常微分方程的解法求解系列博文: 常微分方程的解法 (一): 常微分方程的离散化 :差商近似导数.数值积分方法.Taylor 多项式近似 常微分方程的解法 (二): 欧拉(Euler)方法 常微分方程的 ...
- matlab程序模拟汽车理论中的数据特性图动力特性图,matlab程序模拟汽车理论中的数据特性图1.doc...
matlab程序模拟汽车理论中的数据特性图1.doc 车辆理论作业第三组第一大题确定一辆轻型货车的动力性能1.绘制发动机的使用外特性曲线N60014000NN/1000T1931329527N/100 ...
- matlab 电动力学,MATLAB在电动力学教学中的应用研究
2017年 第 6期 物理 通报 大学物理教 学 MATLAB在 电动力学教学 中的应 用研 究 李佳伟 王 婕 张 中月 王恒通 (陕西 师范大学物理学与信息技术学院 陕西 西安 71Ol19) ( ...
- matlab中三相断路器如何连接,Matlab在电力电子技术仿真中的应用 - 嵌入式基础教程...
Matlab在电力电子技术仿真中的应用 - 嵌入式基础教程 (2017-06-07 11:51:26) 1. 引言 20世纪60年代发展起来的电力电子技术,使电能可以变换和控制,产生了现代各种高效.节 ...
最新文章
- 三层交换不同VLAN间通信
- Spring mvc PostgreSQL 插入timestamp和int8
- pkuseg:一个多领域中文分词工具包
- halocn标定找旋转中心_机器人工具坐标系标定原理
- BOM函数之history对象
- DeepLesion 更新下载
- C#-JSON的序列化和反序列化
- eclipse测试java程序_java-同一项目中的Eclipse junit测试
- python基础代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)
- html中rowspan设置动态值_大众标准里机器人程序中P值的设置存在那里?
- Share Disk、Share Memory和Share Nothing的区别
- 使用GCJ编译Java程序供Matlab调用Java对象方法实践
- 实用插件(七)视频播放插件——ckplayer
- html怎么修改边距,html怎么设置div边距
- R语言 图片识别文字 PNG JPG图片转文字 OCR tesseract包
- i.MX 6ULL 驱动开发 一:搭建开发环境
- leetcode: 每个元音包含偶数次的最长字符串(前缀和 + 状态压缩(位运算、hash优化))*
- php解密出售,有会php解密的来一位
- 开发一款APP需要多少钱
- NB-IoT天线同轴电缆RG316、RG174、RG178