MATLAB 随笔 1
一、界面使用
1. clear 命令——从工作区中删除项目、释放系统内存
此 MATLAB 函数从当前工作区中删除所有变量,并将它们从系统内存中释放。
语法
clear
clear name1 ... nameN
clear -regexp expr1 ... exprN
clear ItemType
2. clc 命令——清空命令行窗口
此 MATLAB 函数 清除命令行窗口中的所有文本,让屏幕变得干净。运行 clc 后,您不能使用命令行窗口中的滚动条查看以前显示的文本。但您可以在命令行窗口中使用向上箭头键 ↑ 从命令历史记录中重新调用语句。
语法: clc
3. CTRL + T ——多行注释
选中多行后使用快捷键,可对选中的多行进行注释,可重复注释。
4. CTRL + R ——取消多行注释
选中多行后使用快捷键,可对选中的多行取消一次注释,可重复取消多次注释。
二、运算基础
1. MATLAB的变量
- 变量名必须以字母开头,之后可以是任意的字母、数字、下划线。
- 变量名中字母区分大小写。
- 变量名不能超过63个字符,第63个字符之后的将会被忽略
- 变量不能和MATLAB的关键字同名,关键字完整列表可以通过
iskeyword获取。 - 特殊变量:
ans、pi、inf等。
三、矩阵基础
1. 矩阵的创建:
①直接输入法——适合矩阵中元素较少的情况
输入矩阵时,用 [] 作为标识符号,矩阵内的所有元素都要在中括号内。矩阵的同行元素用逗号分隔,行与行之间用分号或者回车分隔,例:
a = [1 , 2 , 3; 4 , 5 , 6]
在MATLAB中,将一个或多个元素插入到已有矩阵现有的行列索引边界外,此时会自动对矩阵的大小进行拓展,未进行赋值的元素默认为0。例:
A=[1 , 2; 3 , 4];
A(3,3) = 9
此时:
②函数创建法——生成特定或者常用的矩阵。
| 函数 | 作用说明 |
|---|---|
zeros | 生成一个全为0的矩阵 |
ones | 生成一个全为1的矩阵 |
eye | 生成一个对角线全是1,其余元素全是0的单位矩阵 |
rand | 生成一个0-1之间均匀分布的随机小数 |
randi | 生成一个指定范围内均匀分布的随机整数 |
randn | 生成一个服从标准正态分布,即 |
例:
zeros(10) %生成一个10行10列,且元素都为0的方阵
zeros(10,9) %生成一个10行9列,且元素都为0的矩阵
rand(m,n) %生成一个m行n列,元素为0到1之间随机小数的矩阵
randi([imin,imax],m,n) %生成一个m行n列,元素为imin到imax之间随机整数的矩阵
randn(m,n) %生成一个m行n列,元素服从标准正态分布N(0,1)的矩阵
③本地文件导入
支持格式:
- .txt、.dat、.csv等(逗号分隔)
- .xlsx、.xls、.obs等(电子表格)
2. 矩阵的修改和删除:
修改
A = [1 , 2 , 3; 4:6 , 7:9]; %创建矩阵A
A(2,2) = 10; %将第2行第2列的元素修改为10
A(2,:)= 0 ; %将第2行的全部元素修改为0
A([1,2];[2,3]) = 1; %把(1,2)(1,3)(2,2)(2,3)的元素修改为1
删除
在MATLAB里,如果把等号右边设为一个空向量 [],就能实现“删除”的效果,如:
A = [1:3;
4:6;
7:9];
A(:,2) = []
A(end,:) = [] %删除矩阵A的最后一行
此时:
这样操作时,只能一次删除整行或整列,不能删除单个元素,否则会破坏矩阵的长方形结构;若要灵活访问单个元素,可以用线性索引来实现。
线性索引
在 MATLAB 中,除了用 (行,列) 的方式访问元素外,还可以把整个矩阵当作一个按列优先排成的 “长向量” 来编号,这种方式叫做线性索引,即先把第一列从上到下编号完,再接着编号第二列,依次类推。我们可以使用线性索引来对单个元素进行修改和删除。
A = [1:3; 4:6; 7:9];
A(4) = 0
A(7) = [];
此时输出:
A =
1 0 3
4 5 6
7 8 9
A =
1 4 7 0 5 8 6 9
当用 A(k)=[] 删除元素时,MATLAB会先把矩阵按列展开成一个长向量,再删掉第k个位置的元素;这样删除后结果不再是二维矩阵,而会被压缩成一个行向量。
3. 矩阵的拼接重构重排
矩阵的拼接
①横向拼接
将两个矩阵在列方向并排放置,即左右相接,要求两者行数相同。可用 [A, B]、[A B] 或 cat(2, A, B) 将矩阵A与B横向拼接为更大的矩阵。
②纵向拼接
将两个矩阵沿行方向上下连接,即上下拼接,要求两者列数相同。可使用 [A; B] 或 cat(1, A, B) 将矩阵A与B纵向拼接为一个更大的矩阵。
矩阵的重构重排
reshape 函数 —— 通过重新排列现有元素来重构数组
reshape 函数用来改变数组或矩阵的形状,但不会改变里面的数据。比如,reshape(A, [2,3]) 会把数组 A 重新排成一个 2 行 3 列的矩阵。给定的大小向量 sz 至少要有两个数,而且这些数相乘的结果必须等于 A 里的元素总数。重构前后,矩阵的线性索引顺序保持不变,只是元素在行列中的排列方式不同。
例:
A = randi([1,10],2,6)
B = reshape(A, [3 , 4 ])
输出:
A =
10 9 5 8 7 9
5 2 10 10 1 10
B =
10 2 8 1
5 5 10 9
9 10 7 10
在 reshape 中,如果不想手动计算元素总数,可以在大小向量 sz 里用一个 空向量 [] 来让MATLAB自动推算对应的维度。
比如:
B = reshape(A, [2, []])
这表示把A改成 2 行,列数由MATLAB自动计算,使得元素总数不变。
sort 函数 —— 对向量或矩阵的元素进行排序
sort 函数用于对向量或矩阵中的元素按大小进行排序。
基本用法为 sort(A, dim),其中 dim 表示排序的方向。
在函数后面加上 'descend' 参数,可以把默认的升序改为降序。
- 当
dim = 1或省略时,沿着**行方向(从上到下)**对矩阵的每一列进行排序; - 当
dim = 2时,沿着**列方向(从左到右)**对矩阵的每一行进行排序。
例如:
sort(A,1) % 每一列按升序排列
sort(A,2) % 每一行按升序排列
sort(A,'descend') % 每一列按降序排列
sortrows 函数 —— 按某一列对整个矩阵的行进行排序
sortrows 函数用于根据矩阵中某一列的大小,对整行数据进行排序。它与 sort 不同:sort 是单独对每一列或每一行排序,而 sortrows 是整行移动,保持行内元素之间的对应关系。
基本语法:
sortrows(A, col)
sortrows(A, col, 'descend')
其中
A为要排序的矩阵;col表示按照第几列进行排序;'descend'表示按**降序(从大到小)**排列,默认是升序(从小到大)。
4. 矩阵的计算
调用函数运算
| 函数名 | 函数的作用 | 英文含义 |
|---|---|---|
sum | 求和函数 | sum |
prod | 求乘积函数 | product |
cumsum | 计算累积和 | cumulative sum |
diff | 计算差分 | difference |
mean | 计算平均值 | mean |
median | 计算中位数 | median |
mode | 计算众数 | mode |
var | 计算方差 | variance |
std | 计算标准差 | standard deviation |
min | 求最小值 | minimum value |
max | 求最大值 | maximum value |
大部分矩阵统计类函数(如 sum、mean、max、min、std 等)都可以使用参数 'all' 和 'omitnan' 来分别对全部元素计算或忽略缺失值(NaN)。
sum(A,1) % 显式沿列计算,1 可省略
sum(A,2) % 沿行计算,每行分别求和
sum(A,'all') % 将所有元素相加
sum(A,2,'omitnan') % 沿行求和且忽略 NaN(有缺失值时常用)