MATLAB norm:轻松计算欧几里得距离和向量长度
在数据分析、机器学习和工程计算中,我们经常需要处理向量和矩阵。其中一个最基本的操作就是计算向量的长度(或称为范数)以及点与点之间的距离。MATLAB 提供了一个强大而便捷的函数——norm,它使得这些计算变得异常简单。
本文将详细介绍 norm 函数的用法,从基础的向量长度计算到更复杂的矩阵范数,帮助你轻松掌握这一核心工具。
什么是范数(Norm)?
在数学上,范数是赋予向量空间中每个向量一个“长度”或“大小”的函数。它满足一些特定的数学属性,但从应用角度来看,我们可以将其理解为对向量或矩阵大小的一种度量。
最常见和直观的是 L2 范数,也就是我们熟知的欧几里得范数(Euclidean Norm)。对于一个向量,它的 L2 范数就是其所有元素平方和的平方根,这恰好是向量在空间中的几何长度。
norm 函数的基本用法
1. 计算向量的长度(L2 范数)
这是 norm 函数最常见的用途。想象一个从原点 (0,0) 指向 (3,4) 的向量,它的长度可以通过勾股定理计算。在 MATLAB 中,使用 norm 函数可以一步到位。
语法: n = norm(V)
此语法返回向量 V 的欧几里得范数(L2 范数)。
示例:
“`matlab
% 创建一个二维向量
v = [3, 4];
% 计算向量的长度
length_v = norm(v);
fprintf(‘向量 [3, 4] 的长度是: %f\n’, length_v);
% 输出: 向量 [3, 4] 的长度是: 5.000000
% 创建一个三维向量
u = [1, 2, -2];
length_u = norm(u);
fprintf(‘向量 [1, 2, -2] 的长度是: %f\n’, length_u);
% 输出: 向量 [1, 2, -2] 的长度是: 3.000000
``norm(v)
在这个例子中,的计算过程等同于sqrt(3^2 + 4^2) = sqrt(9 + 16) = sqrt(25) = 5`。
2. 计算两点间的欧几里得距离
欧几里得距离是衡量多维空间中两点之间“直线”距离的常用方法。如果点 A 的坐标是 P1,点 B 的坐标是 P2,那么它们之间的距离就是向量 P1 - P2 的范数。
示例:
假设我们有两个点:A = (1, 2) 和 B = (4, 6)。
“`matlab
% 定义两个点的坐标向量
P1 = [1, 2];
P2 = [4, 6];
% 计算两点之间的差向量
diff_vec = P1 – P2; % 或者 P2 – P1,结果的范数相同
% 使用 norm 计算欧几里得距离
distance = norm(diff_vec);
fprintf(‘点 (1, 2) 和点 (4, 6) 之间的欧几里得距离是: %f\n’, distance);
% 输出: 点 (1, 2) 和点 (4, 6) 之间的欧几里得距离是: 5.000000
``norm([1-4, 2-6]) = norm([-3, -4]) = sqrt((-3)^2 + (-4)^2) = 5`。
这里的计算过程是
norm 函数的进阶用法
norm 函数不仅限于计算 L2 范数,它还支持多种其他类型的范数,通过第二个参数 p 来指定。
语法: n = norm(V, p)
1. 其他向量范数(p-范数)
- L1 范数 (
p = 1):向量元素绝对值之和,也称为“曼哈顿距离”。
matlab
v = [3, -4, 5];
norm_1 = norm(v, 1); % 计算 |3| + |-4| + |5|
fprintf('L1 范数是: %f\n', norm_1);
% 输出: L1 范数是: 12.000000
- 无穷范数 (
p = inf):向量中绝对值最大的元素。
matlab
v = [3, -4, 5];
norm_inf = norm(v, inf); % 寻找 max(|3|, |-4|, |5|)
fprintf('无穷范数是: %f\n', norm_inf);
% 输出: 无穷范数是: 5.000000
2. 矩阵范数
norm 函数也可以用于计算矩阵的范数,这在数值分析和线性代数中非常重要。
语法: n = norm(X, p)
- 2-范数 (
p = 2或默认):矩阵的最大奇异值。它衡量了矩阵能够对向量产生的最大“拉伸”程度。
matlab
A = [1, 2; 3, 4];
norm_2 = norm(A); % 默认计算 2-范数
fprintf('矩阵 A 的 2-范数是: %f\n', norm_2);
% 输出: 矩阵 A 的 2-范数是: 5.464986
- Frobenius 范数 (
p = 'fro'):矩阵所有元素平方和的平方根,类似于将矩阵视为一个长向量后计算其 L2 范数。
matlab
A = [1, 2; 3, 4];
norm_fro = norm(A, 'fro'); % sqrt(1^2 + 2^2 + 3^2 + 4^2)
fprintf('矩阵 A 的 Frobenius 范数是: %f\n', norm_fro);
% 输出: 矩阵 A 的 Frobenius 范数是: 5.477226
- 1-范数 (
p = 1):矩阵的最大“列和”(每列元素绝对值之和的最大值)。 - 无穷范数 (
p = inf):矩阵的最大“行和”(每行元素绝对值之和的最大值)。
总结
MATLAB 的 norm 函数是一个功能强大且灵活的工具,远不止计算向量长度这么简单。
- 对于向量:
norm(V)是计算其欧几里得长度的最快方式。norm(P1 - P2)是计算两点间欧几里得距离的简洁方法。-
norm(V, p)可以让你探索不同的范数定义,如 L1 或无穷范数。 -
对于矩阵:
norm(A)和norm(A, 'fro')等提供了衡量矩阵“大小”的不同标准。
无论你是在进行几何计算、数据标准化还是复杂的算法分析,norm 函数都将是你不可或缺的得力助手。掌握它,你就能更高效地在 MATLAB 中解决各种科学计算问题。