MATLAB主要内容突击
命令
在命令的末尾添加分号将抑制输出,但仍会执行该命令,正如您在工作区中所看到的。当您输入命令而没有以分号结尾时,MATLAB 将会在命令提示符下显示结果。
>> x = 5 + 1
x =
6
>> x = 5 + 1;
% 不会输出(Ctrl+R注释本行)
%{
这是多行注释
%}
保存和加载变量
保存数据
您可以使用 save
命令将工作区中的变量保存到称为 MAT 文件的 MATLAB 特定格式文件中
如要将工作区保存到名为 foo.mat
的 MAT 文件中,请使用命令:
>> save foo
clear
命令清空工作区变量
您可以使用 load
命令从 MAT 文件加载变量。
>> load foo
clear
函数清理工作区。clc
命令清理命令行窗口。
当你关闭 MATLAB 时,工作区将被清空。可以使用 MAT 文件来保存变量。这样,当您重新打开 MATLAB 时,可以将变量加载到工作区中。
如果您只想加载或保存部分变量,可以使用函数的两个输入。尝试从文件 myData.mat
中仅加载变量 m
:
>> load myData m
然后尝试将变量 m
保存到名为 justm.mat
的新 MAT 文件中:
>> save justm m
使用内置函数
MATLAB 包含许多内置的函数,例如 abs
(计算绝对值)和 eig
(计算特征值),以及正余弦三角函数等
如果碰到一些实数处理不了的(如
sqrt(-9)
则会默认输出复数)
请注意,解包含虚数 i
,这是 MATLAB 中的内置常量。
在命令行窗口中仅显示前四个小数位。您可以使用 format
函数控制显示的精度。
请试着输入 format long
并显示 x
的值。
输入 format short
可切换回默认显示。
这里就用了long
MATLAB编辑器
可以将一系列命令整合起来做成一个实时脚本!
按Alt+Enter切换文本和代码模式
- 可以点击执行以按顺序执行所有命令(结果默认在右边白框中)
- 还可以分成节执行代码(能够点击右边看到左边执行成了这个代码)
- 可以保存为mlx文件
- 还可以保存为静态的PDF或HTML文档
- 运行一节,别的节如果关联数据并不会实时更新,需要重新运行别节
这个实时脚本『相当于一个
debugging
的调试器』
向量和矩阵
先了解MATLAB中数组的概念
您可以使用方括号创建包含多个元素的数组。
x = [3 5]
x =
3 5
当您用空格(或逗号)分隔数值时(如前面的任务中所示),MATLAB 会(默认)将这些数值组合为一个行向量,行向量是一个包含一行多列的数组 (1×n)。
当您用分号分隔数值时,MATLAB 会创建一个列向量 (n×1)。
例:
创建矩阵
您可以组合使用空格和分号来创建一个矩阵,即包含多行多列的数组。输入矩阵时,您必须逐行输入它们。
例:
在 MATLAB 中,你甚至可以在矩阵的方括号内执行计算。
例:
MATLAB不要求空格缩进规范:
创建等间距向量
对于长向量,输入单个数值是不实际的。可用来创建等间距向量的替代便捷方法是使用 :
运算符并仅指定起始值和最终值:
请注意,当您使用冒号运算符时,不需要方括号(但写了也不会错)
:
运算符使用默认的间距1
,但是您可以指定您自己的间距,如下所示(自行更改步长)注意:这里间距(步长)是两个
:
中间的那个数
x = 20:2:26
x =
20 22 24 26
创建含对应元素的向量
创建一个制定了含有指定元素数目的向量
如果您知道向量中所需的元素数目(而不是每个元素之间的间距),则可以改用
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
数组创建函数
随机数矩阵
MATLAB 包含许多函数,可帮助您创建常用的矩阵,例如随机数矩阵:
创建一个取值0~1的随机数的矩阵
x = rand(2)
x =
0.8147 0.1270
0.9058 0.9134
➤请注意,rand(2)
命令中的 2
指定输出将为一个 2×2 的随机数矩阵。
许多矩阵创建函数允许您输入一个数值来创建方阵 (n×n),或者输入两个数值来创建非方阵(m×n)。
x = rand(2,3)
x =
0.6324 0.2785 0.9575
0.0975 0.5469 0.9649
还可以使用
randn()
函数进行随机数数组的创建二者区别:
rand
函数生成的是0到1之间均匀分布的随机数,即每个数的概率相等。randn
函数生成的是符合正态分布的随机数,即大部分数集中在平均值附近,呈钟形曲线分布
也可以使用randi(imax,sz1,sz2)
进行创建
将生成一个随机数最大值为imax
的sz1
xsz2
的矩阵
零矩阵
利用zeros()
可以创建一个包含(m×n)的以0为填充的矩阵[用法与上面一致]
壹矩阵
利用ones()
可以创建一个包含(m×n)的以1为填充的矩阵[用法与上面一致]
对角矩阵
diag()
:创建对角矩阵或获取矩阵的对角元素
语法:
x = diag(A,k)
% k可去,这样就变为了由向量决定的大小
如果
A
是向量,例:
使用 diag
创建一个包含 v
在主对角线上的元素的矩阵。
v = [2 1 -1 -2 -5];
D = diag(v)
D = 5×5
2 0 0 0 0
0 1 0 0 0
0 0 -1 0 0
0 0 0 -2 0
0 0 0 0 -5
如果带上了k
,即:
创建一个包含 v
在第一个上对角线 (k=1
) 上的元素的矩阵。
D1 = diag(v,1)
D1 = 6×6
0 2 0 0 0 0
0 0 1 0 0 0
0 0 0 -1 0 0
0 0 0 0 -2 0
0 0 0 0 0 -5
0 0 0 0 0 0
如果
A
是矩阵
将获取A矩阵的主对角线上的元素
A = randi(15,6,3)
C = diag(A)
加上k
与上面同理
magic()
magic()
:生成幻方矩阵
M = magic(n)
返回由 1
到 n²
的整数构成并且总行数和总列数相等的 n
×n
矩阵。n
的阶数必须是大于或等于 3
的标量才能创建有效的幻方矩阵。
特征:每行每列每对角线之和相等
矩阵大小
可利用size()
函数查看现有矩阵的大小:
您也可以使用一行代码创建与现有矩阵大小相同的随机矩阵。
rand(size(x))
可以用numel()
函数返回数组中的元素数目
可以用length()
函数返回矩阵(或数组中)每行的元素数目(列数)
数组(矩阵)重排
可用reshape()
函数对一个数组或者矩阵进行重新排列
语法:
B = reshape(A,sz)
B = reshape(A,sz1,...,szN)
其中,第一行sz
单独用的话必须使用大小向量sz
重构A以定义size(B)
(例如reshape(A,[2,3])
将 A
重构为一个 2×3 矩阵)sz
中至少要包含2个元素
第二行则是要输入指定维度大小,由sz1,....,szN
指定
可用用[]来指定任意一个维度大小(编译器会自动匹配自动计算)
例如,如果
A
是一个 10×10 矩阵,则reshape(A,2,2,[])
将A
的 100 个元素重构为一个 2×2×25 数组。如果
A
矩阵长度太大的话,可以用切片A(1:2)
来指定此时是从矩阵一列一列排序
当然也可以使用[A 0 0 0 0]
类似这样的结构来填充不够的位数,例:
A = 1:10
B = reshape([A 0 0 0 0 0 0],4,4)
因为新的矩阵是从上到下,从左到右进行填充的,填充位数不够以[]
中的元素继续填充
索引和修改数组
索引
在MATLAB中,索引必是正数
索引除了数字之外,还可以是包含数字的变量和数组甚至矩阵
在MATLAB中,所有索引都从1开始
- 如果你知道该元素的位置,可以直接利用赋值修改向量内的值:
x(3)=1
- 如果你想提取一个范围的值,可以用
:
号(类似于切片)
例:x(2:4)
如果你想要提取一个矩阵内的元素的话
得改为指定两个索引(第一个是行号,第二个是列号)
比较常见的时你需要提取一个矩阵的一行或者一列
这时候可以把列数或者行数换为:
,表示全部这一列或者这一行:
『这里我们是提取了第一行的全部列』
您还可以使用 MATLAB 关键字
end
作为行或列索引来引用最后一个元素
例:y = A(end,2)
将矩阵A的最后一行的第二个元素赋值给A
➤请注意,您可以将算术运算与关键字
end
结合使用。例如:y = A(end-1,end-2)
是将A矩阵第倒数第二行的倒数第二列的元素赋值给y
➤注意!如果只对一个矩阵使用一种索引,它将按顺序从上到下遍历每列,例子:
假设data
是个7x4的矩阵:
那么如果我们直接y = data(8)
y = 0.5300
提取多个元素
用作索引时,冒号运算符 (
:
) 可指代该维度中的所有元素。以下语法x = A(2,:)
会创建一个包含A
中第 2 行上所有元素的行向量
冒号运算符还可以引用某个值范围
以下语法会创建一个包含矩阵 A
的第 1 行、第 2 行和第 3 行所有元素的矩阵:x = A(1:3,:)
单个索引值可用于引用向量元素:x = v(3)
会将v向量的第三个元素赋值给x
(当 v
为行向量或列向量时)
如果对矩阵用
x = data(6)
类似这样的操作时,会从上到下依次检索到元素(这里先从上到下数第6个)
单个索引值范围可用于引用向量元素的子集。例如
返回向量
v
的一个子集,其中包含从第三个到最后一个元素范围内的所有元素↓
x = v (3:end) % 相当于List的切片
% MATLAB中,空格隔多少都没事↑
可以用一个(类似)列表(应该还是数组)将多个索引值一起提取:
索引可以是非连续数字。试着提取
density
的第一个、第三个和第六个元素。
x = density([1 3 6])
更改数组中的值
可以结合使用索引和赋值来修改变量的元素
例:A(2) = 11
(将A中的第二个元素的值改为11)
同理矩阵也行
您可以结合使用索引与赋值,将数组值更改为与其他元素相等(相当于把后面的值赋给前面)
例如,以下代码将
x(1)
的值更改为x(2)
的值:
x(1) = x(2)
甚至还可以对数组(或者矩阵)中的元素进行删除
可以采用类似于A(3) = []
将值赋为空『注意MATLAB中没有None所以这个位置的值会被直接删除』,例:
对向量执行数组运算
MATLAB 的设计让您能够自然地处理数组。例如,您可以将一个标量值与数组中的所有元素相加:y = x + 2
也可以将任意两个大小相同的数组相加:z = x + y
也可以将数组中的所有元素与某个标量相乘或相除
相当于数组中每个元素都执行一遍相乘或相除
可以用max函数来确定一个向量(矩阵)的最大值
MATLAB 的函数可在单个命令中对整个向量或值数组执行数学运算,例:
这里的
round()
函数为取整在MATLAB中,
int()
函数是求定积分
可以对每个元素进行相同操作
矩阵运算
*
运算符执行矩阵乘法(矩阵点乘)。因此,如果您使用 *
将两个大小相同的向量相乘,则由于内部维度不一致,您将会收到一条错误消息:
而 .*
运算符执行按元素乘法,允许您将两个大小相同的数组的对应元素相乘(元素间的点乘)『而*
为矩阵乘法』:
z = [3 4] .* [10 20]
z =
30 80
还可以对其他具有兼容大小的数组执行运算。
例如,尝试执行以下按元素点乘语句:
x = [1 2;3 4;5 6; 7 8].*[1;2;3;4]
这个其实就是每一行都乘以第二个矩阵的对应行数索引的数字
字符和字符串
字符数组和字符串数组用于存储 MATLAB® 中的文本数据。
- 字符数组是一个字符序列,就像数值数组是一个数字序列一样。它的一个典型用途是将短文本片段存储为字符向量,如
c = 'Hello World'
。 - 字符串数组是文本片段的容器。字符串数组提供一组用于将文本处理为数据的函数。您可以使用双引号创建字符串,例如
str = "Greetings friend"
。要将数据转换为字符串数组(字符串),请使用string
函数。
要将字符串转换为字符数组:请用
convertStringsToChars()
函数还可以直接用
char()
函数转换
字符数组可以当作序列进行索引,而字符串一整个就是一个索引:
字符数组相当于数组里面的数换成字符
用char()
函数
可以将字符数组转换为字符串,也可以将两个不同长度的字符整合成一个char
数组(元素对不齐的地方用空格填充)
从char
数组中提取字符串的时候可以用deblank()
函数自动删除char()
函数自动添加的空格
用eval()
函数执行字符串
调用函数
size
函数可以应用于数组,以生成包含数组大小的单个输出变量(用于查看数组[矩阵]『矩阵返回俩值』大小)
s = size(x)
如果要是想让size()
返回的俩值,可以放置俩参数并使用方括号 ([ ]
) 获得多个输出『方括号[]
绝对不能去掉』:
[xrow,xcol] = size(x)
xrow = 7
xcol = 8 % 7x8的一个矩阵
如果元素溢出了:
[xrow,xcol,xx,xy] = size(x)
则前面的
xrow
和xcol
为相对应的值,x
,y
自动填充为1
可以使用 max
函数确定向量的最大值及其对应的索引值。max
函数的第一个输出为输入向量的最大值。执行带两个输出的调用时,第二个输出为索引值。(一个时仅执行一个)
[xMax,idx] = max(x)
如果元素过多会报错:
如果函数返回两个值,只需函数的第二个输出,可以使用波浪号字符 (~
) 忽略特定输出。
例如,您可能只需要包含向量中最大值的索引:
density = data(:,2)
[~,ivMax] = max(v2)
densityMax = density(ivMax)
不懂函数去官网看
或者也可以使用
doc
函数打开官方文档。如使用如下代码打开
randi
函数 的文档:doc randi
绘制数据图
注:函数尾缀加个3就是三维图像函数了
可以使用 plot
函数在一张图上绘制两个相同长度的向量。
plot(x,y) % x轴,y轴
plot
函数还可以接受一个附加参数。使用该参数,您可以通过在引号中包含不同符号的方式来指定与之对应的颜色、线型和标记样式。
默认是蓝连续线条不标记
plot(x,y,"r--o")
% 一个-是实线,俩个-(--)是虚线
以上命令将会绘制一条红色 (r
) 虚线 (--
),并使用圆圈 (o
) 作为标记。您可以在线条设定的文档中了解有关可用符号的详细信息。
一定要打引号
""
plot(sample,mass2,"r*")
% 不使用线条可以把中间去了
请注意,每个绘图命令都创建了一个单独的绘图。要在一张图上先后绘制两条线(画俩条线),请使用 hold on
命令保留之前的绘图,然后添加另一条线:
plot(sample,mass2,"r*")
hold on
plot(sample,mass1,"ks")
俩图重合了↑
启用保留状态(hold on
)时,将继续在同一坐标区上绘图。要恢复默认绘图行为,即其中每个绘图都有自己的坐标区,请输入 hold off
。
如果输入的是向量(一阶数组),MATLAB 会使用向量值作为 y 轴数据,并将 x 轴数据的范围设置为从 1
到 n
(向量中的元素数目):plot(v1)
这里无论是行向量还是列向量都是一样的
但如果输入的是矩阵
按列绘制出每列元素值(定y)相对其下标(定x)的曲线,曲线数等于x的列数
例:
plot
函数接受可选的附加输入,这些输入由一个属性名称和一个关联的值(前面属性的值)组成:
plot(y,"LineWidth",5)
以上命令将绘制一条宽度为5的粗线。您可以在线条属性文档中了解更多可用属性的详细信息。
例:绘制 v1
,线宽为 3
。
使用 plot
函数时,您可在绘图参数和线条设定符之后添加属性名称-属性值对组。
plot(x,y,"ro-","LineWidth",5)
以上命令将生成x,y的以红色,圆圈标记,宽度为5的图
例:绘制 v1
(y 轴)对 sample
(x 轴)的图,使用红色 (r
) 圆圈 (o
) 标记,线宽为 4
。
plot
函数用来绘制线条。MATLAB 中还有许多其他绘图函数。您可以在 MATLAB 图库中看到一个详尽的列表。
每个绘图都有其不同的自定义选项。
比如可以用
histogram
创建频数直方图用
bar
绘制柱状图(加个h反转)
fill
填充图像
还可以用grid on
开启图像网格
放大图像指定区域
您可以使用 xlim
函数放大所关注的区域。
xlim([xmin xmax])
例:
放大了范围为0-1000内的图像
三维图像的绘制
其他基本函数尾缀加个3即可画出三维图像
而mesh(x,y,z)
和surf(x,y,z)
函数能够绘制一个曲面网格图
编写绘图注释
可以使用绘图注释函数(例如 title
)在绘图中添加标签。此类函数的输入是一个字符串,呈现的是图的标题。MATLAB 中的字符串是用双引号 ("
) 引起来的,例:title("Plot Title")
title("Sample Mass")
ylabel()
函数:在图像中添加y
轴标签
xlabel()
函数则是添加x
轴标签
ylabel("Mass (g)")
在侧边栏写入y轴标签:
可以使用
legend
函数为绘图添加图例您可以将字符串数组直接传递给
legend
函数。
例:
您可以在绘图注释中使用变量的值,方法是将字符串与变量串联起来:
bar(data(3,:)) % 创建一个柱状图 title("Sample " + sample(3) + " Data")
、
练习项目
➤注意“以a对b”意思等价于“用a表示b”,因此a作横坐标,为自变量,b作纵坐标,为因变量
导入数据
导入工具
如果在MATLAB中双击图像文件,它将以像素值数值数组的形式导入
如果在MATLAB中双击表格文件或者txt文件由于可以有多种方法存储数据,因此MATLAB会打开导入工具:
要导入的数据以蓝色突出显示
文本文档中的任何缺失数据以橙色突出显示且默认情况下将被替换为NaN
(Not a Number)
默认情况下导入工具以表的形式导入此数据:
但还有其他选项
导入工具会自动给表中所有数据选取适当的数据类型
输出变量的默认名称来自文件名(第一行标题会被作为表变量名称)
如果导入了,则会在MATLAB工作区中创建变量:
以表的形式导入数据
要提取表变量,可以使用圆点表示法:
data.VariableName
如果您正在使用表,您可能希望将相关数据放在一起。您可以将计算结果赋给表,而不是创建单独的变量。
例:
data.HeightMeters=data.HeightYards*0.9144
如果变量
data.HeightMeters
不存在,MATLAB 将在表中创建名为HeightMeters
的新变量。
例:
改变表中的元素排列
注:它更新代码后会将你的动作指令默认输入到代码栏中
可用
sortrows()
函数进行排序
同时索引行数
圆点表示法用于提取表变量。要提取行,可以使用常规数组索引(注意,提取出来的还是表)
例:
top3 = elements(1:3,:)
% 提取了elements这个表的1到3行的所有数据
逻辑数组
关系判断
逻辑索引
关系运算符(例如 >
、<
、==
和 ~=
)执行两个值之间的比较。相等或不相等比较的结果为 1 (true) 或 0 (false)
输出会带个logical表示逻辑值『除0之外的所有逻辑值转换都为1(true)』
例:
您可以使用关系运算符将某个向量或矩阵与单个标量值进行比较(就是每个元素去和这个值进行比较)。结果是与原始数组相同大小的逻辑数组(由1
和0
填充,条件为真就为1,假为0):
[5 10 15] > 12
ans =
0 0 1
也可以使用逻辑数组作为数组索引,在这种情况下,MATLAB 会提取索引(执行结果)为 true
的数组元素
以下示例将会提取
v1
中大于 6 的所有元素。
v = v1(v1 > 6)
v =
6.6678
9.0698
同样的,也可以对两个不同向量使用逻辑索引
返回执行为
true
所在位置对应的元素
v = sample(v1 > 6) % 这里v1>6的索引为2和6,所以这
v = % 样会提取到sample里的索引为2
18 % 和6的数字
23
您可以使用逻辑索引在数组中重新赋值。
例如,如果您要将数组
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)
可以用
find()
函数来查找相应值(或者逻辑比较为true
的值)对应的索引值(从上到下,从左到右,下面返回的是由索引值构成的矩阵)
例:
编程构造
可用
if
进行条件判断(条件框内true
执行false
跳过)[MATLAB中为elseif
]可用
for
,while
进行循环这些语句后都得加
end
关键字注:MATLAB中对元素计算有
.
点运算,可以增强代码可读性,这时就不必要使用循环了
决策分支(条件判断)
if
语句
仅当条件为 true 时,才执行 if
代码块的主体
记得最后要加end
,还得缩进块
通常,您可能还希望在所设条件不成立时执行其他代码。为此,您可以使用 else
关键字,如下所示。
x = rand
if x > 0.5
y = 3
else
y = 4
end
elseif
关键字可在 if
后使用,以添加更多条件。您可以包括多个 elseif
代码块。
switch
语句
语法:
switch switch_expression
case case_expression
statements
case case_expression
statements
...
otherwise
statements
end
其中
switch_expression
能是可计算式,但是不能是可输入的表达式,然后处理完结果后匹配下列case
语句
而不用otherwise也行
例:
n = input("")
switch n
case -1
disp('negative one')
case 0
disp('zero')
case 1
disp('positive one')
otherwise
disp('other value')
end
n = 3
other value
进行多值判断(只能用花括号
{}
)
例:
angel = input("")
switch angel
case {0,360}
disp('North')
case {-180,180}
disp('South')
case {-270,90}
disp('East')
case {-90,270}
disp("west")
otherwise
disp('other value')
end
0
North
-
switch_expression
必须为标量或字符向量(所以多值判断时不能使用[]
『因为[]
表示向量』而必须用{}
) -
case_expression
不能包含关系运算符(例如<
或>
)来与switch_expression
进行比较。要测试不相等性,请使用if, elseif, else
语句
不像Python一样,不能够进行逻辑运算
- MATLAB
switch
语句不会像 C 语言的switch
语句一样失效。如果第一个case
语句为true
,则 MATLAB 不会执行其他case
语句 - 例:
result = 52;
switch(result)
case 52
disp('result is 52')
case {52, 78}
disp('result is 52 or 78')
end
result is 52
不像C语言一样会执行到底
- MATLAB
break
语句会结束for
或while
循环的执行,但不结束switch
语句的执行。此行为不同于 C 语言中break
和switch
的行为。
不能够像C语言一样用
break
终止因为C语言目的就是为了不让它执行下列代码块,而用
break
跳出
循环语句
for
循环
运行以下代码时,循环体将被执行三次,因为循环计数器 (c
) 通过 1:3
(1
、2
和 3
)进行计数:
MATLAB中采用的是赋值
=
的形式
while
循环
条件为
true
时重复执行的while
循环
语法:
while expression
statements
end
计算一个表达式,并在该表达式为 true 时在一个循环中重复执行一组语句。表达式的结果非空并且仅包含非零元素(逻辑值或实数值)时,该表达式为 true。否则,表达式为 false
break
&continue
break
break
终止执行 for
或 while
循环。不执行循环中在 break
语句之后显示的语句。
在嵌套循环中,break
仅从它所发生的循环中退出。控制传递给该循环的 end
之后的语句。
跳出当前的大循环
continue
continue
将控制传递给 for
或 while
循环的下一迭代。它跳过当前迭代的循环体中剩余的任何语句。程序继续从下一迭代执行。
continue
仅在调用它的循环的主体中起作用。在嵌套循环中,continue
仅跳过循环所发生的循环体内的剩余语句。
跳过本次循环,执行下一次循环
自定函数
声明函数用关键字function
输入&输出
输入
input
x = input(prompt)
显示 prompt
中的文本并等待用户输入值后按 Return 键。用户可以输入 pi/4
或 rand(3)
之类的表达式[表达式会自动进行计算],并可以使用工作区中的变量:
prompt = "What is the original value? ";
x = input(prompt)
y = x*10
在提示下,输入 magic(3)
。
x =
8 1 6
3 5 7
4 9 2
y =
80 10 60
30 50 70
40 90 20
prompt
— 向用户显示的文本
显示给用户的文本,指定为字符串或字符向量。
要创建跨越多行的提示,请使用 \n
指示每个新行。要在提示中包含反斜杠 (\
),请使用 \\
。
『可以在想换行的字符串后面加个\n即可换行显示』
menu
语法:
choice = menu(message,options)
choice = menu(message,opt1,...,optn)
% 返回值赋给choice了
choice = menu(message,options)
显示一个模态多选择项对话框,其中包含 message
中的文本。options
中的每个元素都显示为一个按钮。该函数返回所选按钮的索引,如果用户点击窗口上的关闭按钮,则返回 0
。
可包含多个
options
还可以以数组
[]
的形式存储数据
➤注意:不推荐使用menu
,可用listdlg
替代
输出
disp
显示值,显示矩阵向量等
还能够通过包含 HTML 超链接代码作为 disp
的输入来显示网页链接,例如:显示指向 MathWorks® 网站的链接
X = '<a href = "https://www.mathworks.com">MathWorks Web Site</a>';
disp(X)
还能够计算处理表达式
sprintf
能够创建文本,但还需要用disp
显示name = 'Alice'; age = 12; X = sprintf('%s will be %d this year.',name,age); disp(X)
Alice will be 12 this year.
还是相当于C语言的输入数据格式
%d
整型,%s
字符型
而fprintf
则可以直接显示文本,无需创建变量[上述的升级版]不过,要确保正常终止显示,必须在文本末尾处添加换行 (\n
) 元字符↓
fprintf
将数据写入文本,例:
A = 100
C = 10000 - 7
fprintf("%d等于多少?%d",C,A)
9993等于多少?100
format
设置输出显示格式
可以自由调整显示数据的表示格式(一般放输出语句的开头)
综合项目练习
MATLAB中可以使用滑块来控制变量,实现可视动态变化:
您可以将字符串数组直接传递给 legend
函数。
MATLAB 入门之旅摘要
基本语法
示例 | 说明 |
---|---|
x = pi |
使用等号 (= ) 创建变量。 左侧 (x ) 是变量的名称,其值为右侧 (pi ) 的值。 |
y = sin(-5) |
您可以使用括号提供函数的输入。 |
桌面管理
函数 | 示例 | 说明 |
---|---|---|
save |
save data.mat |
将当前工作区保存到 MAT 文件中。 |
load |
load data.mat |
将 MAT 文件中的变量加载到工作区。 |
clear |
clear |
清除工作区中的所有变量。 |
clc |
clc |
清除命令行窗口中的所有文本。 |
format |
format long |
更改数值输出的显示方式。 |
数组类型
示例 | 说明 |
---|---|
4 |
标量 |
[3 5] |
行向量 |
[1;3] |
列向量 |
[3 4 5;6 7 8] |
矩阵 |
等间距向量
示例 | 说明 |
---|---|
1:4 |
使用冒号 (: ) 运算符,创建一个从 1 到 4 ,间距为 1 的向量。 |
1:0.5:4 |
创建一个从 1 到 4 ,间距为 0.5 的向量。 |
linspace(1,10,5) |
创建一个包含 5 个元素的向量。这些值从 1 到 10 均匀间隔。 |
创建矩阵
示例 | 说明 |
---|---|
rand(2) |
创建一个 2 行 2 列的方阵。 |
zeros(2,3) |
创建一个 2 行 3 列的矩形矩阵。 |
索引
示例 | 说明 |
---|---|
A(end,2) |
访问最后一行的第二列中的元素。 |
A(2,:) |
访问第二行所有元素。 |
A(1:3,:) |
访问前三行的所有列。 |
A(2) = 11 |
将数组中第二个元素的值更改为 11 。 |
数组运算
示例 | 说明 |
---|---|
[1 1; 1 1]*[2 2;2 2] ans = 4 4 4 4 |
执行矩阵乘法。 |
[1 1; 1 1].*[2 2;2 2] ans = 2 2 2 2 |
执行按元素乘法。 |
多个输出
示例 | 说明 |
---|---|
[xrow,xcol] = size(x) |
将 x 中的行数和列数保存为两个不同变量。 |
[xMax,idx] = max(x) |
计算 x 的最大值及其对应的索引值。 |
文档
示例 | 说明 |
---|---|
doc randi |
打开 randi 函数的文档页。 |
绘图
示例 | 说明 |
---|---|
plot(x,y,"ro-","LineWidth",5) |
绘制一条红色 (r ) 虚线 (-- ) 并使用圆圈 (o ) 标记,线宽很大。 |
hold on |
在现有绘图中新增一行。 |
hold off |
为下一个绘图线条创建一个新坐标区。 |
title("My Title") |
为绘图添加标签。 |
使用表
示例 | 说明 |
---|---|
data.HeightYards |
从表 data 中提取变量 HeightYards 。 |
data.HeightMeters = data.HeightYards*0.9144 |
从现有数据中派生一个表变量。 |
逻辑运算
示例 | 说明 |
---|---|
[5 10 15] > 12 |
将向量与值 12 进行比较。 |
v1(v1 > 6) |
提取 v1 中大于 6 的所有元素。 |
x(x==999) = 1 |
用值 1 替换 x 中等于 999 的所有值。 |
编程
示例 | 说明 |
---|---|
if x > 0.5 y = 3 else y = 4 end |
如果 x 大于 0.5 ,则将 y 的值设置为 3 。 否则,将 y 的值设置为 4 。 |
for c = 1:3 disp(c) end |
循环计数器 (c ) 遍历 值 1:3 (1 、2 和 3 )。 循环体显示 c 的每个值。 |