数组
创建行/列数组
当您用空格(或逗号)分隔数值时(如前面的任务中所示),MATLAB 会将这些数值组合为一个行向量,行向量是一个包含一行多列的数组 (1×n)。当您用分号分隔数值时,MATLAB 会创建一个列向量 (n×1)。
x = [1;3]
x =
1
3
注意:matlab中的数组下标从1开始
创建均匀数组(间距为1)
对于长向量,输入单个数值是不实际的。可用来创建等间距向量的替代便捷方法是使用 : 运算符并仅指定起始值和最终值。
(两边均为闭区间而且没有括号)
y = 5:8
y =
5 6 7 8
请注意,当您使用冒号运算符时,不需要方括号。
自定义间距
运算符使用默认的间距 1,但是您可以指定您自己的间距,如下所示。
x = 20:2:26
x =
20 22 24 26
用linspace函数创建
如果您知道向量中所需的元素数目(而不是每个元素之间的间距),则可以改用 linspace 函数:
linspace(first,last,number_of_elements)
注意,请使用逗号 (,) 分隔 linspace 函数的输入。
x = linspace(0,1,5)
x =
0 0.250 0.500 0.750 1.000
数组转置
linspace 和 : 运算符都可创建行向量。但是,您可以使用转置运算符 (') 将行向量转换为列向量。
x = 1:3;
x = x’
x =
1
2
3
创建数组的同时转置
您可以通过在一条命令中创建行向量并将其全部转置来创建列向量。注意此处使用圆括号/方括号来指定运算的顺序。
x = (1:2:5)’
x =
1
3
5
创建数组的函数
随机数数组
x = rand(2)
x =
0.8147 0.1270
0.9058 0.9134
请注意,rand(2) 命令中的 2 指定输出将为一个 2×2 的随机数矩阵。
或者输入两个数值来创建非方阵。
x = rand(2,3)
x =
0.6324 0.2785 0.9575
0.0975 0.5469 0.9649
0/1矩阵
使用 zeros / ones函数
x = zeros(m,n)
x = ones(m,n)
数组大小
如何知道现有矩阵的大小?您可以使用 size 函数。
size(x)
您也可以使用一行代码创建与现有矩阵大小相同的矩阵。
rand(size(x))
在MATLAB中,size(vec, 2) 的作用是返回向量 vec 的列数
多输出分别获得维度
size 函数可以应用于矩阵,以生成单个输出变量或两个输出变量。使用方括号 ([ ]) 获得多个输出。
[xrow,xcol] = size(x)
创建变量 dr 和 dc,其中分别包含变量 data 的行数和列数。
[dr,dc]=size(data)
数组索引
提取单个元素
您可以使用行、列索引从数组中提取值。注意是圆括号
y = A(5,7)
此语法将会提取 A 的第 5 行第 7 列的值,然后将结果赋给变量 y。
关键字end最后一个索引
使用 MATLAB 关键字 end 作为行或列索引来引用最后一个元素。
y = A(end,2)
可以将算术运算与关键字 end 结合使用。例如:
y = A(end-1,end-2)
一个索引->列优先
如果只对一个矩阵使用一种索引,它将按顺序从上到下遍历每列(列优先)。试着用一种索引提取 data 的第八个元素。
数组切片
整行/整列
用作索引时,冒号运算符 ( : ) 可指代该维度中的所有元素。以下语法
x = A(2,:)
注意使用圆括号,而不是使用方括号
会创建一个包含 A 中第 2 行上所有元素的行向量。
向量切片
单个索引值范围可用于引用向量元素的子集。例如
x = v(3:end)
返回向量 v 的一个子集,其中包含从第三个到最后一个元素范围内的所有元素。
切出小矩阵
冒号运算符可以引用某个值范围。以下语法会创建一个包含矩阵 A 的第 1 行、第 2 行和第 3 行所有元素的矩阵。
x = A(1:3,:)
数组运算
矩阵与1个标量运算
加法
您可以将一个标量值与数组中的所有元素相加。
y = x + 2
结果是所有元素都加上2
乘除
将数组中的所有元素与某个标量相乘或相除
z = 2*x
y = x/3
所有元素都变化
矩阵与矩阵运算
加法
将任意两个大小相同的数组相加。
z = x + y
乘法
*运算符执行矩阵乘法。因此,如果您使用 * 将两个大小相同的向量相乘,则由于内部维度不一致,您将会收到一条错误消息。
z = [3 4] * [10 20]
错误使用 *
用于矩阵乘法的维度不正确。
而 .* 运算符执行按元素乘法,允许您将两个大小相同的数组的对应元素相乘。
z = [3 4] .* [10 20]
z =
30 80
函数运算
求向量的最大/最小值
使用 max 函数来确定向量的最大值。
xMax = max(x)
多输出分别获得最大值及索引
可以使用 max 函数确定向量的最大值及其对应的索引值。max 函数的第一个输出为输入向量的最大值。执行带两个输出的调用时,第二个输出为索引值。
[xMax,idx] = max(x)
忽略某个输出
如果只需函数的第二个输出,可以使用波浪号字符 (~) 忽略特定输出。
例如,您可能只需要包含向量中最大值的索引:
[~,ivMax] = max(v2)
向量开平方根
可在单个命令中对整个向量或值数组执行数学运算。
xSqrt = sqrt(x)
向量取整
使用 round 函数创建一个名为 vr 的变量,其中包含四舍五入为整数的平均体积 va。
vr = round(va)
画图
plot函数
改变线条的颜色
线的颜色是由红绿蓝(RGB)三原色组成的,通过设定三原色的权重可以改变线的颜色,命令如下(x为横坐标,y为纵坐标):
color的域值为0—1
plot(x,y,‘Color’,[1 0 0]);代表红色
plot(x,y,‘Color’,[0 1 0]);代表绿色
plot(x,y,‘Color’,[0 0 1]);代表蓝色
plot(x,y,‘Color’,[0.3 0.8 0.9]);则是三种颜色组成的新颜色。
当需要以上常用的八种以外的颜色时,只要设置颜色中RGB的值就可以得到不同的颜色。
x,y轴
可以使用 plot 函数在一张图上绘制两个相同长度的向量。点之间以直线相连
plot(x,y)
创建一个绘图,其中 sample 位于 x 轴,mass1 位于 y 轴。
plot(sample,mass1)
只有一个参数
当您单独绘制一个向量时,MATLAB 会使用向量值作为 y 轴数据,并将 x 轴数据的范围设置为从 1 到 n(向量中的元素数目)。点之间以直线相连
plot(x)
对数坐标轴
使用 loglog 函数(用法同 plot 函数),在每个坐标轴上使用对数刻度绘制数据。
loglog(x,y,“*–”)
画离散点
plot 函数接受一个附加参数。使用该参数,您可以通过在引号中包含不同符号的方式来指定与之对应的颜色、线型和标记样式。
绘制 mass2(y 轴)对 sample(x 轴)的图。在绘图中使用红色 ® 星号 (*) 标记,并且不使用线条。
plot(sample,mass2,“r*”)
线条粗细
plot 函数接受可选的附加输入,这些输入由一个属性名称和一个关联的值组成。
plot(y,“LineWidth”,5)
以上命令将绘制一条宽度为5的粗线。
线形组合
使用 plot 函数时,您可在绘图参数和线条设定符之后添加属性名称-属性值对组。
plot(x,y,“ro-”,“LineWidth”,5)
在已有的图上继续画
请注意,每个绘图命令都创建了一个单独的绘图。要在一张图上先后绘制两条线,请使用 hold on 命令保留之前的绘图,然后添加另一条线plot。
取消继续画的状态
启用保留状态时,将继续在同一坐标区上绘图。要恢复默认绘图行为,即其中每个绘图都有自己的坐标区,请输入hold off。
添加图像标题
可以使用绘图注释函数(例如 title)在绘图中添加标签。此类函数的输入是一个字符串。MATLAB 中的字符串是用双引号 (") 引起来的。
title(“Plot Title”)
字符串与变量串联
您可以在绘图注释中使用变量的值,方法是将字符串与变量串联起来:
title(“Sample " + sample(3) + " Data”)
添加纵坐标标题
使用 ylabel 函数添加标签 “Mass (g)”。
ylabel(“Mass (g)”)
添加legend
您可以使用 legend 函数为绘图添加图例。表示不同线条
legend(“a”,“b”,“c”)
图像变成动画
代码 pause(0.2) 在 0.2 秒处停止循环,以便绘图进行更新。请尝试通过增大值 0.2 来增加动画时间。
语句
关系运算
关系运算符(例如 >、<、== 和 ~=)执行两个值之间的比较。相等或不相等比较的结果为 1 (true) 或 0 (false)
等于是2个等号
数组关系比较
您可以使用关系运算符将某个向量或矩阵与单个标量值进行比较。结果是与原始数组相同大小的逻辑数组。
[5 10 15] > 12
ans =
0 0 1
测试向量 v1 中是否有小于 4 的元素。将输出赋给一个名为 test 的变量。
test = v1<4
用关系运算提取符合条件的数组元素
您可以使用逻辑数组作为数组索引,在这种情况下,MATLAB 会提取索引为 true 的数组元素。以下示例将会提取 v1 中大于 6 的所有元素。
v = v1(v1 > 6)
v =
6.6678
9.0698
不同向量间使用
您也可以对两个不同向量使用逻辑索引。
v = sample(v1 > 6)
v =
18
23
创建一个名为 s 的变量,其中包含 sample 中与 v1 中小于 4 的元素所在位置对应的元素。
s = sample(v1<4)
用关系运算赋值
您可以使用逻辑索引在数组中重新赋值。例如,如果您要将数组 x 中等于 999 的所有值都替换为值 1,请使用以下语法。
x(x==999) = 1
关系运算组合
您可以使用逻辑运算符 and (&) 以及 or (|) 来组合逻辑比较。
要查找小于 4 且大于 2 的值,请使用 &:
x = v1(v1<4 & v1>2)
要查找大于 6 或小于 2 的值,请使用 |:
x = v1(v1>6 | v1<2)
if条件语句
注意条件两边没有括号
if x<1
…
elseif
…
else
…
end
for循环语句
注意条件两边没有括号
for i = 1:n
…
end
未知循环次数
如果您要对未知长度的向量执行循环,可以改用 length 函数:
for idx = 1:length(density)
工作区变量与文件
保存工作区变量至文件
您可以使用 save 命令将工作区中的变量保存到称为 MAT 文件的 MATLAB 特定格式文件中。
要将工作区保存到名为 foo.mat 的 MAT 文件中,请使用命令:
save foo
从文件加载变量到工作区
在工作区中,您可以看到 clear 命令清空了所有变量。
clear 函数清理工作区;clc 命令清理命令行窗口。
您可以使用 load 命令从 MAT 文件加载变量。MAT文件中已经有了变量及命名
load foo
导入/导出部分变量
如果您只想加载或保存部分变量,可以使用函数的两个输入。尝试从文件 myData.mat 中仅加载变量 m:
load myData m
然后尝试将变量 m 保存到名为 justm.mat 的新 MAT 文件中:
save justm m
表格数据
列数据提取
要提取表变量,可以使用圆点表示法:
data.VariableName
将 elements.Density 的内容赋给名为 d 的列向量。
d = elements.Density
行表格提取
圆点表示法用于提取表变量。要提取行,可以使用常规数组索引。
尝试提取表的前三行:
top3 = elements(1:3,:)
请注意,top3 也是一个表。
输出数据加入表
如果您正在使用表,您可能希望将相关数据放在一起。您可以将计算结果赋给表,而不是创建单独的变量。
data.HeightMeters = data.HeightYards*0.9144
如果变量 data.HeightMeters 不存在,MATLAB 将在表中创建名为 HeightMeters 的新变量。
控制台输出格式
小数精度
在命令行窗口中仅显示前四个小数位。您可以使用 format 函数控制显示的精度。
请试着输入 format long 并显示 x 的值。
format long
x
输入 format short 可切换回默认显示。
format short
x