文章标题:MATLAB norm 函数:向量与矩阵范数计算指南
引言
在数学和工程领域,范数(norm)是一个核心概念,它提供了一种度量向量或矩阵“大小”或“长度”的方式。范数是泛函分析中的一个基本工具,在优化、机器学习、信号处理以及数值分析等众多领域都有广泛应用。MATLAB 提供了强大的 norm 函数,用于高效地计算各种类型的向量范数和矩阵范数。本文将详细介绍 norm 函数的不同用法,并通过示例帮助读者掌握其在向量和矩阵范数计算中的应用。
什么是范数?
简单来说,范数是一个将向量或矩阵映射到一个非负实数的函数,它满足以下基本性质:
- 非负性: 任何向量或矩阵的范数都大于或等于零,且仅当向量或矩阵为零时,范数才为零。
- 齐次性: 将向量或矩阵乘以一个标量,其范数也按标量的绝对值进行缩放。
- 三角不等式: 两个向量(或矩阵)和的范数小于或等于它们各自范数的和。
根据其定义方式,范数可以分为多种类型,如 p-范数、Frobenius 范数等,每种范数在特定上下文中都有其独特的物理或数学意义。
MATLAB 中的 norm 函数
MATLAB 的 norm 函数是一个多功能工具,其行为根据输入参数的不同而变化。
1. 向量范数计算
对于向量 v,norm(v, p) 函数可以计算其 p-范数。
-
默认 (2-范数 / 欧几里得范数)
- 语法:
n = norm(v)或n = norm(v, 2) - 描述:这是最常用的范数,表示向量的欧几里得长度或大小。它等于向量元素平方和的平方根。
- 公式:
sqrt(sum(abs(v).^2)) - 示例:
matlab
v = [1 -2 3];
n_euclidean = norm(v); % 等同于 norm(v, 2)
disp(['欧几里得范数 (2-范数): ', num2str(n_euclidean)]);
% 结果: 欧几里得范数 (2-范数): 3.7417
- 语法:
-
1-范数 (曼哈顿范数)
- 语法:
n = norm(v, 1) - 描述:向量元素绝对值之和。
- 公式:
sum(abs(v)) - 示例:
matlab
v = [-2 3 -1];
n_1 = norm(v, 1);
disp(['1-范数: ', num2str(n_1)]);
% 结果: 1-范数: 6
- 语法:
-
无穷范数 (最大值范数)
- 语法:
n = norm(v, Inf) - 描述:向量元素绝对值的最大值。
- 公式:
max(abs(v)) - 示例:
matlab
v = [-2 3 -1];
n_inf = norm(v, Inf);
disp(['无穷范数: ', num2str(n_inf)]);
% 结果: 无穷范数: 3
- 语法:
-
负无穷范数 (最小值范数)
- 语法:
n = norm(v, -Inf) - 描述:向量元素绝对值的最小值。
- 公式:
min(abs(v)) - 示例:
matlab
v = [-2 3 -1];
n_neg_inf = norm(v, -Inf);
disp(['负无穷范数: ', num2str(n_neg_inf)]);
% 结果: 负无穷范数: 1
- 语法:
-
p-范数 (通用形式)
- 语法:
n = norm(v, p) - 描述:计算向量的通用 p-范数,其中
p是一个正实数。 - 公式:
(sum(abs(v).^p))^(1/p) - 示例:
matlab
v = [1 2 3];
n_3 = norm(v, 3);
disp(['3-范数: ', num2str(n_3)]);
% 结果: 3-范数: 3.3019
- 语法:
2. 矩阵范数计算
对于矩阵 X,norm(X, p) 函数可以计算其不同的矩阵范数。
-
默认 (2-范数 / 谱范数)
- 语法:
n = norm(X)或n = norm(X, 2) - 描述:计算矩阵的最大奇异值。在许多应用中,它衡量了矩阵在变换向量时可能产生的最大“拉伸”程度。
- 示例:
matlab
X = [2 0 1; -1 1 0; -3 3 0];
n_spectral = norm(X); % 等同于 norm(X, 2)
disp(['矩阵 2-范数 (谱范数): ', num2str(n_spectral)]);
% 结果: 矩阵 2-范数 (谱范数): 4.2426
- 语法:
-
1-范数
- 语法:
n = norm(X, 1) - 描述:矩阵列向量绝对值之和的最大值。
- 公式:
max(sum(abs(X))) - 示例:
matlab
X = [2 0 1; -1 1 0; -3 3 0];
n_matrix_1 = norm(X, 1);
disp(['矩阵 1-范数: ', num2str(n_matrix_1)]);
% 结果: 矩阵 1-范数: 5
- 语法:
-
无穷范数
- 语法:
n = norm(X, Inf) - 描述:矩阵行向量绝对值之和的最大值。
- 公式:
max(sum(abs(X'))) - 示例:
matlab
X = [2 0 1; -1 1 0; -3 3 0];
n_matrix_inf = norm(X, Inf);
disp(['矩阵 无穷范数: ', num2str(n_matrix_inf)]);
% 结果: 矩阵 无穷范数: 6
- 语法:
-
Frobenius 范数
- 语法:
n = norm(X, 'fro') - 描述:矩阵所有元素平方和的平方根。它等同于将矩阵视为一个长向量后计算其 2-范数。
- 公式:
sqrt(sum(sum(abs(X).^2))) - 示例:
matlab
X = [2 0 1; -1 1 0; -3 3 0];
n_frobenius = norm(X, 'fro');
disp(['Frobenius 范数: ', num2str(n_frobenius)]);
% 结果: Frobenius 范数: 4.5826
- 语法:
3. vecnorm 函数(按行/列计算范数)
当需要计算矩阵中每个行向量或列向量的范数,而不是整个矩阵的范数时,vecnorm 函数非常有用。
- 语法:
N = vecnorm(A, p, dim)A:输入矩阵。p:指定的范数类型(例如 2、1、Inf)。dim:计算范数的维度。1表示按列,2表示按行。
-
示例:
“`matlab
A = [1 2 3; 4 5 6; 7 8 9];% 计算每列的 2-范数
col_norms = vecnorm(A); % 默认 p=2, dim=1
disp(‘每列的 2-范数:’);
disp(col_norms);
% 结果:
% 7.4162 7.6811 10.8167% 计算每行的 2-范数
row_norms = vecnorm(A, 2, 2); % 2 表示 2-范数, 2 表示按行
disp(‘每行的 2-范数:’);
disp(row_norms);
% 结果:
% 3.7417
% 8.7750
% 13.9284
“`
结论
MATLAB 的 norm 函数是进行向量和矩阵范数计算的强大而灵活的工具。通过理解其不同的调用方式和参数,用户可以根据具体需求选择合适的范数类型,从而有效地分析数据、评估模型性能或解决优化问题。无论是衡量向量的长度、矩阵的“大小”,还是在更复杂的数学背景下,norm 函数都提供了直观且高效的解决方案。而 vecnorm 函数则进一步扩展了其功能,允许对矩阵的子向量进行批量的范数计算,极大地提高了处理效率。