MATLAB 使用教程 —— 矩阵和数组

矩阵和数组

MATLAB 是"matrix laboratory"的缩写形式。MATLAB 主要用于处理 整个的矩阵和数组 ,而其他编程语言大多逐个处理数值

  • 所有 MATLAB 变量都是多维数组,与数据类型无关
  • 矩阵 是指通常用来进行线性代数运算的二维数组

MATLAB 专门用于处理矩阵和数组操作。与其他编程语言相比,它能够更高效地处理这些数据结构,适用于线性代数、数据分析、图像处理等。

MATLAB 中矩阵和数组长什么样?

matlab 复制代码
a = [1 2 3 4]   % 单行的叫数组,数组 a 包含四个元素,使用逗号 (,) 或空格分隔各元素

a = [1 3 5; 2 4 6; 7 8 10]     % 多行的叫矩阵,使用分号分隔各行

再直观地来看,

这是数组 a:

这是矩阵 a:

MATLAB 怎么用矩阵计算?

MATLAB 常用的运算符和特殊字符如下表所示:

符号 描述
+ 加;加法运算符
- 减;减法运算符
* 标量和矩阵乘法运算符
.* 数组乘法运算符
^ 标量和矩阵求幂运算符
.^ 数组求幂运算符
\ 矩阵左除
/ 矩阵右除
.\ 阵列左除
./ 阵列右除
: 向量生成;子阵提取
( ) 下标运算;参数定义
[ ] 矩阵生成
. 点乘运算,常与其他运算符联合使用
... 续行标志;行连续运算符
, 分行符(该行结果不显示)
; 语句结束;分行符(该行结果显示)
% 注释标志
' 引用符号和转置运算符
.' 非共轭转置运算符
= 赋值运算符

为了说明 MATLAB 如何使用矩阵进行计算,这里提供一些具体例子:

创建和操作矩阵
matlab 复制代码
% 创建一个 3x3 的矩阵
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];

% 创建一个列向量
B = [10; 20; 30];

% 矩阵乘法
C = A * B;

在这个例子中,A 是一个 3x3 的矩阵,B 是一个 3x1 的列向量。MATLAB 直接支持矩阵乘法 A * B,这在其他编程语言中可能需要手动编写嵌套循环实现

创建矩阵的另一种方法是使用 ones、zeros 或 rand 等函数。例如,创建一个由零组成的 5×1 列向量。

matlab 复制代码
z = zeros(5,1)
矩阵运算示例
matlab 复制代码
% 创建矩阵
M = [1, 2; 3, 4];

% 计算矩阵的转置
M_T = M';

% 计算矩阵的逆
M_inv = inv(M);

% 矩阵元素逐个平方
M_squared = M .^ 2;

% 矩阵加法
N = [5, 6; 7, 8];
M_sum = M + N;
  • M_TM 的转置矩阵。
  • M_invM 的逆矩阵,前提是 M 是可逆的。
  • M_squared 逐个对 M 中的每个元素平方,而不是矩阵乘法。
  • M_sum 是矩阵 MN 的逐元素相加。

MATLAB 允许使用单一的算术运算符或函数处理矩阵中的所有值 。例如,a + 10 是对矩阵 a 的所有值都 +10, sin(a) 是对矩阵 a 的所有值取 sin 值。

使用 * 运算符执行标准矩阵乘法 ,这将计算行与列之间的内积 。例如,确认矩阵乘以其逆矩阵可返回单位矩阵: p = a*inv(a)

请注意,p 不是整数值矩阵MATLAB 将数字存储为浮点值,算术运算可以区分实际值与其浮点表示之间的细微差别。

使用 format 命令可以显示多/少小数位数: format longformat short。注意 format 仅影响数字显示,而不影响 MATLAB 对数字的计算或保存方式。

要执行元素级乘法(而非矩阵乘法) ,请使用 .* 运算符p = a.*a

乘法、除法和幂 的矩阵运算符分别具有执行元素级运算 的对应数组运算符。例如,计算 a 的各个元素的三次方: a.^3

定义一个 3×3 的矩阵 a,

这是 a + 10

这是 矩阵与其逆相乘得到单位矩阵, p = a*inv(a)

使用 format long 显示更多小数位,

p = a.*a 执行元素级乘法(而非矩阵乘法)

使用 a.^3 计算元素级的矩阵的幂,

例如,在图像处理领域,图像可以表示为二维矩阵 ,其中每个元素代表 像素值。MATLAB 使得处理和分析这些矩阵变得简单。以下是一个灰度图像的示例操作:

matlab 复制代码
% 读取图像并将其转换为灰度矩阵
I = imread('example.jpg');
grayImage = rgb2gray(I);

% 对灰度图像应用卷积操作
kernel = [1, 1, 1; 0, 0, 0; -1, -1, -1];
filteredImage = conv2(double(grayImage), kernel, 'same');

MATLAB 的核心特性就是它内置的矩阵和数组处理功能,这允许用户以自然的数学语法编写程序,而无需手动实现低级矩阵运算。这对于需要处理大量数据的工程和科学计算非常有用。

串联

串联 是将数组或矩阵连接起来形成更大数组的过程。在 MATLAB 中,方括号 [] 是串联运算符,它用于水平或垂直拼接数组

当两个数组在 方向上进行拼接时,称为水平串联。例如:

matlab 复制代码
A = [1, 2, 3];
B = [4, 5, 6];

% 水平串联
C = [A, B];  % 结果是 C = [1, 2, 3, 4, 5, 6]

在这个示例中,AB 是两个行向量,通过 [] 拼接后形成了新的行向量 C

当两个数组在 方向上进行拼接时,称为垂直串联。例如:

matlab 复制代码
D = [7; 8; 9];
E = [10; 11; 12];

% 垂直串联
F = [D; E];  % 结果是 F = [7; 8; 9; 10; 11; 12]'

在此例中,DE 是列向量,通过 [] 垂直串联后形成了新的列向量 F

可以将矩阵水平或垂直串联,但需要满足维度匹配的条件。例如:

matlab 复制代码
M1 = [1, 2; 3, 4];
M2 = [5, 6; 7, 8];

% 水平串联矩阵
H = [M1, M2];
% 结果是 H = [1, 2, 5, 6;
%             3, 4, 7, 8]

% 垂直串联矩阵
V = [M1; M2];
% 结果是 V = [1, 2;
%             3, 4;
%             5, 6;
%             7, 8]

在水平串联 H 的情况下,矩阵的行数必须一致;而在垂直串联 V 中,矩阵的列数必须一致。

访问矩阵的元素

在 MATLAB 中,数组的索引从 1 开始。这与某些编程语言(如 Python、C 等)不同,这些语言的数组索引从 0 开始。

matlab 复制代码
% 创建一个 3x3 的矩阵
M = [1, 2, 3; 4, 5, 6; 7, 8, 9];

% 访问矩阵的元素
element = M(2, 3);  % 结果是 6,表示第二行第三列的元素

% 访问第一行的所有元素
firstRow = M(1, :);  % 结果是 [1, 2, 3]

% 访问第三列的所有元素
thirdColumn = M(:, 3);  % 结果是 [3; 6; 9]

重要注意事项

  • MATLAB 的索引从 1 开始 ,这意味着第一个元素的索引是 1
  • 可以使用冒号运算符 : 来访问数组的范围,例如 A(2:4) 会访问 A 中从索引 2 到 4 的元素。
  • 冒号还可以用于指定所有元素。例如,M(:, 2) 代表矩阵 M 的第二列的所有元素。

这种从 1 开始的索引对于 MATLAB 用户来说是标准,特别是在数学和工程应用中,因为它与线性代数中矩阵的常见表示方法一致。

相关推荐
随风飘摇的土木狗4 小时前
【MATLAB第114期】基于MATLAB的SHAP可解释神经网络分类模型(敏感性分析方法)
神经网络·matlab·分类·全局敏感性分析·gsa·敏感性分析·shap
triticale7 小时前
【蓝桥杯】统计子矩阵
职场和发展·矩阵·蓝桥杯
不吃元西7 小时前
leetcode 74. 搜索二维矩阵
算法·leetcode·矩阵
dushky7 小时前
职责分配矩阵(RAM)详解
矩阵·项目管理·pmp·raci
小宁学技术7 小时前
MATLAB在工程领域的实际应用案例
开发语言·matlab·matlab实际应用案例·matlab应用案例·matlab 实际应用案例
TT哇13 小时前
【前缀和】矩阵区域和(medium)
java·线性代数·算法·矩阵
@ V:ZwaitY0913 小时前
TikTok 云控矩阵详解:从养号到引流的全链路自动化管理
大数据·矩阵·自动化
飞川撸码1 天前
【LeetCode 热题100】73:矩阵置零(详细解析)(Go语言版)
leetcode·矩阵·golang
zew10409945881 天前
MATLAB实现电池剩余放电时间预测【电子信息专业】
开发语言·matlab·课设·电池剩余放电时间预测
ChoSeitaku1 天前
NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
c++·矩阵·蓝桥杯