- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线版
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据导出
- MATLAB - 数据归一化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策语句
- MATLAB - if end 语句
- MATLAB - if else 语句
- MATLAB - if…elseif else 语句
- MATLAB - 嵌套 if 语句
- MATLAB - switch 语句
- MATLAB - 嵌套 switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - for 循环
- MATLAB - while 循环
- MATLAB - 嵌套循环
- MATLAB - break 语句
- MATLAB - continue 语句
- MATLAB - end 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - 返回语句
- MATLAB - 无返回值函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - 滤波器函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - map 函数
- MATLAB - mean 函数
- MATLAB - end 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - try…catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 二维线图
- MATLAB - 三维图
- MATLAB - 格式化绘图
- MATLAB - 对数坐标轴图
- MATLAB - 绘制误差条
- MATLAB - 绘制三维等高线图
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面图
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 二维数组插值
- MATLAB - 三维数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换函数
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 二维逆余弦变换
- MATLAB - 为坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户自定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消元法
- MATLAB - 高斯-约旦消元法
- MATLAB - 简化行阶梯形
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 其他
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 数组
在 MATLAB 中,所有数据类型的所有变量都是多维数组。向量是一维数组,矩阵是二维数组。
我们已经讨论了向量和矩阵。在本章中,我们将讨论多维数组。但是,在此之前,让我们讨论一些特殊类型的数组。
MATLAB 中的特殊数组
在本节中,我们将讨论一些创建特殊数组的函数。对于所有这些函数,单个参数创建一个方阵,双参数创建一个矩形数组。
zeros() 函数创建一个全零数组 -
例如 -
zeros(5)
MATLAB 将执行上述语句并返回以下结果 -
ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ones() 函数创建一个全一数组 -
例如 -
ones(4,3)
MATLAB 将执行上述语句并返回以下结果 -
ans = 1 1 1 1 1 1 1 1 1 1 1 1
eye() 函数创建一个单位矩阵。
例如 -
eye(4)
MATLAB 将执行上述语句并返回以下结果 -
ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
rand() 函数创建一个区间 (0,1) 上均匀分布的随机数数组 -
例如 -
rand(3, 5)
MATLAB 将执行上述语句并返回以下结果 -
ans = 0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.6324 0.5469 0.1576 0.4854 0.1270 0.0975 0.9575 0.9706 0.8003
幻方
幻方是一个正方形,当其元素按行、列或对角线相加时,得到相同的和。
magic() 函数创建一个幻方数组。它接受一个单参数,该参数给出正方形的大小。该参数必须是一个大于或等于 3 的标量。
magic(4)
MATLAB 将执行上述语句并返回以下结果 -
ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
多维数组
具有超过两个维度的数组在 MATLAB 中称为多维数组。MATLAB 中的多维数组是普通二维矩阵的扩展。
通常,为了生成多维数组,我们首先创建一个二维数组并对其进行扩展。
例如,让我们创建一个二维数组 a。
a = [7 9 5; 6 1 9; 4 3 2]
MATLAB 将执行上述语句并返回以下结果 -
a = 7 9 5 6 1 9 4 3 2
数组 a 是一个 3x3 数组;我们可以通过提供如下值来为 a 添加第三维 -
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
MATLAB 将执行上述语句并返回以下结果 -
a = ans(:,:,1) = 0 0 0 0 0 0 0 0 0 ans(:,:,2) = 1 2 3 4 5 6 7 8 9
我们也可以使用 ones()、zeros() 或 rand() 函数创建多维数组。
例如,
b = rand(4,3,2)
MATLAB 将执行上述语句并返回以下结果 -
b(:,:,1) = 0.0344 0.7952 0.6463 0.4387 0.1869 0.7094 0.3816 0.4898 0.7547 0.7655 0.4456 0.2760 b(:,:,2) = 0.6797 0.4984 0.2238 0.6551 0.9597 0.7513 0.1626 0.3404 0.2551 0.1190 0.5853 0.5060
我们还可以使用 cat() 函数构建多维数组。它沿着指定的维度连接一系列数组 -
cat() 函数的语法为 -
B = cat(dim, A1, A2...)
其中,
B 是创建的新数组
A1、A2、... 是要连接的数组
dim 是要沿其连接数组的维度
示例
创建一个脚本文件,并将以下代码键入其中 -
a = [9 8 7; 6 5 4; 3 2 1]; b = [1 2 3; 4 5 6; 7 8 9]; c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0])
运行文件时,它将显示 -
c(:,:,1) = 9 8 7 6 5 4 3 2 1 c(:,:,2) = 1 2 3 4 5 6 7 8 9 c(:,:,3) = 2 3 1 4 7 8 3 9 0
数组函数
MATLAB 提供以下函数来排序、旋转、置换、重塑或移动数组内容。
函数 | 用途 |
---|---|
length | 向量的长度或最大数组维度 |
ndims | 数组维数 |
numel | 数组元素个数 |
size | 数组维度 |
iscolumn | 确定输入是否为列向量 |
isempty | 确定数组是否为空 |
ismatrix | 确定输入是否为矩阵 |
isrow | 确定输入是否为行向量 |
isscalar | 确定输入是否为标量 |
isvector | 确定输入是否为向量 |
blkdiag | 根据输入参数构造块对角矩阵 |
circshift | 循环移动数组 |
ctranspose | 共轭转置 |
diag | 对角矩阵和矩阵的对角线 |
flipdim | 沿指定维度翻转数组 |
fliplr | 从左到右翻转矩阵 |
flipud | 从上到下翻转矩阵 |
ipermute | 反转 N 维数组的维度置换 |
permute | 重新排列 N 维数组的维度 |
repmat | 复制和平铺数组 |
reshape | 重塑数组 |
rot90 | 将矩阵旋转 90 度 |
shiftdim | 移动维度 |
issorted | 确定集合元素是否按排序顺序排列 |
sort | 按升序或降序对数组元素进行排序 |
sortrows | 按升序对行进行排序 |
squeeze | 删除单例维度 |
transpose | 转置 |
vectorize | 向量化表达式 |
示例
以下示例说明了上面提到的一些函数。
长度、维度和元素个数 -
创建一个脚本文件,并将以下代码键入其中 -
x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9]; length(x) % length of x vector y = rand(3, 4, 5, 2); ndims(y) % no of dimensions in array y s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab']; numel(s) % no of elements in s
运行文件时,它将显示以下结果 -
ans = 8 ans = 4 ans = 23
数组元素的循环移动 -
创建一个脚本文件,并将以下代码键入其中 -
a = [1 2 3; 4 5 6; 7 8 9] % the original array a b = circshift(a,1) % circular shift first dimension values down by 1. c = circshift(a,[1 -1]) % circular shift first dimension values % down by 1 % and second dimension values to the left % by 1.
运行文件时,它将显示以下结果 -
a = 1 2 3 4 5 6 7 8 9 b = 7 8 9 1 2 3 4 5 6 c = 8 9 7 2 3 1 5 6 4
排序数组
创建一个脚本文件,并将以下代码键入其中 -
v = [ 23 45 12 9 5 0 19 17] % horizontal vector sort(v) % sorting v m = [2 6 4; 5 3 9; 2 0 1] % two dimensional array sort(m, 1) % sorting m along the row sort(m, 2) % sorting m along the column
运行文件时,它将显示以下结果 -
v = 23 45 12 9 5 0 19 17 ans = 0 5 9 12 17 19 23 45 m = 2 6 4 5 3 9 2 0 1 ans = 2 0 1 2 3 4 5 6 9 ans = 2 4 6 3 5 9 0 1 2
元胞数组
元胞数组是由索引单元组成的数组,每个单元可以存储不同维度和数据类型的数组。
cell 函数用于创建元胞数组。cell 函数的语法为 -
C = cell(dim) C = cell(dim1,...,dimN) D = cell(obj)
其中,
C 是元胞数组;
dim 是一个标量整数或整数向量,它指定元胞数组 C 的维度;
dim1, ... , dimN 是指定 C 维度的标量整数;
obj 是以下之一 -
- Java 数组或对象
- .NET 类型为 System.String 或 System.Object 的数组
示例
创建一个脚本文件,并将以下代码键入其中 -
c = cell(2, 5); c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
运行文件时,它将显示以下结果 -
c = { [1,1] = Red [2,1] = 1 [1,2] = Blue [2,2] = 2 [1,3] = Green [2,3] = 3 [1,4] = Yellow [2,4] = 4 [1,5] = White [2,5] = 5 }
访问元胞数组中的数据
有两种方法可以引用元胞数组的元素 -
- 用第一个括号 () 括起来索引,以引用单元集
- 用大括号 {} 括起来索引,以引用单个单元中的数据
当用第一个括号括起来索引时,它指的是单元集。
圆括号中的元胞数组索引指的是单元集。
例如 -
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; c(1:2,1:2)
MATLAB 将执行上述语句并返回以下结果 -
ans = { [1,1] = Red [2,1] = 1 [1,2] = Blue [2,2] = 2 }
您还可以通过用大括号索引来访问单元的内容。
例如 -
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}; c{1, 2:4}
MATLAB 将执行上述语句并返回以下结果 -
ans = Blue ans = Green ans = Yellow