了解Matlab

概述

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坐标图
print 打印或绘图到文件
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和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     
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值