Misc (杂项)
用
"
来标识字符串(String); 用'
来表示字符类型(Char)优雅的MATLAB脚本是有
;
作为休止符的对赋值命令使用
;
则其复制结果不会出现在命令区。使用
clear
来清空变量,clc
来情况命令区输出.*
通过将对应的元素相乘来将数组 A 和 B 相乘。A 和 B 的大小必须相同或兼容。(即 A和 B都是数组之类的玩意 ? )作图时貌似是很重要的玩意, 必须要有。
使用
format
来控制变量显示的精度
如:format long
显示15位小数`format short` 再切换回4位小数
linspace()
与:
的区别
linspace(a,b,N)
作用:
用于产生从a
到b
之间的N点行线性的矢量。其中a
、b
、N
分别为起始值、终止值、元素个数。若默认无N
,默认点数为100。a:S:b
作用:
用于产生从a
到b
之间的矢量。其中S
指代每个数之间的间隔单位。可以使用
x'
将横向数组换成纵向数组。
meshgrid()
的使用
范例:[X,Y,Z] = meshgrid(x,y,z)
当只有
X
和Y
参数时, 返回二维坐标点, 反之亦然。作为参数的
x
和y
的定义应如下所示:x = 1:3
获取函数的多个输出 : 用
[]
[row, col] = size(x)
得到数组的横纵长度值
[value, index] = max(x)
得到数组最大值和其索引值numel()
Number of array elements
用于获得数组/矩阵的元素个数length()
获取数组/矩阵(未查证)的长度
矩阵相关
常用函数
rand(x,y)
用于生成随机数的矩阵, x
指代行 y
指代列。
zeros(x,y)
用于生成 0
的矩阵, x
指代行 y
指代列。
size(x)
查看矩阵的大小,返回 行 · 列
的格式。
统计函数
函数 | 用途 |
---|---|
min |
最小值 |
max |
最大值 |
mean |
平均数 |
median |
中位数 |
mode |
众数 |
std |
标准差 |
var |
方差 |
sum |
求和 |
prod |
元素乘积 |
可以用已有的矩阵的大小来创建新的数列。如:
rand(size(x))
。
矩阵操作
清空指定位置的元素值
data({索引}) = []
排序
[xSorted,idx] = sort({v},"descend")
-
xSorted
是已排序的数组, 顺序有后面的descend
决定 -
idx
是正确顺序的针对现有数组的索引 -
descend
-> 递减ascend
-> 递增 - 可以指定
"MissingPlacement"
的值为"last"
来放置不太正常的值到排序后数组的最下面
通过索引提取特定值
一维数组
使用 x(index)
来指定即可。
二维数组 / 矩阵
使用 x(row,column)
来指定。
指定后可以对特定值直接进行赋值操作。
使用
end
关键字可以指定”最后”的行或列
如:x = data(end, 3);
使用
:
可代表所有”行”或”列”
如:x = data(:,3);
如果只使用一种索引
x
(线性索引), 则它将按顺序从上到下遍历每列。索引可以是非连续的 如:
x = data([1 4 6])
可以构建出比较复杂的索引 如:
x = M([1 2], [1 end])
如上的代码会选出矩阵中第1,2行的最前和最后的元素
使用逻辑索引来提取
x = data(data > {数值})
这样就会将满足条件的元素添加到 x
中去
同样的,这个也支持逻辑运算符 &
; |
; ~
如: x = v1(v1>6 | v1<2)
-
isnan(v)
输出逻辑向量来说明被判断的值是否为空 (1代表空)
数组运算
基础运算
数组支持基于相同大小的数组的四则运算
sum = x + y;
或是任意数组与任意标量的运算
a = x + 2;
此处隐含着 “标量扩张” (Scalar Expansion) 的概念
同样的任意大小的数组也支持进行各种函数运算
如:sin(data)
和sqrt(data)
求平均值
mean({v})
针对矩阵的使用: 指定对行还是对列
- 对行:
mean({v},2)
- 对列:
mean({v},1)
- 对行:
针对存在
NaN
的解决方案:- 使用
isNaN()
进行确认 - 使用
mean({v},"omitnan")
计算
可使用
nnz({v}})
获知具体的NaN
数量- 使用
数组串接 (Concatenation)
- 横向串接
x = [A, B]
- 要求两矩阵的行数(
row
)相同即可 - 貌似不要
,
也行, 直接x = [A B]
- 要求两矩阵的行数(
- 纵向串接
x = [A; B]
- 要求两矩阵的纵数(
col
)相同即可
- 要求两矩阵的纵数(
矩阵构建
函数生成
rand({row},{col})
生成随机的(0-1)矩阵zeros({row},{col})
生成全是0的矩阵ones({row},{col})
生成全是1的矩阵
格式转换
reshape({ori},{row},{col})
将一维的vector
转化为矩阵, 或将原有矩阵改变形状{row}
或{col}
可采用[]
作为通配符代替常见转换: matrix to one col
x(:)
&reshape(x,[],1)
制图相关
标识与图例
xlabel()
与ylabel()
分别给x
轴和y
轴添加标识。title()
用于给图表添加标识。legend("{sth1}","{sth2}")
用于添加图例。
xtick()
和xticklabel()
xtick()
中指明要添加label
的列即可 (index直接指明)
xticklabel()
中直接写要添加的文本内容即可指明的列和文本数量不需匹配
2D制图
图表类型
折线图
plot()
使用方法:-
plot(x,y)
-
plot(x1,y1,x2,y2)
或plot(x,[y1 y2 ...]
plot({matrix})
效果见图:
-
散点图
scatter()
基本输入与plot()
相同- 更改点的大小 (第三个参数)
scatter(x,y,{size})
看起来好像没有上限的样子, 要做成随图像变化的样子则需要标记大小参数长度与x
和y
相同 - 更改点的颜色 (第四个参数)
scatter(x,y,[],{color})
颜色必须为一个 RGB 三元组、每个散射点对应一种颜色的 RGB 三元组所组成的 m×3 矩阵或每个散点对应一个值的 m×1 向量。
不过我做出来都是这种颜色:
- 更改点
- 在最后加
filled
属性即可实现填充点的效果 - 在最后加
d
或其他可以指定点的形状
- 在最后加
- 更改点的大小 (第三个参数)
阶梯图
stairs()
与plot()
相同主干图
stem()
与plot()
相同面积图
area()
与plot()
相同
(就是plot
加了面积而已柱状图
bar()
大体与plot()
相同- 堆叠式
添加stacked
属性 - 分组
- 堆叠式
饼图
pie()
以矩阵作图
如果采用 plot(data)
, 则将”Month”视为x轴;
而如果是 plot(data')
, 则”Years”为x轴
y轴是由元素值自动生成的
作图相关
- 改变图线: 通过在函数的第三个参数中指定颜色/样式/端点形状.
格式如下:
颜色 | 样式 | 形状 |
---|---|---|
r | – | o |
g | : | + |
b | -. | * |
c | - | . |
m | ‘none’ | > |
使用
"linewidth",{线宽}
作为最后的参数可设置线宽。绘制多图: 在
plot()
完后,执行hold on
再去plot()
下一个。xlim
与ylim
用于手动设置图像范围. 用法:x/ylim([{起始} {终止}])
axis tight
使图像范围适应到数据的最大值和最小值
3D制图
图表类型
标准曲面图
surf(X,Y,F);
.曲面点图
mesh(X,Y,F);
还有
meshc()
和meshz()
,c
是等高线; 而z
是底部加固体填充. 具体见图片.
surfc()
相比原来的surf()
是多加了个等高线在X-Y
面上.
- 等高线图
contour()
- 使用
colorbar
来添加颜色栏
子图绘制 subplot
1 | subplot(m,n,p); |
m
/n
指代建立的网格横纵数
p
指代该图像放在网格的位置 (从左到右数)
编程与脚本
创建脚本
使用 edit [文件名]
即可.
添加注释
在行首添加 %
.
运行脚本
在命令区内输入脚本名称
循环语句
1 | for n = 0:{MAX} |
以上代码展示了自变量 n
由0遍历至MAX值的循环语句
看起来是使用严格的缩进和”开始”,”结束”标识符来进行代码的分层
判断语句
1 | if num > 100 |
(不做过多解释)