概述
MATLAB(矩阵实验室)是数字计算,可视化和编程的第四代高级编程语言和交互式环境。MATLAB是由MathWorks开发的。
它允许矩阵操纵,绘制功能和数据; 实现算法; 创建用户界面; 与其他语言编写的程序(包括C语言,C++,Java和FORTRAN)进行交互; 分析数据; 开发算法; 并创建模型和应用程序。
它有许多内置命令和数学函数,可以帮助您进行数学计算,生成图形和执行数值方法。
MATLAB计算数学
MATLAB用于计算数学的各个方面,以下是最常用的常用数学计算方法 -
- 处理矩阵和数组
- 2D和3D绘图和图形
- 线性代数
- 代数方程
- 非线性函数
- 统计
- 数据分析
- 微积分和微分方程
- 数值计算
- 积分
- 变换
- 曲线拟合
各种其他特殊功能
MATLAB特点
以下是MATLAB的基本特性 -
- 它是数字计算,可视化和应用程序开发的高级语言。
- 它还为迭代探索,设计和解决问题提供了一个交互式环境。
- 它为线性代数,统计学,傅里叶分析,滤波,优化,数值积分和求解常微分方程提供了广泛的数学函数库。
- 它提供内置的图形,用于可视化数据和工具,用于创建自定义绘图。
- MATLAB编程接口提供了开发工具,以提高代码质量的可维护性并最大限度提高性能。
- 它提供使用自定义图形界面构建应用程序的工具。
它提供了基于MATLAB的算法与外部应用程序和语言(如C语言,Java,.NET和Microsoft Excel)集成的功能。
MATLAB使用
MATLAB广泛应用于物理,化学,数学和所有工程流领域的科学与工程计算工具。 它用于一系列应用,包括 -
- 信号处理和通信
- 图像和视频处理
- 控制系统
- 测试和测量
- 计算财务
计算生物学
Matlab命令
管理会话的命令
MATLAB提供了各种用于管理会话的命令。下表提供了所有这些命令 -
命令 | 描述说明 |
---|---|
clc | 清除命令窗口 |
clear | 从内存中删除变量 |
exist | 检查文件或变量是否存在 |
global | 声明变量为全局变量 |
help | 搜索帮助主题 |
lookfor | 搜索帮助关键字的条目。 |
quit | 停止MATLAB |
who | 列出当前变量 |
whos | 列出当前变量(长显示详细信息) |
使用系统命令
MATLAB提供了各种有用的命令来处理系统,比如将工作区中的当前工作保存为文件,稍后加载文件。
它还为其他系统相关活动提供各种命令,如显示日期,列出目录中的文件,显示当前目录等。
下表显示了一些常用的系统相关命令 -
命令 | 描述说明 |
---|---|
cd | 更改当前目录(进入指定目录) |
date | 显示当前日期 |
delete | 删除文件 |
diary | 打开/关闭日记文件记录 |
dir | 列出当前目录下的所有文件 |
load | 从文件加载工作区变量 |
path | 显示搜索路径 |
pwd | 显示当前目录 |
save | 将工作空间变量保存在文件中 |
type | 显示文件的内容 |
what | 列出当前目录中的所有MATLAB文件 |
wklread | 读取.wk1电子表格文件 |
输入和输出命令
MATLAB提供以下输入和输出相关命令 -
命令 | 描述说明 |
---|---|
disp | 显示数组或字符串的内容 |
fscanf | 从文件读取格式化数据 |
format | 控制屏幕显示格式 |
fprintf | 对屏幕或文件执行格式化的写入 |
input | 显示提示并等待输入 |
; | 禁止打印显示 |
fscanf和fprintf命令的行为类似于C语言中的scanf和printf函数。它们支持以下格式代码 -
命令 | 描述说明 |
---|---|
%s | 格式化为字符串 |
%d | 格式化为字符串整数值 |
%f | 格式化为浮点值 |
%e | 格式化为科学记数法的浮点值 |
%g | 格式最紧凑的形式:%f或%e。 |
\n | 在输出字符串中插入一个换行 |
\t | 在输出字符串中插入制表符 |
格式化(format)函数具有以下用于数字显示的形式 -
命令 | 描述说明 |
---|---|
format short | 4位十进制数(默认) |
format long | 16位数字 |
format short e | 5位数加上指数 |
format long e | 16位加上指数 |
format bank | 两位十进制数字 |
format + | 正,负或零 |
format rat | 有理近似 |
format compact | 禁止一些换行符 |
format loose | 重置为较不紧凑的显示模式 |
向量,矩阵和数组命令
下表显示了用于处理数组,矩阵和向量的各种命令 -
命令 | 描述说明 |
---|---|
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 | 识别单元格数组 |
绘图命令
MATLAB提供了许多用于绘制图形的命令。下表显示了一些常用的绘图命令 -
命令 | 描述说明 |
---|---|
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 .m脚本文件
到目前为止,我们都是使用MATLAB环境作为计算器。然而,MATLAB也是一种强大的编程语言,也是一个交互式的计算环境。
在前几章中,已经学习了如何从MATLAB命令提示符输入命令。MATLAB还允许将一系列命令写入文件,并将文件作为完整单元执行,如:编写函数并调用它。
M文件
MATLAB允许编写两种程序文件 -
- 脚本 -
脚本文件是以.m扩展名的程序文件。在这些文件中,可以编写一系列要一起执行的命令。脚本不接受输入,不返回任何输出。它们对工作空间中的数据进行操作。 - 函数 - 函数文件也是扩展名为.m的程序文件。函数可以接受输入和返回输出。内部变量是函数的局部变量。
使用MATLAB编辑器或任何其他文本编辑器来创建.m文件。 在本节中,我们将讨论脚本文件。 脚本文件包含多个连续的MATLAB命令行和函数调用。可以通过在命令行中键入其名称来运行脚本。
创建和运行脚本文件
要创建脚本文件,需要使用文本编辑器。可以通过两种方式打开MATLAB编辑器:
- 使用命令提示符
- 使用IDE
如果使用命令提示符,请在命令提示符下键入edit并回车,这将打开编辑器。可以直接键入edit,然后直接输入文件名(扩展名为.m)
edit
%或者%
edit newfile.m
在命令行中也可以创建文件夹,如:创建一个名为progs的文件夹。在命令提示符下键入以下命令(>>):
mkdir progs % create directory progs under default directory
chdir progs % changing the current directory to progs
edit prog1.m % creating an m file named prog1.m
或者,如果使用IDE,请选择“新建” ->“脚本”。 这也打开编辑器并创建一个名为Untitled的文件。在输入代码后命名并保存文件。
在编辑器中键入以下代码 -
NoOfStudents = 6000;
TeachingStaff = 150;
NonTeachingStaff = 20;
Total = NoOfStudents + TeachingStaff + NonTeachingStaff;
disp(Total);
创建并保存文件后,可以通过两种方式运行:
- 单击编辑器窗口上的“运行”按钮
- 只需在命令提示符下键入文件名(无扩展名)即可:>> prog1
命令窗口提示符显示结果 -
示例
创建脚本文件(sdemo.m),并键入以下代码 -
a = 5; b = 7;
c = a + b
d = c + sin(b)
e = 5 * d
f = exp(-d)
当上述代码被编译和执行时,它产生以下结果 -
Trial>> sdemo
c =
12
d =
12.6570
e =
63.2849
f =
3.1852e-06
Trial>>
Matlab数据类型
MATLAB不需要任何类型声明或维度语句。当MATLAB遇到新的变量名称时,它将创建变量并分配适当的内存空间。
如果变量已经存在,则MATLAB将使用新内容替换原始内容,并在必要时分配新的存储空间。
例如,
total = 136;
上述语句创建一个名为total的1x1矩阵,并将值136存储在其中。
MATLAB数据类型
MATLAB提供15种基本数据类型。每种数据类型存储矩阵或数组形式的数据。矩阵或数组的最小值是0到0,并且是可以到任何大小的矩阵或数组。
下表显示了MATLAB中最常用的数据类型 -
数据类型 | 描述 |
---|---|
int8 | 8位有符号整数 |
uint8 | 8位无符号整数 |
int16 | 16位有符号整数 |
uint16 | 16位无符号整数 |
int32 | 32位有符号整数 |
uint32 | 32位无符号整数 |
int64 | 64位有符号整数 |
uint64 | 64位无符号整数 |
single | 单精度数值数据 |
double | 双精度数值数据 |
logical | 逻辑值为1或0,分别代表true和false |
char | 字符数据(字符串作为字符向量存储) |
单元格阵列 | 索引单元阵列,每个都能够存储不同维数和数据类型的数组 |
结构体 | C型结构,每个结构具有能够存储不同维数和数据类型的数组的命名字段 |
函数处理 | 指向一个函数的指针 |
用户类 | 用户定义的类构造的对象 |
Java类 | 从Java类构造的对象 |
示例
使用以下代码创建脚本文件(datatype1.m) -
str = 'Hello World!'
n = 2345
d = double(n)
un = uint32(789.50)
rn = 5678.92347
c = int32(rn)
当上述代码被编译和执行时,它产生以下结果 -
Trial>> datatype1
str =
'Hello World!'
n =
2345
d =
2345
un =
uint32
790
rn =
5.6789e+03
c =
int32
5679
数据类型转换
MATLAB提供了各种用于将一种数据类型转换为另一种数据类型的函数。 下表显示了数据类型转换函数 -
函数 | 描述说明 |
---|---|
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 | 将结构转换为单元格数组 |
数据类型确定
MATLAB提供了用于识别变量数据类型的各种函数。
下表提供了确定变量数据类型的函数 -
函数 | 描述说明 |
---|---|
is | 检测状态 |
isa | 确定输入是否是指定类的对象 |
iscell | 确定输入是单元格数组 |
iscellstr | 确定输入是字符串的单元格数组 |
ischar | 确定项目是否是字符数组 |
isfield | 确定输入是否是结构数组字段 |
isfloat | 确定输入是否为浮点数组 |
ishghandle | 确定是否用于处理图形对象句柄 |
isinteger | 确定输入是否为整数数组 |
isjava | 确定输入是否为Java对象 |
islogical | 确定输入是否为逻辑数组 |
isnumeric | 确定输入是否是数字数组 |
isobject | 确定输入是否为MATLAB对象 |
isreal | 检查输入是否为实数数组 |
isscalar | 确定输入是否为标量 |
isstr | 确定输入是否是字符数组 |
isstruct | 确定输入是否是结构数组 |
isvector | 确定输入是否为向量 |
class | 确定对象的类 |
validateattributes | 检查数组的有效性 |
whos | 在工作区中列出变量,其大小和类型 |
示例
使用以下代码创建脚本文件 -
x = 3
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)
x = 23.54
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)
x = [1 2 3]
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
x = 'Hello'
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)
MATLAB
运行文件后,产生以下结果 -
x = 3
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x = 1177/50
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x =
1 2 3
ans = 0
ans = 1
ans = 1
ans = 0
x = Hello
ans = 0
ans = 0
ans = 1
ans = 0
ans = 0
Matlab运算符
运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。 MATLAB主要用于整个矩阵和阵列的操作。因此,MATLAB中的运算符既可用于标量数据也可用于非标量数据。MATLAB允许以下类型的基本操作 -
- 算术运算符
- 关系运算符
- 逻辑运算符
- 按位运算符
- 集合运算符
下面我们来一个一个地学习。
算术运算符
MATLAB允许两种不同类型的算术运算 -
- 矩阵算术运算
- 数组算术运算
矩阵算术运算与线性代数中定义的相同。在一维和多维数组中,逐个元素执行数组运算。
矩阵运算符和数组运算符由句点符号(.)区分。 然而,由于对于矩阵和阵列的加减运算是相同的,因此对于这两种情况,运算符相同。下表简要说明了算术运算符 -
算术运算符示例代码
运算符 | 描述说明 |
---|---|
+ | 加法或一元加法运算。A + B表示相加存储在变量A和B中的值。A和B必须具有相同的大小,除非是标量。 标量可以添加到任何大小的矩阵。 |
- | 减法或一元减法运算。 A-B表示从A中减去B的值。A和B必须具有相同的大小,除非是标量。可以从任何大小的矩阵中减去标量。 |
* | 矩阵乘法。 C = A * B是矩阵A和B的线性代数乘积。更准确地说,执行公式:![]() |
.* | 阵列乘法。 A .* B是数组A和B的逐个元素乘积。A和B必须具有相同的大小,除非它们之一是标量。 |
/ | 数组乘法。A .* B是数组A和B的逐个元素乘积。A和B必须具有相同的大小,除非它们之一是标量。 |
./ | 数组右除。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是不规则或几乎单数,将显示警告消息。 |
.\ | 阵列左除。A .\ B是具有元素B(i,j)/ A(i,j)的矩阵。A和B必须具有相同的大小,除非它们之一是标量。 |
^ | 矩阵 X ^ p是X的P次幂,如果p是标量。 如果p是整数,则通过重复平方来计算幂值。 如果整数为负,则X首先倒置。 对于p的其他值,计算涉及特征值和特征向量,使得如果[V,D] = eig(X),则X ^ p = V * D. ^ p / V。 |
.^ | 阵列幂值, A ^ B是B(i,j)到A(i,j)的幂矩阵。A和B必须具有相同的大小,除非它们之一是标量。 |
‘ | 矩阵转置。 ‘是A的线性代数转置。对于复数矩阵,这是复共轭转置。 |
.’ | 数组转置。.’是A的数组转置。对于复数矩阵,这不涉及共轭。 |
关系运算符
关系运算符也可以用于标量和非标量数据。数组的关系运算符在两个数组之间执行逐个元素的比较,并返回相同大小的逻辑数组,如果为真,则元素设置为逻辑1(true),如果为假,则元素设置为逻辑0(false)。
下表显示了MATLAB中可用的关系运算符:
关系运算符示例代码
操作符 | 说明描述 |
---|---|
< | 小于 |
<= | 小于或等于 |
> | 大于 |
= |
大于或等于 |
== | 等于 |
~= | 不等于 |
逻辑运算符
MATLAB提供两种类型的逻辑运算符和函数:
- 逐元素 - 这些运算符对逻辑阵列的相应元素进行操作。
- 短路 - 这些运算符在标量和逻辑表达式上运行。
元素逻辑运算符在逻辑数组上运行逐个元素。符号&,|和〜是逻辑数组运算符AND,OR和NOT。
短路逻辑运算符允许逻辑运算短路。符号&&和||是逻辑短路运算符AND和OR。
逻辑运算符示例代码
位运算
按位运算符对位执行,并执行逐位运算。&,|和^的真值表如下 -
假设A = 60和B = 13; 现在以二进制格式,它们将如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
MATLAB提供了诸如“按位与”和“按位或”以及“按位非”操作,移位操作等位操作的各种功能。
下表显示了常用的按位操作:
按位操作示例
方法 | 目的 |
---|---|
bitand(a, b) | 整数a和b的位与AND操作 |
bitcmp(a) | a的比特补码 |
bitget(a,pos) | 在整数数组a中,获取指定的位置pos位字节 |
bitor(a, b) | 整数a和b的逐位OR操作 |
bitset(a, pos) | 设置在指定pos处的位字节 |
bitshift(a, k) | 返回向左移位k字节,相当于乘以2^k。 k的负值对应于向右移位或除以2^ k 并舍入到最接近的整数到负无穷大。任何溢出位都被截断。 |
bitxor(a, b) | 整数a和b的逐字节位XOR操作 |
swapbytes | 交换字节排序 |
集合操作
MATLAB为集合操作提供了各种功能,如联合,交集和集合成员的测试等。
下表显示了一些常用的集合操作 -
函数 | 描述 |
---|---|
intersect(A,B) | 设置两个阵列的交集; 也就是返回A和B共同的值。返回的值按排序顺序排列。 |
intersect(A,B,’rows’) | 将A的每一行和B的每一行视为单个实体,并返回A和B两者共同的行。返回矩阵的行按排序顺序排列。 |
ismember(A,B) | 返回与A相同大小的数组,其中包含1(true),其中A的元素位于B中。其他地方返回0(false)。 |
ismember(A,B,’rows’) | 将A的每行和B的每一行视为单个实体,并返回一个包含1(true)的向量,其中矩阵A的行也是B行。其他返回0(false)。 |
issorted(A) | 如果A的元素按排序顺序返回逻辑1(真),否则返回逻辑0(假)。输入A可以是一个向量,也可以是N-by-1或1-by-N的字符串数组。 如果A和sort(A)的输出相等,则认为A被排序。 |
issorted(A, ‘rows’) | 如果二维矩阵A的行按排序顺序返回逻辑1(真),否则返回逻辑0(假)。 如果A和排序(A)的输出相等,则认为矩阵A被排序。 |
setdiff(A,B) | 设置两个数组的差异; 返回A中不在B中的值。返回的数组中的值按排序顺序排列。 |
setdiff(A,B,’rows’) | 将A的每一行和B的每一行视为单个实体,并从不在B中的A返回行。返回的矩阵的行按排序顺序排列。’rows’选项不支持单元格数组。 |
setxor | 设置两个数组的异或 |
union | 设置两个数组的并集 |
unique | 使数组中的值唯一 |
Matlab决策
决策结构要求程序员应指定要由程序评估计算或测试的一个或多个条件,以及条件确定为真时要执行的语句或语句,如果条件被确定为假时,可选地如果执行其他语句。
以下是大多数编程语言中典型的决策结构的一般形式 -
MATLAB提供以下类型的决策语句。点击以下链接来查看它们的详细说明 -
语句 | 描述 |
---|---|
if…end语句 | if … end语句包含一个布尔表达式,后跟一个或多个语句。 |
if…else…end语句 | if语句可以跟随一个可选的else语句,当布尔表达式为false时,else语句块将执行。 |
if…elseif…elseif…else…end语句 | if语句后面可以有一个(或多个)可选elseif …和一个else语句,这对于测试各种条件非常有用。 |
嵌套if语句 | 可以在一个if或elseif语句中使用另一个if或elseif语句。 |
switch语句 | switch语句用来测试一个变量与值列表的相等性。 |
嵌套switch语句 | 可以在一个switch语句中使用一个switch语句。 |
Matlab循环
当需要执行一段代码多次时可以使用循环语句。 一般来说,语句是按顺序执行的。首先执行函数中的第一个语句,然后执行第二个语句,依此类推。
编程语言提供了允许更复杂的执行路径的各种控制结构。
循环语句允许多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式 -
MATLAB提供以下类型的循环来处理循环需求。点击以下链接来查看它们的详细说明和使用 -
循环类型 | 描述 |
---|---|
while循环 | 在给定条件为真时,重复一个语句或一组语句。它在执行循环体之前测试状态。 |
for循环 | 多次执行一系列语句,并缩写管理循环变量的代码。 |
嵌套循环 | 在任何循环中使用另外一个或多个循环。 |
循环控制语句
循环控制语句从其正常顺序更改执行。当执行离开范围时,在该范围内创建的所有自动对象都将被销毁。
MATLAB支持以下控制语句。点击以下链接来查看它们的详细说明和使用 -
控制语句 | 描述 |
---|---|
break语句 | 终止循环语句,并将执行转移到循环之后的语句。 |
continue语句 | 导致循环跳过主体的剩余部分,并在重申之前立即重新测试其状态。 |
Matlab向量
向量是数字的一维数组。在MATLAB中,允许创建两种类型的向量 -
- 行向量
- 列向量
行向量
行向量是通过用方括号中的元素集合来创建的,使用空格或逗号分隔元素。
r = [1 18 19 21 41]
MATLAB将执行上述语句并返回以下结果 -
Trial>> r = [1 18 19 21 41]
r =
1 18 19 21 41
列向量
列向量是通过用方括号中的元素集合来创建的,分号用于分隔元素。
c = [17; 28; 39; 60; 81]
MATLAB将执行上述语句,返回以下结果 -
Trial>> c = [17; 28; 39; 60; 81]
c =
17
28
39
60
81
引用向量的元素
可以通过多种方式来引用一个或多个向量的元素。向量v的第i个分量叫作v(i)。 例如 -
v = [ 1; 2; 3; 4; 5; 6]; % creating a column vector of 6 elements
v(3)
MATLAB执行上述语句,返回以下结果 -
Trial>> v = [ 1; 2; 3; 4; 5; 6]; % creating a column vector of 6 elements
v(3)
ans =
3
引用带冒号的向量(如v(:))时,将列出向量的所有组件。
v = [ 1; 2; 3; 4; 5; 6]; % creating a column vector of 6 elements
v(:)
MATLAB执行上述语句,返回以下结果 -
Trial>> v = [ 1; 2; 3; 4; 5; 6]; % creating a column vector of 6 elements
v(:)
ans =
1
2
3
4
5
6
MATLAB可从向量中选择一系列元素。
例如,创建一个9个元素的行向量rv,然后通过rv(3:7)引用3到7元素,然后引用来向一个新创建的sub_rv向量赋值。如下代码所示 -
rv = [1 2 3 4 5 6 7 8 9];
sub_rv = rv(3:7)
MATLAB
MATLAB将执行上述语句并返回以下结果 -
Trial>> rv = [1 2 3 4 5 6 7 8 9];
sub_rv = rv(3:7)
sub_rv =
3 4 5 6 7
向量运算
在本节中,让我们讨论和学习以下向量的操作 -
- 向量的加减
- 向量的标量乘法
- 转置向量
- 附加向量
- 向量的幅值大小
- 向量点积
- 具有均匀间隔元素的向量
Matlab矩阵
矩阵是数字的二维数组。
在MATLAB中,可以通过在每行中输入元素来创建一个矩形,以逗号或空格分隔数字,并使用分号标记每一行的结尾。
例如,创建一个4×5矩阵a -
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]
MATLAB将执行上述语句并返回以下结果 -
Trial>> a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]
a =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
引用矩阵中的元素
要引用矩阵mx的第m行和第n列中的元素,可以这样书写 -
mx(m, n);
例如,要引用矩阵a的第2行和第5列中的元素,如上一节所述,可以这样书写 -
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(2,5)
MATLAB执行上述语句并返回以下结果 -
Trial>> a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(2,5)
ans =
6
要引用第m列中的所有元素,可以使用A(:,m)。
假设要从矩阵a的第4行元素来创建列向量v:
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
v = a(:,4)
MATLAB执行上述语句并返回以下结果 -
Trial>> a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
v = a(:,4)
v =
4
5
6
7
还可以选择第m至第n列中的元素,代码如下 -
a(:,m:n)
下面是创建一个更小的矩阵,从第二和第三列的元素 -
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(:, 2:3)
MATLAB执行上述语句并返回以下结果 -
Trial>> a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(:, 2:3)
ans =
2 3
3 4
4 5
5 6
以同样的方式,可以创建一个矩阵的子部分的子矩阵。
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(:, 2:3)
MATLAB执行上述语句并返回以下结果 -
Trial>> a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(:, 2:3)
ans =
2 3
3 4
4 5
5 6
以同样的方式,可以创建一个矩阵的子部分的子矩阵。
例如,要创建一个子矩阵sa,其包含以下内容的内部子部分:
3 4 5
4 5 6
参考以下实例代码 -
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
sa = a(2:3,2:4)
MATLAB执行上述语句,返回以下结果 -
sa =
3 4 5
4 5 6
删除矩阵中的一行或一列
通过向该行或列分配一组空的方括号[]来删除矩阵的整个行或列。[]表示一个空数组。
例如,删除第四行 -
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a( 4 , : ) = []
MATLAB执行上述语句,返回以下结果 -
a =
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
接下来,删除第五列 -
a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(: , 5)=[]
MATLAB执行上述语句,返回以下结果 -
a =
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
例子
在这个例子中,首先创建一个3x3的矩阵m,然后复制该矩阵的第二行和第三行两次来创建一个4x3的矩阵。
使用以下代码创建脚本文件 -
a = [ 1 2 3 ; 4 5 6; 7 8 9];
new_mat = a([2,3,2,3],:)
运行文件时,它产生以下结果 -
new_mat =
4 5 6
7 8 9
4 5 6
7 8 9
矩阵运算
在本节中,让我们讨论和学习下面一些常用的矩阵运算 -
- 矩阵的加法和减法
a = [ 1 2 3 ; 4 5 6; 7 8 9];
b = [ 7 5 6 ; 2 0 8; 5 7 1];
c = a + b
d = a - b
c =
8 7 9
6 5 14
12 15 10
d =
-6 -3 -3
2 5 -2
2 1 8
- 矩阵除法
a = [ 1 2 3 ; 4 5 6; 7 8 9];
b = [ 7 5 6 ; 2 0 8; 5 7 1];
c = a / b
d = a \ b
c =
-0.52542 0.68644 0.66102
-0.42373 0.94068 1.01695
-0.32203 1.19492 1.37288
d =
-3.27778 -1.05556 -4.86111
-0.11111 0.11111 -0.27778
3.05556 1.27778 4.30556
- 矩阵的标量运算
a = [ 10 12 23 ; 14 8 6; 27 8 9];
b = 2;
c = a + b
d = a - b
e = a * b
f = a / b
c =
12 14 25
16 10 8
29 10 11
d =
8 10 21
12 6 4
25 6 7
e =
20 24 46
28 16 12
54 16 18
f =
5.0000 6.0000 11.5000
7.0000 4.0000 3.0000
13.5000 4.0000 4.5000
- 矩阵的转置
a = [ 10 12 23 ; 14 8 6; 27 8 9]
b = a'
a =
10 12 23
14 8 6
27 8 9
b =
10 14 27
12 8 8
23 6 9
- 矩阵连接
Trial>> a = [ 10 12 23 ; 14 8 6; 27 8 9]
b = [ 12 31 45 ; 8 0 -9; 45 2 11]
c = [a, b]
d = [a; b]
a =
10 12 23
14 8 6
27 8 9
b =
12 31 45
8 0 -9
45 2 11
c =
10 12 23 12 31 45
14 8 6 8 0 -9
27 8 9 45 2 11
d =
10 12 23
14 8 6
27 8 9
12 31 45
8 0 -9
45 2 11
- 矩阵乘法
考虑有两个矩阵A和B,如果A是m×n矩阵,并且B是n×p矩阵,则它们可以相乘以产生m×n矩阵C。仅当A中的列数n等于B中行n数量时,才能进行矩阵乘法 。
在矩阵乘法中,第一矩阵中的行的元素与第二矩阵中的相应列相乘。
所得到的矩阵C中的(i,j)位置中的每个元素是第一矩阵的第i行中的元素的乘积与第二矩阵的第j列中的相应元素的和。
a =
1 2 3
2 3 4
1 2 5
b =
2 1 3
5 0 -2
2 3 -1
prod =
18 10 -4
27 14 -4
22 16 -6
- 矩阵的行列式
Trial>> a = [ 1 2 3; 2 3 4; 1 2 5]
det(a)
a =
1 2 3
2 3 4
1 2 5
ans =
-2
- 矩阵的逆转
矩阵A的倒数由A-1表示,使得以下关系成立 -
矩阵的倒数并不总是存在。如果矩阵的行列式为零,则不存在逆矩阵,矩阵是单数的。
a = [ 1 2 3; 2 3 4; 1 2 5]
inv(a)
a =
1 2 3
2 3 4
1 2 5
ans =
-3.5000 2.0000 0.5000
3.0000 -1.0000 -1.0000
-0.5000 0 0.5000
Matlab数组
MATLAB中所有数据类型的所有变量都是多维数组。向量是一维数组,矩阵是二维数组。
我们前面已经讨论和学习过向量和矩阵。 在本章中,将讨论和学习多维数组。 然而,在此之前,让我们先学习一些特殊类型的数组。
MATLAB中的特殊数组
在本节中,我们将讨论学习一些创建一些特殊数组的函数。对于这些函数,单个参数创建一个正方形数组,双参数创建矩形数组。
zeros()函数是用来创建一个全零的数组 -
例如 -
zeros(5)
执行上面示例代码,得到以下结果 -
Trial>> zeros(5)
ans =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0