MATLAB norm:向量和矩阵范数计算指南 – wiki基地

文章标题:MATLAB norm 函数:向量与矩阵范数计算指南

引言

在数学和工程领域,范数(norm)是一个核心概念,它提供了一种度量向量或矩阵“大小”或“长度”的方式。范数是泛函分析中的一个基本工具,在优化、机器学习、信号处理以及数值分析等众多领域都有广泛应用。MATLAB 提供了强大的 norm 函数,用于高效地计算各种类型的向量范数和矩阵范数。本文将详细介绍 norm 函数的不同用法,并通过示例帮助读者掌握其在向量和矩阵范数计算中的应用。

什么是范数?

简单来说,范数是一个将向量或矩阵映射到一个非负实数的函数,它满足以下基本性质:

  1. 非负性: 任何向量或矩阵的范数都大于或等于零,且仅当向量或矩阵为零时,范数才为零。
  2. 齐次性: 将向量或矩阵乘以一个标量,其范数也按标量的绝对值进行缩放。
  3. 三角不等式: 两个向量(或矩阵)和的范数小于或等于它们各自范数的和。

根据其定义方式,范数可以分为多种类型,如 p-范数、Frobenius 范数等,每种范数在特定上下文中都有其独特的物理或数学意义。

MATLAB 中的 norm 函数

MATLAB 的 norm 函数是一个多功能工具,其行为根据输入参数的不同而变化。

1. 向量范数计算

对于向量 vnorm(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. 矩阵范数计算

对于矩阵 Xnorm(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 函数则进一步扩展了其功能,允许对矩阵的子向量进行批量的范数计算,极大地提高了处理效率。

滚动至顶部