MATLAB 期末复习知识点总结
一、MATLAB 操作界面的窗口
MATLAB 操作界面主要包含以下几个核心窗口,熟练掌握各窗口功能是高效使用 MATLAB 的基础。
- 主窗口
主窗口是 MATLAB 的核心界面,集成了菜单栏、工具栏和各种功能区。用户可以通过菜单栏执行文件操作、编辑、调试等命令;工具栏则提供了常用功能的快捷按钮,如新建、打开、保存文件等。此外,主窗口还可以根据用户需求自定义布局,方便同时查看多个工具窗口。 - 命令窗口(Command Window)
命令窗口是与 MATLAB 进行交互的主要场所。用户可以在此输入各种 MATLAB 命令、函数调用和表达式,并立即获得计算结果。例如:
>> a = 5; % 定义变量a
>> b = 3; % 定义变量b
>> c = a + b % 计算a+b的值并赋给c
c =
8
在命令窗口中,以%开头的内容为注释,用于解释代码功能,不会被 MATLAB 执行。
3. 工作空间窗口(Workspace)
工作空间窗口显示当前 MATLAB 会话中所有变量的信息,包括变量名、大小、类型、字节数和值。用户可以在此查看、修改或删除变量。例如,在命令窗口中定义变量后,工作空间窗口会相应显示这些变量的信息。双击变量还可以打开变量编辑器,直观地查看和编辑数组、矩阵等复杂数据结构。
4. 当前目录窗口(Current Folder)
当前目录窗口显示当前工作目录下的所有文件和文件夹。MATLAB 在执行文件操作时,会默认在当前工作目录中查找文件。用户可以通过该窗口浏览文件、切换工作目录,或对文件进行复制、粘贴、删除等操作。设置合适的工作目录可以避免文件路径错误,提高编程效率。
5. 命令历史窗口(Command History)
命令历史窗口记录了用户在命令窗口中输入的所有命令。用户可以双击历史命令来重新执行,或通过右键菜单对命令进行编辑、复制等操作。这对于重复执行相同命令或修改之前的命令非常方便,避免了重复输入的麻烦。
二、函数文件的命名和存储规则
- 命名规则
函数文件名必须与函数名一致,且以.m为扩展名。例如,定义一个名为myFunction的函数,其文件必须命名为myFunction.m。
函数名必须以字母开头,可以包含字母、数字和下划线,但不能包含空格或其他特殊字符。例如,calcSum_2是合法的函数名,而2calcSum或calc Sum是不合法的。 - 存储规则
函数文件通常存储在 MATLAB 的搜索路径下,以便 MATLAB 能够找到并调用它们。用户可以通过addpath命令将自定义函数所在目录添加到搜索路径中。
函数文件也可以存储在当前工作目录下,但这种方式不够灵活,建议将常用函数放在固定的搜索路径目录中。
三、Inf,NaN,nargout,nargin 的含义 - Inf(无穷大)
Inf表示数学中的无穷大,通常在计算结果超出 MATLAB 所能表示的数值范围时出现。例如:
>> 1/0
ans =
Inf
Inf可以参与数学运算,其运算规则遵循数学中无穷大的运算规则。
2. NaN(非数)
NaN表示 “非数”(Not a Number),通常在计算结果无意义时出现。例如:
>> 0/0
ans =
NaN
NaN的存在表示计算过程中出现了问题,需要检查输入数据或算法逻辑。
3. nargout(输出参数个数)
nargout是 MATLAB 中的一个特殊变量,用于在函数内部获取调用该函数时指定的输出参数个数。例如:
function [a, b] = myFunction(x)
if nargout == 1
a = x;
elseif nargout == 2
a = x;
b = x^2;
end
end
在这个例子中,函数myFunction根据nargout的值决定返回一个还是两个输出参数。
4. nargin(输入参数个数)
nargin是 MATLAB 中的另一个特殊变量,用于在函数内部获取调用该函数时提供的输入参数个数。例如:
function result = sumNumbers(a, b, c)
if nargin == 2
result = a + b;
elseif nargin == 3
result = a + b + c;
end
end
在这个例子中,函数sumNumbers根据nargin的值决定执行不同的计算逻辑。
四、变量命名法则
MATLAB 中变量命名需要遵循以下规则:
变量名必须以字母开头,不能以数字或其他字符开头。例如,var1是合法的,而1var是不合法的。
变量名可以包含字母、数字和下划线,但不能包含空格或其他特殊字符。例如,my_var_2是合法的,而my-var或my var是不合法的。
变量名区分大小写。例如,Var和var是两个不同的变量。
变量名不能与 MATLAB 的内置函数名或关键字相同。例如,不能使用sin、if、for等作为变量名。
五、MATLAB 程序文件和 Simulink 模型文件的扩展名
- MATLAB 程序文件
MATLAB 程序文件的扩展名为.m,包括脚本文件和函数文件。脚本文件是一系列 MATLAB 命令的集合,执行时按顺序逐行执行;函数文件则定义了一个或多个函数,需要通过函数调用才能执行。 - Simulink 模型文件
Simulink 模型文件的扩展名为.slx,用于创建和仿真动态系统模型。Simulink 提供了直观的图形化界面,用户可以通过拖放模块、连接信号线来构建系统模型,并进行仿真分析。
六、常见标点符号的用法 - 分号(;)
用于语句结尾,表示不显示该行的执行结果。例如:
a = 5; % 定义变量a,但不显示其值
用于矩阵或数组元素的分隔。例如:
A = [1 2 3; 4 5 6]; % 创建一个2x3的矩阵
- 逗号(,)
用于函数参数的分隔。例如:
result = sum(a, b); % 调用sum函数,传入两个参数
用于同一行中多个语句的分隔。例如:
a = 1, b = 2; % 定义两个变量,在同一行中执行
- 百分号(%)
用于注释,其后的内容不会被 MATLAB 执行。例如:
% 这是一个注释,解释下面代码的功能
a = 5;
- 圆括号(())
用于函数调用的参数列表。例如:
sin(pi/2); % 调用sin函数,计算sin(π/2)
用于数组或矩阵的索引。例如:
A(2, 3); % 访问矩阵A的第2行第3列元素
- 冒号(:)
用于创建等差数列。例如:
x = 1:5; % 创建从1到5的等差数列,步长为1
用于数组或矩阵的切片操作。例如:
A(:, 2); % 提取矩阵A的第2列所有元素
- 方括号([])
用于创建数组或矩阵。例如:
a = [1 2 3]; % 创建一个行向量
A = [1 2; 3 4]; % 创建一个2x2的矩阵
- 花括号({})
用于细胞数组(Cell Array)的创建和访问。例如:
C = {1, 'hello', [2 3 4]}; % 创建一个细胞数组
C{2}; % 访问细胞数组C的第2个元素
七、常见工具箱(Toolbox)
MATLAB 提供了丰富的工具箱,用于不同领域的专业计算和分析。以下是一些常见的工具箱:
- Signal Processing Toolbox
信号处理工具箱,提供了各种信号处理算法和工具,用于信号滤波、频谱分析、小波变换等。适用于通信、音频处理、图像处理等领域。 - Image Processing Toolbox
图像处理工具箱,用于图像增强、分割、特征提取和分析等。提供了丰富的图像处理函数和算法,广泛应用于计算机视觉、医学图像处理等领域。 - Control System Toolbox
控制系统工具箱,用于控制系统的建模、分析和设计。支持传递函数、状态空间模型等多种表示方法,提供了稳定性分析、PID 控制器设计等功能。 - Optimization Toolbox
优化工具箱,提供了各种优化算法,用于求解线性规划、非线性规划、整数规划等优化问题。适用于工程设计、经济分析、机器学习等领域。 - Statistics and Machine Learning Toolbox
统计和机器学习工具箱,提供了统计分析、数据挖掘和机器学习算法。支持分类、回归、聚类、降维等任务,可用于数据分析、模式识别等领域。
八、常见运算符的优先级
MATLAB 中运算符的优先级决定了表达式中各运算符的计算顺序。以下是常见运算符的优先级列表,从高到低排列:
括号(())
幂运算(^)
一元运算符(+、-)
乘除运算(*、/、\)
加减运算(+、-)
关系运算符(<、>、<=、>=、==、~=)
逻辑非(~)
逻辑与(&)
逻辑或(|)
短路逻辑与(&&)
短路逻辑或(||)
在复杂表达式中,建议使用括号明确指定计算顺序,以避免因优先级问题导致的错误。
九、数组操作函数
- 创建数组
zeros(m, n):创建 m 行 n 列的全零数组。
ones(m, n):创建 m 行 n 列的全 1 数组。
eye(n):创建 n 阶单位矩阵。
linspace(a, b, n):创建从 a 到 b 的 n 个等距点的数组。
logspace(a, b, n):创建从 10^a 到 10^b 的 n 个对数等距点的数组。 - 数组操作
size(A):返回数组 A 的大小。
length(A):返回数组 A 的长度(最大维度的大小)。
reshape(A, m, n):将数组 A 重新调整为 m 行 n 列的数组。
transpose(A)或A’:返回数组 A 的转置。
flipud(A):上下翻转数组 A。
fliplr(A):左右翻转数组 A。
sort(A):对数组 A 进行排序。
sum(A):计算数组 A 的元素和。
prod(A):计算数组 A 的元素积。
mean(A):计算数组 A 的元素平均值。
std(A):计算数组 A 的元素标准差。
十、数值的创建、代数运算、关系运算和逻辑运算 - 数值的创建
直接赋值:a = 5;
科学计数法:b = 3.2e-4;(表示 3.2×10^-4)
特殊数值:pi(圆周率 π)、i或j(虚数单位) - 代数运算
加法:a + b
减法:a - b
乘法:a * b
除法:a / b(右除)、a \ b(左除,相当于 b/a)
幂运算:a ^ b - 关系运算
小于:a < b
大于:a > b
小于等于:a <= b
大于等于:a >= b
等于:a == b
不等于:a ~= b - 逻辑运算
逻辑非:~a
逻辑与:a & b
逻辑或:a | b
短路逻辑与:a && b(只有当 a 为真时才会计算 b)
短路逻辑或:a || b(只有当 a 为假时才会计算 b)
十一、数组的寻址 - 单下标寻址
在 MATLAB 中,多维数组可以通过单下标进行寻址。数组元素按列优先存储,即先存储第一列的元素,再存储第二列的元素,依此类推。例如:
A = [1 2 3; 4 5 6]; % 创建一个2x3的矩阵
A(4); % 访问第4个元素,结果为5
- 双下标寻址
双下标寻址使用行和列的索引来访问数组元素。例如:
A = [1 2 3; 4 5 6];
A(2, 3); % 访问第2行第3列的元素,结果为6
- 冒号操作符
冒号操作符可用于选择多行或多列。例如:
A = [1 2 3; 4 5 6; 7 8 9];
A(:, 2); % 选择第2列的所有元素,结果为[2; 5; 8]
A(2, :); % 选择第2行的所有元素,结果为[4 5 6]
A(1:2, 2:3); % 选择第1到2行、第2到3列的元素,结果为[2 3; 5 6]
十二、MATLAB 数据类型
- 数值型
整数类型:int8、uint8、int16、uint16、int32、uint32、int64、uint64
浮点类型:single(单精度)、double(双精度,默认类型) - 逻辑型
逻辑型数据只有两个值:true(真)和false(假)。逻辑型变量通常用于条件判断和逻辑运算。 - 字符型
字符型数据用于表示文本,使用单引号括起来。例如:s = ‘hello’;。多个字符组成的数组称为字符串,MATLAB 提供了丰富的字符串处理函数。 - 细胞型(Cell Array)
细胞数组是一种特殊的数组,其元素可以是不同类型的数据。细胞数组使用花括号{}创建和访问。例如:
C = {1, 'hello', [2 3 4]}; % 创建一个细胞数组
C{2}; % 访问第2个元素,结果为'hello'
- 结构型(Structure)
结构数组是一种将不同类型的数据组织在一起的数据类型,每个元素可以有不同的字段。结构数组使用点号.访问字段。例如:
student.name = 'John'; % 创建一个结构数组student,添加name字段
student.age = 20; % 添加age字段
student.grades = [85 90 92]; % 添加grades字段
student.name; % 访问name字段,结果为'John'
十三、细胞数组的操作
- 创建方法
直接赋值:C = {1, ‘hello’, [2 3 4]};
使用cell函数预分配空间后赋值:
C = cell(2, 3); % 创建一个2x3的空细胞数组
C{1, 1} = 10; % 给第1行第1列的元素赋值
C{1, 2} = 'abc'; % 给第1行第2列的元素赋值
- 访问方法
圆括号():返回一个子细胞数组。例如:
C = {1, 'hello', [2 3 4]};
C(1:2); % 返回包含第1和第2个元素的子细胞数组
花括号{}:返回细胞数组中的实际元素。例如:
C = {1, 'hello', [2 3 4]};
C{2}; % 返回'hello'
- 扩充和收缩
扩充:可以通过直接赋值的方式扩充细胞数组。例如:
C = {1, 2};
C{3} = 3; % 扩充细胞数组,添加第3个元素
收缩:可以使用celldisp函数显示细胞数组的内容,使用clear函数删除指定元素。例如:
clear C{2}; % 删除第2个元素
- 重组
使用reshape函数重新调整细胞数组的大小。例如:
C = {1, 2, 3, 4};
C = reshape(C, 2, 2); % 重新调整为2x2的细胞数组
十四、结构数组的操作
- 创建
直接赋值:
student.name = 'John';
student.age = 20;
student.grades = [85 90 92];
创建多个元素的结构数组:
students(1).name = 'John';
students(1).age = 20;
students(2).name = 'Mary';
students(2).age = 21;
- 访问
使用点号.访问结构数组的字段。例如:
students(1).name; % 访问第一个学生的姓名
使用fieldnames函数获取结构数组的所有字段名。例如:
fields = fieldnames(students); % 获取所有字段名
- 删除域
使用rmfield函数删除结构数组的指定字段。例如:
students = rmfield(students, 'age'); % 删除age字段
十五、矩阵及其运算
- 基本运算
加法和减法:两个矩阵必须具有相同的大小。例如:
A = [1 2; 3 4];
B = [5 6; 7 8];
C = A + B; % 矩阵加法
D = A - B; % 矩阵减法
乘法:矩阵 A 的列数必须等于矩阵 B 的行数。例如:
A = [1 2; 3 4];
B = [5 6; 7 8];
C = A * B; % 矩阵乘法
左除和右除:
右除A/B等价于A*inv(B)(B 的逆矩阵右乘 A)。
左除A\B等价于inv(A)*B(A 的逆矩阵左乘 B)。
乘方和开方:
A = [1 2; 3 4];
B = A^2; % 矩阵乘方,等价于A*A
C = sqrtm(A); % 矩阵开方,计算A的平方根矩阵
- 特殊运算
逆矩阵:inv(A)计算矩阵 A 的逆矩阵。
迹:trace(A)计算矩阵 A 的迹(主对角线元素之和)。
秩:rank(A)计算矩阵 A 的秩。
行列式:det(A)计算矩阵 A 的行列式。
特征值和特征向量:eig(A)计算矩阵 A 的特征值和特征向量。 - 取整函数
fix(x):向零取整,即舍去小数部分。例如:fix(3.8)结果为 3,fix(-3.8)结果为 - 3。
round(x):四舍五入取整。例如:round(3.4)结果为 3,round(3.6)结果为 4。
floor(x):向下取整,即取不大于 x 的最大整数。例如:floor(3.8)结果为 3,floor(-3.8)结果为 - 4。
ceil(x):向上取整,即取不小于 x 的最小整数。例如:ceil(3.2)结果为 4,ceil(-3.2)结果为 - 3。 - 求余函数
mod(x, y):计算 x 除以 y 的余数,结果的符号与 y 相同。例如:mod(7, 3)结果为 1,mod(-7, 3)结果为 2。
rem(x, y):计算 x 除以 y 的余数,结果的符号与 x 相同。例如:rem(7, 3)结果为 1,rem(-7, 3)结果为 - 1。
十六、数值型数据的类型及转换 - 数值型数据类型
整数类型:
int8:8 位有符号整数,取值范围为 - 128 到 127。
uint8:8 位无符号整数,取值范围为 0 到 255。
int16:16 位有符号整数,取值范围为 - 32768 到 32767。
uint16:16 位无符号整数,取值范围为 0 到 65535。
int32:32 位有符号整数,取值范围为 - 2147483648 到 2147483647。
uint32:32 位无符号整数,取值范围为 0 到 4294967295。
int64:64 位有符号整数,取值范围为 - 9223372036854775808 到 9223372036854775807。
uint64:64 位无符号整数,取值范围为 0 到 18446744073709551615。
浮点类型:
single:单精度浮点数,占 4 个字节,精度约为 7 位有效数字。
double:双精度浮点数,占 8 个字节,精度约为 15 位有效数字,是 MATLAB 的默认数值类型。 - 类型转换函数
int8(x):将 x 转换为 8 位有符号整数。
uint8(x):将 x 转换为 8 位无符号整数。
single(x):将 x 转换为单精度浮点数。
double(x):将 x 转换为双精度浮点数。
logical(x):将 x 转换为逻辑型数据,非零值转换为true,零值转换为false。