MATLAB(矩阵实验室)是用于数字计算,可视化和编程的第四代高级编程语言和交互式环境。
MATLAB由MathWorks开发。 官方文档:https://ww2.mathworks.cn/help/matlab/language-fundamentals.html
它允许矩阵操作;功能和数据绘制;算法的实现;创建用户界面;与使用其他语言(包括C,C ++,Java和FORTRAN)编写的程序进行交互;分析数据;开发算法;并创建模型和应用程序。
它具有许多内置命令和数学函数,可帮助您进行数学计算,生成图和执行数值方法。
MATLAB环境的行为就像一个超级复杂的计算器。您可以在>>命令提示符下输入命令。
MATLAB是一个解释型环境。换句话说,您给出了一个命令,MATLAB立即执行了该命令。
常用运算符和特殊字符
运算符 | 目的 |
---|---|
+ | 加; 加法运算符 |
- | 减; 减法运算符 |
* | 标量和矩阵乘法运算符 |
.* | 数组乘法运算符 |
^ | 标量和矩阵求幂运算符 |
.^ | 数组求幂运算符 |
\ | 左除法运算符 |
/ | 右除法运算符 |
.\ | 数组左除法运算符 |
./ | 数组右除法运算符 |
: | 冒号;生成规则间距的元素并表示整行或整列 |
() | 圆括号;封闭函数参数和数组索引;重写优先级 |
[] | 括号;附件数组元素 |
. | 小数点 |
... | 省略号;行连续运算符 |
, | 逗号;分隔一行中的语句和元素 |
; | 分号; 分隔列并抑制显示 |
% | 百分号;指定注释并指定格式 |
' | 引用符号和转置运算符 |
.' | Nonconjugated转置运算符 |
= | 赋值运算符 |
特殊变量和常量
名称 | 意义 |
---|---|
ans | 最近计算的答案 |
eps | 浮点精度 |
i,j | 虚数单位√-1 |
Inf | 无穷 |
NaN | 未定义的数值结果(不是数字) |
pi | π |
保存文件和加载文件
save myfile % 用于将工作空间中的所有变量保存为当前目录中扩展名为.mat的文件
load myfile % 随时使用load命令重新加载文件
在MATLAB环境中,每个变量都是一个数组或矩阵
您可以通过简单的方式分配变量。例如,
x = 3 % 定义x并用值初始化它
% 它创建一个名为x的1乘1矩阵,并将值3存储在其元素中
sqrt(3) % 匿名创建一个 ans = 9
% MATLAB将执行上述语句并返回以下结果
% ans = 9
a = 1; b = 3; c = a + b % 多项创建变量
% 创建向量:向量是一维数字数组。MATLAB允许创建两种类型的向量,行向量和列向量
vec = [1, 2, 3, 4] % vec = [1 2 3 4]也ok,创建行向量
vec_ = [1; 2; 3; 4] % 创建列向量
r = [7 8 9 10 11];
t = [2, 3, 4, 5, 6];
res = r + t
% 创建矩阵:在MATLAB中,通过以空格或逗号分隔的元素的顺序输入每一行来创建矩阵,并用分号分隔行的结尾
temp = [1, 2, 3; 4 5 6; 7 8 9] % 创建一个 3 x 3 的矩阵
注意: 将变量输入系统后,您以后可以参考它 变量在使用前必须具有值 当表达式返回未分配给任何变量的结果时,系统会将其分配给名为ans的变量,该变量可在以后使用
who % 显示您创建的所有的变量信息
whos % 显示创建的所有变量,以及内存空间,和数据类型
可以使用省略号(…)将长作业扩展到另一行
d = 0 ...
+ 2 + 4 ...
+ 5 % 返回的结果是 11
format
:默认格式format short
:5字长定点数,显示5位(scaled fixed point format with 5 digits)format long
:15字长定点数,显示15位双精度,7位单精度(scaled fixed point)format short e
:5字长浮点数format long e
:15字长浮点数format hex
:16进制format bank
:定点货币形式format rat
:小数分数表示format +
:+,-,空格format compact
:压缩空格format loose
:括空格和空行format long
:15字长定点数format short e
:5字长浮点数format long e
:15字长浮点数format short g
:5位定点或浮点格式。format long g
:对双精度,显示15位定点或浮点格式,对单精度,显示7位定点或浮点格式
format short
4.678 * 4.9
命令 | 目的 |
---|---|
clc | 清除命令窗口 |
clear | 从内存中删除变量 |
exist | 检查文件或变量的存在 |
global | 声明变量为全局变量 |
help | 搜索帮助主题 |
lookfor | 在帮助条目中搜索关键字 |
quit | 停止MATLAB |
who | 列出当前变量 |
whos | 列出当前变量(长显示) |
命令 | 目的 |
---|---|
cd | 更改当前目录 |
date | 显示当前日期 |
delete | 删除文件 |
diary | 开启/关闭日记文件录制 |
dir | 列出当前目录中的所有文件 |
load | 从文件加载工作区变量 |
path | 显示搜索路径 |
pwd | 显示当前目录 |
save | 将工作空间变量保存在文件中 |
type | 显示文件的内容 |
what | 列出当前目录中的所有MATLAB文件 |
wklread | 读取.wk1电子表格文件 |
命令 | 目的 |
---|---|
disp | 显示数组或字符串的内容 |
fscanf | 从文件中读取格式化的数据 |
format | 控制屏幕显示格式 |
fprintf | 执行对屏幕或文件的格式化写入 |
input | 显示提示并等待输入 |
; | 禁止丝网印刷 |
fscanf和fprintf命令的行为像C的scanf和printf函数。它们支持以下格式代码-
格式代码 | 目的 |
---|---|
%s | 格式化为字符串 |
%d | 格式化为整数 |
%f | 格式化为浮点值 |
%e | 以科学计数形式格式化为浮点值 |
%g | 以最紧凑的格式进行格式化:%f或%e |
\n | 在输出字符串中插入新行 |
\t | 在输出字符串中插入一个选项卡 |
命令 | 目的 |
---|---|
cat | 连接数组 |
find | 查找非零元素的索引 |
length | 计算元素数 |
linspace | 创建规则间隔的矢量 |
logspace | 创建对数间隔的向量 |
max | 返回最大元素 |
min | 返回最小的元素 |
prod | 每列的乘积 |
reshape | 更改大小 |
size | 计算数组大小 |
sort | 对每一列进行排序 |
sum | 对每列求和 |
eye | 创建一个单位矩阵 |
ones | 创建一个数组 |
zeros | 创建一个零数组 |
cross | 计算矩阵叉积 |
dot | 计算矩阵点积 |
det | 计算数组的行列式 |
inv | 计算矩阵的逆 |
pinv | 计算矩阵的伪逆 |
rank | 计算矩阵的秩 |
rref | 计算精简行梯形表格 |
cell | 创建单元格数组 |
celldisp | 显示单元格数组 |
cellplot | 显示单元格数组的图形表示形式 |
num2cell | 将数字数组转换为单元格数组 |
deal | 匹配输入和输出列表 |
iscell | 标识单元格数组 |
命令 | 目的 |
---|---|
axis | 设置轴限制 |
fplot | 函数的智能绘图 |
grid | 显示网格线 |
plot | 生成xy图 |
打印图或将图保存到文件中 | |
title | 将文本放在图的顶部 |
xlabel | 在x轴上添加文本标签 |
ylabel | 将文本标签添加到y轴 |
axes | 创建轴对象 |
close | 关闭当前图 |
close all | 关闭所有地块 |
figure | 打开一个新的图形窗口 |
gtext | 通过鼠标启用标签放置 |
hold | 冻结当前图 |
legend | 用鼠标放置图例 |
refresh | 重新绘制当前图形窗口 |
set | 指定对象(例如轴)的属性 |
subplot | 在子窗口中创建图 |
text | 在图中放置字符串 |
bar | 创建条形图 |
loglog | 创建对数-对数图 |
polar | 创建极坐标图 |
semilogx | 创建半对数图(对数横坐标) |
semilogy | 创建半对数图(对数纵坐标) |
stairs | 创建楼梯图 |
stem | 创建茎图 |
到目前为止,我们已经使用MATLAB环境作为计算器。但是,MATLAB还是一种强大的编程语言,也是一种交互式计算环境
在前面的章节中,您学习了如何从MATLAB命令提示符下输入命令。MATLAB还允许您将一系列命令写入文件并以完整的单元形式执行文件,例如编写函数和调用它
MATLAB允许编写两种程序文件-
您可以使用MATLAB编辑器或任何其他文本编辑器来创建**.m**文件。在本节中,我们将讨论脚本文件。脚本文件包含多行MATLAB命令和函数调用。您可以通过在命令行中输入脚本名称来运行脚本
要创建脚本文件,您需要使用文本编辑器。您可以通过两种方式打开MATLAB编辑器-
编写脚本:
NoOfStudents = 6000;
TeachingStaff = 150;
NonTeachingStaff = 20;
Total = NoOfStudents + TeachingStaff ...
+ NonTeachingStaff;
disp(Total);
创建并保存文件后,可以通过两种方式运行它-
MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名,它就创建变量并分配适当的内存空间。
如果变量已经存在,那么MATLAB将用新内容替换原始内容,并在必要时分配新的存储空间
序号 | 数据类型和说明 |
---|---|
1 | int88位有符号整数 |
2 | uint88位无符号整数 |
3 | int1616位有符号整数 |
4 | uint1616位无符号整数 |
5 | int3232位有符号整数 |
6 | uint3232位无符号整数 |
7 | int6464位有符号整数 |
8 | uint6464位无符号整数 |
9 | single单精度数值数据 |
10 | double双精度数值数据 |
11 | logical逻辑值1或0,分别表示true和false |
12 | char字符数据(字符串存储为字符向量) |
13 | cell array索引单元格数组,每个单元格能够存储不同维度和数据类型的数组 |
14 | structure类似于C的结构,每个结构都具有能够存储不同维度和数据类型的数组的命名字段 |
15 | function handle指向函数的指针 |
16 | user classes从用户定义的类构造的对象 |
17 | java classes从Java类构造的对象 |
函数 | 作用 |
---|---|
char | 转换为字符数组(字符串) |
int2str | 将整数数据转换为字符串 |
mat2str | 将矩阵转换为字符串 |
num2str | 将数字转换为字符串 |
str2double | 将字符串转换为双精度值 |
str2num | 将字符串转换为数字 |
native2unicode | 将数字字节转换为 Unicode 字符 |
unicode2native | 将Unicode字符转换为数字字节 |
base2dec | 将N进制数字符串转换为十进制数 |
bin2dec | 将二进制数字符串转换为十进制数 |
dec2base | 将十进制数转换为字符串中的N进制数 |
dec2bin | 将十进制转换为字符串中的二进制数 |
dec2hex | 将字符串中的十进制数转换为十六进制数 |
hex2dec | 将十六进制数字字符串转换为十进制数字 |
hex2num | 将十六进制数字字符串转换为双精度数字 |
num2hex | 将单精度和双精度转换为IEEE十六进制字符串 |
cell2mat | 将单元格数组转换为数值数组 |
cell2struct | 将单元数组转换为结构数组 |
cellstr | 从字符数组创建字符串的单元格数组 |
mat2cell | 将数组转换为单元格大小可能不同的单元格 |
num2cell | 将数组转换为大小一致的单元格数组 |
struct2cell | 将结构转换为单元格数组 |
函数 | 作用 |
---|---|
is | 检测状态 |
isa | 确定输入是否为指定类的对象 |
iscell | 确定输入是否为单元格数组 |
iscellstr | 确定输入是否为字符串的单元格数组 |
ischar | 确定项目是否为字符数组 |
isfield | 确定输入是否为结构数组字段 |
isfloat | 确定输入是否为浮点数组 |
ishghandle | 适用于处理图形对象句柄 |
isinteger | 确定输入是否为整数数组 |
isjava | 确定输入是否为Java对象 |
islogical | 确定输入是否为逻辑数组 |
isnumeric | 确定输入是否为数值数组 |
isobject | 确定输入是否为MATLAB对象 |
isreal | 检查输入是否为实数数组 |
isscalar | 确定输入是否为标量 |
isstr | 确定输入是否为字符数组 |
isstruct | 确定输入是否为结构数组 |
isvector | 确定输入是否为向量 |
class | 确定对象的类别 |
validateattributes | 检查数组的有效性 |
whos | 列出工作空间中的变量,包括大小和类型 |
运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。MATLAB设计为主要在整个矩阵和数组上运行。因此,MATLAB中的运算符既可以处理标量数据,也可以处理非标量数据。MATLAB允许以下类型的基本运算-
MATLAB允许两种不同类型的算术运算-
矩阵算术运算与线性代数中定义的相同。数组操作是在一维和多维数组上逐个元素执行的。
矩阵运算符和数组运算符之间用句点(。)符号进行区分。但是,由于矩阵和数组的加法和减法运算相同,因此两种情况下的运算符均相同。下表简要介绍了运算符
运算符 | 目的 |
---|---|
+ | 加法或一元加号。A+B将存储在变量A和B中的值相加。A和B必须具有相同的大小,除非其中一个是标量。标量可以添加到任何大小的矩阵中。 |
- | 减法或一元减法。A-B从A中减去B的值。A和B必须具有相同的大小,除非其中一个是标量。标量可以从任何大小的矩阵中减去。 |
* | 矩阵乘法。C=A*B是矩阵A和B的线性代数积。更准确地说, C ( i , j ) = ∑ k = 1 n A ( i , k ) B ( k , j ) C(i, j) = \sum_{k=1}^n {A(i, k)B(k, j)} C(i,j)=∑k=1nA(i,k)B(k,j)对于非标量A和B,A的列数必须等于B的行数。标量可以与任意大小的矩阵相乘 |
.* | 数组乘法。A.*B是数组A和B的逐元素乘积。A和B必须具有相同的大小,除非其中一个是标量 |
^ | 矩阵幂。如果p是标量,那么$X^p $是p的幂。如果p是整数,则通过重复平方计算幂。如果整数是负数,则X先倒数。对于p的其他值,计算涉及特征值和特征向量,因此如果[V,D]=eig(X),那么X^p = V*D.^ p / V |
.^ | 数组幂。A.^B是元素A(i,j)为B(i,j)次方的矩阵。A和B必须具有相同的大小,除非其中一个是标量 |
\ | 左除法运算符,如果A是方阵,则A\B与inv(A)*B大致相同,只是计算方式不同。如果A是一个n乘n的矩阵,而B是一个包含n个分量的列向量,或者是一个包含多个这样的列的矩阵,那么X=A\B是方程AX=B的解。如果A的比例严重或几乎是单数,则会显示一条警告消息 |
/ | 右除法运算符,B/A与B*inv(A)大致相同。更准确地说, B/A = (A’\B’)'. |
.\ | 数组左除法运算符,A.\B是元素B(i,j)/A(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量 |
./ | 数组右除法运算符,A./B是元素A(i,j)/B(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量 |
' | 矩阵转置。A’是A的线性代数转置。对于复矩阵,这是复共轭转置 |
.' | 数组转置 a’是 a 的数组转置。对于复杂的矩阵,这不涉及共轭。 |
符号 | 描述 |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
~= | 不等于 |
MATLAB提供两种类型的逻辑运算符和函数
逐个元素的逻辑运算符在逻辑数组上逐个元素地进行操作。符号&,|和〜是逻辑数组运算符AND,OR和NOT
短路逻辑运算符允许逻辑运算短路。符号&&和|| 是逻辑短路运算符AND和OR
函数 | 作用 |
---|---|
bitand(a, b) | 整数 a 和 b 的位与 |
bitcmp(a) | a的逐位补码 |
bitget(a,pos) | 在整数数组a的指定位置获取位 |
bitor(a, b) | 整数a和b的位或 |
bitset(a, pos) | 将bit设置为a的特定位置pos |
bitshift(a, k) | 返回一个由向左移动ķ比特,相当于乘以2^ķ 。k的负值对应于右移位或除以2 | k | 并朝负无穷大四舍五入到最接近的整数。任何溢出位都将被截断。 |
bitxor(a, b) | 整数 a 和 b 的位异或 |
swapbytes | 整数 a 和 b 的位异或 |
函数 | 描述 |
---|---|
intersect(A, B) | 设置两个数组的交集:返回A和B的公共值,返回的值按顺序排列 |
intersect(A, B, 'rows') | 将A的每一行和B的每一列视为单个实体,并返回A和B的共用的行。返回矩阵的行按顺序排列 |
ismember(A, B) | 返回一个与A大小相同的数组,其中包含1,其中A的元素位于B中,在其他位置,它返回0 |
ismember(A, B, 'rows') | 将A的每一行和B的每一行视为单个实体,并返回一个包含1的向量,其中矩阵A的行也是B的行,在其他地方,它返回0 |
issorted(A) | 如果元素按顺序排列,则返回逻辑1,否则返回逻辑0,。输入A可以是向量,也可以是单行或单列的数组,如果A和sort(A)的输出相等,则认为A被排序 |
issorted(A, 'rows') | 如果二维矩阵A的行按顺序排列,则返回逻辑1,否则返回逻辑0,如果A和sortrows(A)的输出相等,则认为矩阵A是排序的 |
setdiff(A, B) | 设置两个数组的差值:返回A中不在B中的值,返回数组中的值按排序顺序结构 |
setdiff(A, B, 'rows') | 将A的每一行和B的每一列视为单个实体,并返回A中不在B中的行。返回矩阵的行按排序顺序排列。"rows"选项不支持单元格数组 |
setxor | 两个数组异或 |
union | 两个数组的并集 |
unique | 数组中的唯一值 |
决策结构要求程序员应指定一个或多个要由程序评估或测试的条件,如果确定条件为真,则应指定要执行的一个或多个语句,如果条件为真,则可以选择要执行的其他语句。条件确定为假。
语句 | 说明 |
---|---|
if...end | 一个if…end语句有一个布尔表达式和一个或多个语句组成 |
if...else...end | if语句后面跟一个可选的else语句,该语句在布尔表达式为false时执行 |
if...elseif...elseif...else...end | if语句后面可以跟一个(或多个)可选的elseif,还有一个else语句,它对测试各种条件非常有用 |
if...if...end...end | 可以在另一个if或else语句中使用一个if…else语句 |
switch | switch语句允许根据值列表测试变量是否相等 |
a = 10; b = 23;
% 进行条件语句的判断
if a >= 10
display "a大于10"
if b > 20
display "并且b大于20"
end
end
switch a
case 1
display "a的值为1" % 自动会进行中断循环,不需要加break
otherwise
display "a值不符合要求"
end
循环语句
类型 | 说明 |
---|---|
for | 多次执行一个语句序列,并简化管理循环变量的代码 |
while | 在给定条件为真时重复一个语句或一组语句。 它在执行循环体之前测试条件 |
循环控制语句
语句 | 说明 |
---|---|
break | 终止循环语句,并在循环之后立即将执行转移到该语句 |
continue | 使循环跳过其主体的其余部分,并在重复之前立即重新测试其状态 |
a = 10;
% while loop execution
while( a < 20 )
fprintf('while value of a: %d\n', a);
a = a + 1;
end
% for initval:step:endval / initval:endval / initval
for b = 0: 10: 100
fprintf("for value of b: %d\n", b)
end
% 也可以传入一个向量等
for a = [24,18,17,23,28]
disp(a)
end
向量是一维数字数组。MATLAB允许创建两种类型的向量-
r_h = [7 8 9 10 11]; % 创建一个行向量
r_v = [1; 2; 3; 4; 5]; % 创建一个列向量
r_h = [7 8 9 10 11]; % 创建一个行向量
r_v = [1; 2; 3; 4; 5]; % 创建一个列向量
r_h(2) % 获取第二个元素
r_v(1) % 获取第一个元素
r_h(:) % 遍历元素
% initval:step:endval / initval:endval / :
r_v(2: 5) % 获取第2到5个元素,两端都可以获取到
您可以添加或减去两个向量。两个操作数向量必须具有相同的类型并具有相同数量的元素
A = [7, 11, 15, 23, 9]; % 创建向量
B = [2, 5, 13, 16, 20]; % 创建向量
C = A + B; % 进行向量运算
D = A - B;
E = A - 1;
disp(E);
disp(C);
disp(D)
v = [ 12 34 10 8];
m = 5 * v
r = [ 1 2 3 4 ]; % 行向量
tr = r'; % 进行逆置操作
v = [1;2;3;4]; % 列向量
tv = v';
disp(tr); disp(tv);
MATLAB 允许您将向量附加到一起来创建新的向量。
如果您有两个包含n和m个元素的行向量r1和r2,则要创建一个包含n个元素和m个元素的行向量r,通过添加这些向量,您可以编写-
r = [r1,r2]
您还可以通过添加这两个向量来创建矩阵r,向量r2将是矩阵的第二行
r = [r1;r2]
但是,为此,两个向量都应具有相同数量的元素。
同样,您可以附加两个列向量c1和c2,其中n和m个元素数目。要创建由n个元素加上m个元素组成的列向量c,通过添加这些向量,您可以编写
c = [c1; c2]
您还可以通过添加这两个向量来创建矩阵c;向量c2将是矩阵的第二列
c = [c1, c2]
但是,为此,两个向量都应具有相同数量的元素。
r1 = [ 1 2 3 4 ];
r2 = [5 6 7 8 ];
r = [r1,r2]
rMat = [r1;r2]
c1 = [ 1; 2; 3; 4 ];
c2 = [5; 6; 7; 8 ];
c = [c1; c2]
cMat = [c1,c2]
元素v1,v2,v3,…,vn的向量v的大小由以下公式给出
∣ v ∣ = v 1 2 + v 2 2 + . . . + v n 2 |v| = \sqrt{v_1^2 + v_2^2+ ...+v_n^2 } ∣v∣=v12+v22+...+vn2
您需要采取以下步骤来计算向量的大小
v = [1: 2: 20]; % 快速生成向量,相当于python里面的range(1, 20, 2)
sv = v.* v; % 带元素的向量
% 作为v元素的平方
dp = sum(sv); % 平方和——点积
mag = sqrt(dp); % magnitude
disp('Magnitude:');
disp(mag);
两个向量a =(a1,a2,…,an)和b =(b1,b2,…,bn)的点积由下式给出:
a b = ∑ k = 1 n a k ⋅ b k ab=\sum_{k=1}^n{a_k\cdot b_k} ab=k=1∑nak⋅bk
我们使用dot(a, b);
计算点积
v1 = [2 3 4];
v2 = [1 2 3];
dp = dot(v1, v2); % 计算点积
disp('Dot Product:');
disp(dp);
MATLAB允许您创建具有均匀间隔元素的向量。
要创建一个向量v,其中第一个元素为f,最后一个元素为l,且元素之间的差值为任意实数n,则写为:
v = [f : n : l]
实例:
v = [1: 2: 20];
sqv = v.^2;
disp(v);
disp(sqv);
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删