启动 MATLAB时,桌面会以默认布局显示。
桌面包括下列面板:
A = magic(4);
B = rand(3,5,2);
桌面上的“工作区”窗格也会显示变量。
通过工具栏或菜单的“新建脚本(New Script)”或“打开(Open)”,可以打开脚本编辑器。
在脚本编辑器中,通过工具栏或菜单中的“运行(Run)按钮”,可以运行当前打开的脚本。
比如在脚本编辑器中输入下面的代码并且运行:
a = 1;
b = 2;
c = a + b;
在桌面中观察运行的结果。
将上面的代码中c = a + b后面的分号去掉后运行,再在桌面中观察运行的结果。
使用百分比 (%) 符号添加注释。
按键Ctrl+R,将会使当前选择的行变为注释;
按键Ctrl+T,将会使当前选择的行取消注释;
在脚本编辑器中,点击右上角的“帮助按钮”,可以打开帮助浏览器进行浏览或搜索。
在脚本编辑器中,选中一个函数后按键F1,可以显示此函数的说明。
所有 MATLAB变量都是多维数组,与数据类型无关。矩阵是指通常用来进行线性代数运算的二维数组。
要创建每行包含四个元素的数组,请使用逗号 (,) 或空格分隔各元素。
a = [1 2 3 4]
运行结果:
a = 1×4
1 2 3 4
这种数组为行向量。
要创建包含多行的矩阵,请使用分号分隔各行。
a = [1 2 3; 4 5 6; 7 8 10]
运行结果:
a = 3×3
1 2 3
4 5 6
7 8 10
创建矩阵的另一种方法是使用 ones、zeros 或 rand 等函数。例如,创建一个由零组成的 5×1 列向量。
z = zeros(5,1)
运行结果:
z = 5×1
0
0
0
0
0
MATLAB允许您使用单一的算术运算符或函数来处理矩阵中的所有值。
a + 10
运行结果:
ans = 3×3
11 12 13
14 15 16
17 18 20
sin(a)
运行结果:
ans = 3×3
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 -0.5440
要转置矩阵,请使用单引号 (’):
a'
运行结果:
ans = 3×3
1 4 7
2 5 8
3 6 10
您可以使用 * 运算符执行标准矩阵乘法,这将计算行与列之间的内积。例如,矩阵a乘以其逆矩阵可返回单位矩阵:
p = a*inv(a)
运行结果:
p = 3×3
1.0000 0 0
0.0000 1.0000 0
0.0000 -0.0000 1.0000
请注意,p 不是整数值矩阵。MATLAB将数字存储为浮点值,算术运算可以区分实际值与其浮点表示之间的细微差别。使用 format 命令可以显示更多小数位数:
format long
p = a*inv(a)
运行结果:
p = 3×3
1.000000000000000 0 0
0.000000000000002 1.000000000000000 0
0.000000000000002 -0.000000000000004 1.000000000000000
使用以下命令将显示内容重置为更短格式
format short
format 仅影响数字显示,而不影响 MATLAB对数字的计算或保存方式。
要执行元素级乘法(而非矩阵乘法),请使用 .* 运算符:
p = a.*a
运行结果:
p = 3×3
1 4 9
16 25 36
49 64 100
乘法、除法和幂的矩阵运算符分别具有执行元素级运算的对应数组运算符。例如,计算 a 的各个元素的三次方:
a.^3
运行结果:
ans = 3×3
1 8 27
64 125 216
343 512 1000
串联是连接数组以便形成更大数组的过程。实际上,第一个数组是通过将其各个元素串联起来而构成的。成对的方括号 [] 即为串联运算符。
A = [a,a]
运行结果:
A = 3×6
1 2 3 1 2 3
4 5 6 4 5 6
7 8 10 7 8 10
使用逗号将彼此相邻的数组串联起来称为水平串联。每个数组必须具有相同的行数。同样,如果各数组具有相同的列数,则可以使用分号垂直串联。
A = [a; a]
运行结果:
A = 6×3
1 2 3
4 5 6
7 8 10
1 2 3
4 5 6
7 8 10
MATLAB中的每个变量都是一个可包含许多数字的数组。如果要访问数组的选定元素,请使用索引。
以 4×4 幻方矩阵 A 为例:
A = magic(4)
运行结果:
A = 4×4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
引用数组中的特定元素有两种方法。最常见的方法是指定行和列下标,例如
A(4,2)
运行结果:
ans = 14
另一种方法不太常用,但有时非常有用,即使用单一下标按顺序向下遍历每一列:
A(8)
运行结果:
ans = 14
使用单一下标引用数组中特定元素的方法称为线性索引。
如果尝试在赋值语句右侧引用数组外部元素,MATLAB会引发错误。
test = A(4,5)
运行结果:
Index exceeds matrix dimensions.
不过,您可以在赋值语句左侧指定当前维外部的元素。数组大小会增大以便容纳新元素。
A(4,5) = 17
运行结果:
A = 4×5
16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 17
要引用多个数组元素,请使用冒号运算符,这使您可以指定一个格式为 start:end 的范围。例如,列出 A 前三行及第二列中的元素:
A(1:3,2)
运行结果:
ans = 3×1
2
11
7
单独的冒号(没有起始值或结束值)指定该维中的所有元素。例如,选择 A 第三行中的所有列:
A(3,:)
运行结果:
ans = 1×5
9 7 6 12 0
此外,冒号运算符还允许您使用较通用的格式 start:step:end 创建等距向量值。
B = 0:10:100
运行结果:
B = 1×11
0 10 20 30 40 50 60 70 80 90 100
如果省略中间的步骤(如 start:end 中),MATLAB会使用默认步长值 1。
MATLAB环境中的多维数组是具有多个下标的数组。创建多维数组的一种方法是调用具有多个参数的 zeros、ones、rand。例如,
R = rand (3,4,5);
创建一个 3×4×5 数组,共包含 345 = 60 个随机元素。
在下面的示例中,第 k 个或第 tk 个矩阵的第 (i, j) 个元素由 A(i,j,k) 表示。
MATLAB中的元胞数组是以其他数组的副本为元素的多维数组。使用 cell 函数可以创建空矩阵的元胞数组。但是,更普遍的做法是,通过将其他内容的集合括入花括号 {} 中来创建元胞数组。例如,
a = cell(3,4)
b = {'abcdef' [1 2 3 4] 123 'x'}
检索某个元胞的内容,请在花括号中使用下标。例如,
b{1}
使用单引号在 MATLAB中输入文本。例如,
s = 'Hello'
其结果与您目前已学过的数值矩阵或数组不属于同一类型,而是一个 1×5 字符数组。
字符在内部作为数字存储,而不会采用浮点格式存储。语句
a = double(s)
将字符数组转换为数值矩阵,该矩阵包含每个字符的 ASCII 代码的浮点表示。结果为
a =
72 101 108 108 111
语句
s = char(a)
是刚才转换的逆转换。
结构体是多维 MATLAB数组,包含可按文本字段标志符访问的元素。例如,
S.name = 'Ed Plum';
S.score = 83;
S.grade = 'B+'
创建一个具有三个字段的标量结构体。
MATLAB不需要任何类型声明或维度说明。当 MATLAB遇到新的变量名称时,它会自动创建变量,并分配适当大小的存储。如果此变量已存在,MATLAB会更改其内容,并根据需要分配新存储。例如,
num_students = 25
创建一个名为 num_students 的 1×1 矩阵,并将值 25 存储在该矩阵的单一元素中。
表达式使用大家熟悉的算术运算符和优先法则。
运算符 | 含义 |
+ | 加法 |
- | 减法 |
/ | 除法 |
* | 乘法 |
\ | 左除 |
^ | 幂 |
’ | 复共轭转置 |
如果矩阵不用于线性代数运算,则成为二维数值数组。数组的算术运算按元素执行。这意味着,加法和减法运算对数组和矩阵都是相同的,但乘法运算不相同。MATLAB的乘法数组运算表示法中包含点,也就是小数点。
运算符列表包括:
运算符 | 含义 |
+ | 加法 |
- | 减法 |
./ | 逐元素除法 |
.* | 逐元素乘法 |
.\ | 逐元素左除 |
.^ | 逐元素幂 |
例如使用数组乘法将矩阵自乘
A.*A
使用关键字控制流和分支,如 if、for 和 while
Matlab语言语法:
语句 | 含义 |
if, elseif, else | 条件为 true 时执行语句 |
for | 用来重复指定次数的 for 循环 |
while | 条件为true时执行的while循环 |
break | 终止执行for或while循环 |
continue | 将控制权传递给 for 或 while 循环的下一迭代 |
end | 终止代码块或指示最大数组索引 |
return | 将控制权返回给调用函数 |
条件为 true 时执行语句
语法
if expression
statements
elseif expression
statements
else
statements
end
说明
elseif 和 else 模块是可选的。这些语句仅在 if…end 块中前面的表达式为 false 时才会执行。if 块可以包含多个 elseif 块。
示例:
%创建一个由 1 组成的矩阵。
nrows = 4;
ncols = 6;
A = ones(nrows,ncols);
%遍历矩阵并为每个元素指定一个新值。对主对角线赋值 2,对相邻对角线赋值 -1,对其他位置赋值 0。
for c = 1:ncols
for r = 1:nrows
if r == c
A(r,c) = 2;
elseif abs(r-c) == 1
A(r,c) = -1;
else
A(r,c) = 0;
end
end
end
A
运行结果:
A = 4×6
2 -1 0 0 0 0
-1 2 -1 0 0 0
0 -1 2 -1 0 0
0 0 -1 2 -1 0
用来重复指定次数的 for 循环
语法
for index = values
statements
end
说明
在循环中将一组语句执行特定次数。values 通常为下列形式之一:
%显示1~10之间的所有奇数
for i=1:2:10
i
end
条件为 true 时重复执行的 while 循环
语法
while expression
statements
end
说明
计算一个表达式,并在该表达式为 true 时在一个循环中重复执行一组语句。
示例:
%使用 while 循环计算阶乘 factorial(10)。
n = 10;
f = n;
while n > 1
n = n-1;
f = f*n;
end
disp(['n! = ' num2str(f)])
两种程序文件:
脚本是最简单的一种 MATLAB程序。脚本是一个包含多行连续的 MATLAB命令和函数调用的文件。在命令行中键入脚本名称即可运行该脚本。
%创建一个函数文件myadd.m。函数名必须与文件名相同。
下面列出了此文件:
function c = myadd(a,b)
c = a + b;
end
函数的第一行以关键字 function 开头。它提供函数名称和参数顺序。本示例中具有两个输入参数和一个输出参数。
可以采用多种不同方法使用 myadd 函数:
myadd(1, 2)
c = myadd(2, 3)
使用 imread 函数可以读取标准图像文件(TIFF、JPEG、PNG 等)。imread 返回的数据类型取决于读取的图像类型。
使用 imwrite 函数可以将 MATLAB数据写入到各种标准图像格式。
mImg = imread('C:\\xxxxxxxxxxxxxxx\\a0.bmp');
mImg = rgb2gray(mImg);
使用 imshow 函数
figure;
imshow(mImg);
mImg = rgb2gray(mImg);
%从0-255的无符号8位整数转换为0-1的双精度数:
mImg = im2double(mImg);
%实现图像矩阵的归一化操作。使矩阵的每个元素的值都在0和1之间。
mImg = mat2gray(mImg);
整数和浮点数据
MATLAB中的数值类包括有符号和无符号整数、单精度和双精度浮点数。默认情况下,MATLAB以双精度浮点形式存储所有数值。(不能更改默认类型和精度。)可以选择以整数或单精度形式存储任何数值或数值数组。与双精度数组相比,以整数和单精度数组形式存储数据更节省内存。
所有数值类型都支持基本的数组运算,例如添加下标、重构和数学运算。
数值类型 | 含义 |
double | 双精度数组 |
single | 单精度数组 |
int8 | 8位有符号整数数组 |
int16 | 16位有符号整数数组 |
int32 | 32位有符号整数数组 |
int64 | 64位有符号整数数组 |
uint8 | 8位无符号整数数组 |
uint16 | 16位无符号整数数组 |
uint32 | 32位无符号整数数组 |
uint64 | 64位无符号整数数组 |
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删