一.简介

本篇参考官方入门文档编写

前提准备:

  1. MATLAB

二. 快速入门(二)

1. 文本和字符

image-20220721202119421

image-20220721202131456

字符串数组中的文本

当您处理文本时,将字符序列括在双引号中。可以将文本赋给变量。

1
t = "Hello, world";

如果文本包含双引号,请在定义中使用两个双引号。

1
q = "Something ""quoted"" and something else."
1
2
q = 
"Something "quoted" and something else."

与所有 MATLAB® 变量一样,tq 为数组。它们的或数据类型是 string

1
2
3
whos t
Name Size Bytes Class Attributes
t 1x1 174 string

注意

使用双引号创建字符串数组是在 R2017a 中引入的。如果您使用的是更早期的版本,请创建字符数组。有关详细信息,请参阅字符数组中的数据

要将文本添加到字符串的末尾,请使用加号运算符 +

1
2
3
f = 71;
c = (f-32)/1.8;
tempText = "Temperature is " + c + "C"
1
2
tempText = 
"Temperature is 21.6667C"

与数值数组类似,字符串数组可以有多个元素。使用 strlength 函数求数组中每个字符串的长度。

1
A = ["a","bb","ccc"; "dddd","eeeeee","fffffff"]
1
2
3
4
A = 
2×3 string array
"a" "bb" "ccc"
"dddd" "eeeeee" "fffffff"
1
strlength(A)
1
2
3
ans =
1 2 3
4 6 7

字符数组中的数据

有时,字符表示的数据并不对应到文本,例如 DNA 序列。您可以将此类数据存储在数据类型为 char 的字符数组中。字符数组使用单引号。

1
seq = 'GCTAGAATCC';

whos seq

1
2
Name      Size            Bytes  Class    Attributes
seq 1x10 20 char

数组的每个元素都包含单个字符。

1
seq(4)
1
2
ans = 
'A'

使用方括号串联字符数组,就像串联数值数组一样。

1
seq2 = [seq 'ATTAGAAACC']
1
2
seq2 =
'GCTAGAATCCATTAGAAACC'

在字符串数组引入之前编写的程序中,字符数组很常见。接受 string 数据的所有 MATLAB 函数都能接受 char 数据,反之亦然。

2. 调用函数

image-20220721202728086

image-20220721202749263

MATLAB® 提供了大量执行计算任务的函数。在其他编程语言中,函数等同于子例程方法

要调用函数,例如 max,请将其输入参数括在圆括号中:

1
2
A = [1 3 5];
max(A)
1
ans = 5

如果存在多个输入参数,请使用逗号加以分隔:

1
2
B = [3 6 9];
union(A,B)
1
2
3
ans = 1×5

1 3 5 6 9

通过将函数赋值给变量,返回该函数的输出:

1
maxA = max(A)
1
maxA = 5

如果存在多个输出参数,请将其括在方括号中:

1
[minA,maxA] = bounds(A)
1
2
minA = 1
maxA = 5

用引号将任何文本输入括起来:

1
disp("hello world")
1
hello world

要调用不需要任何输入且不会返回任何输出的函数,请只键入函数名称:

1
clc

clc 函数清空命令行窗口。

3. 二维图和三维图

线图

要创建二维线图,请使用 plot 函数。例如,绘制在从 0 到 2π 的值组成的线性间距向量上的正弦函数:

1
2
3
x = linspace(0,2*pi);
y = sin(x);
plot(x,y)

Figure contains an axes object. The axes object contains an object of type line.

可以标记轴并添加标题。

1
2
3
xlabel("x")
ylabel("sin(x)")
title("Plot of the Sine Function")

Figure contains an axes object. The axes object with title Plot of the Sine Function contains an object of type line.

image-20220721203513898

通过向 plot 函数添加第三个输入参数,您可以使用红色虚线绘制相同的变量。

1
plot(x,y,"r--")

Figure contains an axes object. The axes object contains an object of type line.

image-20220721203556972

"r--"线条设定。每个设定可包含表示线条颜色、样式和标记的字符。标记是在绘制的每个数据点上显示的符号,例如,+o*。例如,g:*" 请求绘制使用 * 标记的绿色点线。

请注意,为第一幅绘图定义的标题和标签不再被用于当前的图窗窗口中。默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,MATLAB® 都会清空图窗。

要将绘图添加到现有图窗中,请使用 hold on。在使用 hold off 或关闭窗口之前,当前图窗窗口中会显示所有绘图。

1
2
3
4
5
6
7
8
9
10
11
x = linspace(0,2*pi);
y = sin(x);
plot(x,y)

hold on

y2 = cos(x);
plot(x,y2,":")
legend("sin","cos")

hold off

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent sin, cos.

image-20220721204055402

三维绘图

三维图通常显示一个由带两个变量的函数 z=f(x,y) 定义的曲面图。例如,对于给定的行向量和列向量 xy,每个向量包含 [-2,2] 范围内的 20 个点,计算 z=x**ex2−y2 。

1
2
3
x = linspace(-2,2,20);
y = x';
z = x .* exp(-x.^2 - y.^2);

然后,创建曲面图。

1
surf(x,y,z)

Figure contains an axes object. The axes object contains an object of type surface.

surf 函数及其伴随函数 mesh 以三维形式显示曲面图。surf 使用颜色显示曲面图的连接线和面。mesh 生成仅以颜色标记连接线条的线框曲面图。

image-20220721204142769

多个绘图

您可以使用 tiledlayoutsubplot 在同一窗口的不同部分显示多个绘图。

tiledlayout 函数是在 R2019b 中引入的,该函数比 subplot 提供更多对标签和间距的控制。例如,在图窗窗口中创建 2×2 布局。然后,每当您要某个绘图出现在下一区域中时,请调用 nexttile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
t = tiledlayout(2,2);
title(t,"Trigonometric Functions")
x = linspace(0,30);

nexttile
plot(x,sin(x))
title("Sine")

nexttile
plot(x,cos(x))
title("Cosine")

nexttile
plot(x,tan(x))
title("Tangent")

nexttile
plot(x,sec(x))
title("Secant")

Figure contains 4 axes objects. Axes object 1 with title Sine contains an object of type line. Axes object 2 with title Cosine contains an object of type line. Axes object 3 with title Tangent contains an object of type line. Axes object 4 with title Secant contains an object of type line.

image-20220721203917634

4. 编程和脚本

脚本是最简单的一种 MATLAB® 程序。脚本是一个包含多行连续的 MATLAB 命令和函数调用的文件。在命令行中键入脚本名称即可运行该脚本。

脚本

要创建脚本,请使用 edit 命令。

1
edit mysphere

该命令会打开一个名为 mysphere.m 的空白文件。输入代码,以创建一个单位球、将半径加倍并绘制结果图:

1
2
3
4
[x,y,z] = sphere; 
r = 2;
surf(x*r,y*r,z*r)
axis equal

接下来,添加代码以计算球的表面积和体积:

1
2
A = 4*pi*r^2;
V = (4/3)*pi*r^3;

编写代码时,最好添加描述代码的注释。注释能够让其他人员理解您的代码,并且有助于您在稍后返回代码时再度记起。使用百分比 (%) 符号添加注释。

1
2
3
4
5
6
7
8
9
% Create and plot a sphere with radius r.
[x,y,z] = sphere; % Create a unit sphere.
r = 2;
surf(x*r,y*r,z*r) % Adjust each dimension and plot.
axis equal % Use the same scale for each axis.

% Find the surface area and volume.
A = 4*pi*r^2;
V = (4/3)*pi*r^3;

将文件保存在当前文件夹中。要运行脚本,请在命令行中键入脚本名称:

1
mysphere

还可以使用编辑器中的运行按钮 img 运行脚本。

image-20220721205131278

实时脚本

您可以使用实时脚本中的格式设置选项来增强代码,而不是以纯文本编写代码和注释。实时脚本有助于您查看代码和输出并与之交互,还可以包含格式化文本、方程和图像。

例如,通过选择另存为并将文件类型更改为 MATLAB 实时代码文件 (*.mlx),将 mysphere 转换为实时脚本。然后,用格式化文本替换代码注释。例如:

  • 将注释行转换为文本。选择以百分比符号开头的每一行,然后选择文本img。删除百分比符号。
  • 重写文本以替换代码行末尾的注释。要将等宽字体应用于文本中的函数名,请选择 M。要添加方程,请在插入选项卡上选择方程

Text and font options are in the Text section of the Live Editor tab.

要使用 edit 命令创建新的实时脚本,请在文件名中包含 .mlx 扩展名:

1
edit newfile.mlx

image-20220721205642321

循环及条件语句

在任何脚本中,您都可以定义按循环重复执行或按条件执行的代码段。循环使用 forwhile 关键字,条件语句使用 ifswitch

循环在创建序列时很有用。例如,创建一个名为 fibseq 的脚本,该脚本使用 for 循环来计算斐波那契数列的前 100 个数。在这个序列中,最开始的两个数是 1,随后的每个数是前面两个数的和,即 Fn = Fn-1 + Fn-2。

1
2
3
4
5
6
7
8
N = 100;
f(1) = 1;
f(2) = 1;

for n = 3:N
f(n) = f(n-1) + f(n-2);
end
f(1:10)

运行该脚本时,for 语句定义一个名为 n 的计数器,该计数器从 3 开始。然后,该循环重复为 f(n) 赋值,n 在每次执行中递增,直至达到 100。脚本中的最后一条命令 f(1:10) 显示 f 的前 10 个元素。

1
2
ans =
1 1 2 3 5 8 13 21 34 55

条件语句仅在给定表达式为 true 时执行。例如,根据随机数的大小为变量赋值:'low''medium''high'。在本例中,随机数是在 1 和 100 之间的一个整数。

1
2
3
4
5
6
7
8
num = randi(100)
if num < 34
sz = 'low'
elseif num < 67
sz = 'medium'
else
sz = 'high'
end

语句 sz = 'high' 仅在 num 大于或等于 67 时执行。

脚本位置

MATLAB 在特定位置中查找脚本及其他文件。要运行脚本,该文件必须位于当前文件夹或搜索路径中的某个文件夹内。

默认情况下,MATLAB 安装程序创建的 MATLAB 文件夹位于此搜索路径中。如果要将程序存储在其他文件夹,或者要运行其他文件夹中的程序,请将其添加到此搜索路径。在当前文件夹浏览器中选中相应的文件夹,右键点击,然后选择添加到路径