小朋友,你学会了吗?
数组(矩阵)的生成及初等运算
基本的数组操作
数组的运算
数组的保存和载入
矩阵运算
矩阵分析
稀疏矩阵
数组(矩阵)的生成及初等运算
如何创建数组
直接举例子,看完下面的例子,你就会所有数组的简单直接创建了。
还可以用zeros、eye函数产生特定的数组,前者可以产生全零数组,后者可以产生单位阵。
使用冒号表达式生成向量
生成行向量也有相应的函数linspace它用于生成线性间距向量。
x是从-5开始,到5结束,包含一百个元素的行向量。
y是从-5开始,到5结束,包含一百个元素的行向量。
注意虽然结果相同,但是第一个100是默认的,无法修改,你只能改变起点和终点,但无论如何,它的元素数量只能是100个;第二个是可以修改的,三个参数分别是起点、终点、元素个数。
基本的数组操作
数组元素的寻址
数组元素的查找
查找非零元素find函数
下面的例子查找了a矩阵的非零元素,返回的是元素位置,可以发现,除1位置外全部非零。
find函数的其他用法
运行输出,结果,对照一下看看是不是你想的样子。
数组元素的排序
使用sort函数
有下面几种写法
B = sort(a) 按升序对a的元素进行排序。
a是向量就直接进行排序。
a是矩阵就按照列作为向量并对每列进行排序。
B = sort(a,dim) 返回a沿维度 dim 的排序元素,升序。dim是1就是按列排序,2是按行排序。
B = sort( ,direction) 按direction指定的顺序对a的元素排序。‘ascend’ 表示升序(默认值),‘descend’ 表示降序。
B = sort( ,Name,Value) 指定用于排序的其他参数。例如,sort(A,‘ComparisonMethod’,‘abs’) 按模对 A 的元素进行排序。
矩阵转置
转置就和线性代数中很像,只要在矩阵上加 ‘ 就可以实现转置
转置前后。
矩阵重排
重排都是按列的顺序来排的。
矩阵拆分
注意:空赋值只能具有一个非冒号索引。如果行列都是[1,3]会报错
矩阵连接
使用cat函数
矩阵变换
运行结果(对角线的结果比较出乎意料)
数组的运算
此处讲的……还好帮助文档有相关的内容。
数组运算可针对向量、矩阵和多维数组的对应元素执行逐元素运算。如果操作数的大小相同,则第一个操作数中的每个元素都会与第二个操作数中同一位置的元素匹配。如果操作数的大小兼容,则每个输入都会根据需要进行隐式扩展以匹配另一个输入的大小。
解释兼容是什么基本运算兼容大小数组,类似于一个最小公倍数的道理。一个3和一个2,最近小公倍数是6,所以结果就是6;两个都是10,最小公倍数就是10,独一结果也是10。
数组的算数运算符包括下面这些
运算符 | 用途 | 说明 | 函数 |
---|---|---|---|
+ | 加法 | A+B 表示将 A 和 B 加在一起。 | plus |
+ | 一元加法 | +A 表示返回 A。 | uplus |
- | 减法 | A-B 表示从 A 中减去 B | minus |
- | 一元减法 | -A 表示对 A 的元素求反。 | uminus |
.* | 按元素乘法 | A.*B 表示 A 和 B 的逐元素乘积。 | times |
.^ | 按元素求幂 | A.^B 表示包含元素 A(i,j) 的 B(i,j) 次幂的矩阵。 | power |
./ | 数组右除 | A./B 表示包含元素 A(i,j)/B(i,j) 的矩阵。 | rdivide |
.\ | 数组左除 | A.\B 表示包含元素 B(i,j)/A(i,j) 的矩阵。 | ldivide |
.’ | 数组转置 | A.’ 表示 A 的数组转置。对于复矩阵,这不涉及共轭。 | transpose |
==一元运算:==参加运算的只有一个值,像乘方、开方……
==二元运算:==作用于两个变量,加减乘除……
矩阵运算
矩阵运算遵循线性代数的法则,与多维数组不兼容。运算双方所需输入的大小和形状取决于所执行的运算。对于非标量输入,矩阵运算符与对应的数组运算符计算出的答案通常不同。
帮助文档给出了如下例子。
矩阵的算数运算符如下
运算符 | 用途 | 说明 | 函数 |
---|---|---|---|
* | 矩阵乘法 | C = A*B 表示矩阵 A 和 B 的线性代数乘积。A 的列数必须与 B 的行数相等。 | mtimes |
\ | 矩阵左除 | x = A\B 是方程 Ax = B 的解。矩阵 A 和 B 必须拥有相同的行数。 | mldivide |
/ | 矩阵右除 | x = B/A 是方程 xA = B 的解。矩阵 A 和 B 必须拥有相同的列数。用左除运算符表示的话,B/A = (A’\B’)’。 | mrdivide |
^ | 矩阵幂 | A^B 表示 A 的 B 次幂(如果 B 为标量)。对于 B 的其他值,计算包含特征值和特征向量。 | mpower |
. | 复共轭转置 | A’ 表示 A 的线性代数转置。对于复矩阵,这是复共轭转置。 | ctranspose |
点积,叉积,混合积
点积是dot指令。得到数值。直接举一个例子。
叉积是cross指令。得到向量。直接举一个例子。
混合积,点积与叉积的混合。
范数
范数,是具有“长度”概念的函数。用于测量两个向量、函数……之间的距离。使用norm函数。
范数的例子如下,有这几种效果。
这是帮助对奇异值的解释(有点深奥了啊,更详细的内容请查阅matlab奇异值的解释)
数组的保存和载入
使用函数save和load,就是运行一个函数,接下来贴出函数的使用方法(大全)
矩阵分析
主要说明几个矩阵的函数。
diag提取矩阵对角线(或生成一个对角矩阵)函数(不一定是主对角线)。对角线的序号对应如下:
rot90将数组旋转 90 度
det求行列式的值
rank求矩阵的秩
eig特征值和特征向量
inv求逆矩阵
这些函数的具体使用见帮助文档,不再详细解释,名词不太理解的话最好去复习一下线性代数相关知识。
其他的一些函数已经在数组的基本操作中提及了,可以翻到本文前面查看。
稀疏矩阵
没错,你没有看错稀疏不是系数,稀疏矩阵就是含有0或者没有值的量较多的矩阵。稀疏矩阵可以使用较少的空间保存这样的矩阵。用sparse函数生成稀疏矩阵。
其实帮助里还有好多相关函数,不过教程没有提。
s=sparse([3 2 3 4 1],[1 2 2 3 4],[1 2 3 4 5],4,4,5)
这样的写法会生成这样的稀疏矩阵。
也就是第一个中括号是行,第二个中括号是列,第三个中括号是值,生成了4*4矩阵,一共五个非零元素。下方的保存方式显然比直接保存矩阵所占用的内存少很多。
稀疏矩阵转换为满矩阵用full函数。
计算稀疏矩阵非零元素个数使用nnz函数。
spy函数可以绘制稀疏函数的分布图。图是这个样子的。
spdiags用于提取并创建稀疏带状和对角矩阵。
逻辑运算
真或假(布尔)条件。logical 数据类型分别使用数字 1 和 0 代表 true 或 false 状态。某些 MATLAB函数和运算符返回逻辑值以指示是否满足某个条件。
函数/符号 | 功能 |
---|---|
and/& | 与 |
not/~ | 非 |
or/竖线 | 或 |
xor | 异或 |
all | 确定所有的数组元素是为非零还是 true |
any | 确定任何数组元素是否为非零 |
false | 假 |
find | 查找非零元素的索引和值 |
islogical | 确定输入是否为逻辑数组 |
logical | 将数值转换为逻辑值 |
true | 真 |
关系运算
函数/符号 | 功能 |
---|---|
eq/== | 确定相等性 |
ge/>= | 决定大于或等于 |
gt/> | 确定大于 |
le/<= | 确定小于等于 |
lt/< | 确定小于 |
ne/~= | 确定不相等性 |
isequal | 确定数组相等性 |
isequaln | 测试数组相等性,将 NaN 值视为相等 |
注意,=是赋值,==是比较。