MATLAB `norm` 教程:从入门到精通 – wiki大全

I apologize for the repeated issues. There seems to be a problem with the write_file tool. Since I cannot write to a file, I will provide the article content directly in Markdown format.

Here is the article:

“`markdown

MATLAB norm 教程:从入门到精通

在 MATLAB 中,norm 函数是一个核心工具,用于计算向量和矩阵的“大小”或“长度”。无论是基础的欧几里得距离,还是更复杂的矩阵性质分析,掌握 norm 函数的各种用法对于进行数学、工程和科学计算至关重要。本文将从入门、进阶到精通,详细阐述 norm 函数的各个方面。

一、入门:norm 函数的基础用法

norm 函数最简单的形式用于计算向量的欧几里得长度(即 2-范数)和矩阵的最大奇异值(也是 2-范数)。

1. 向量范数(欧几里得范数 / 2-范数)

对于一个向量 vnorm(v) 返回其欧几里得长度。计算方法是向量元素平方和的平方根,这也被称为 2-范数或向量的模。

语法:
matlab
n = norm(v)

示例:
matlab
v = [3 4];
n = norm(v);
disp(n); % 输出: 5

这表示从原点到点 (3,4) 的向量长度。通过计算两个点之差的范数,它也可以用来计算两点间的欧几里得距离。

2. 矩阵范数(默认 2-范数)

对于一个矩阵 Xnorm(X) 返回其 2-范数,它等同于矩阵的最大奇异值。

语法:
matlab
n = norm(X)

示例:
matlab
X = [1 2; 3 4];
n = norm(X);
disp(n); % 输出: 5.4649 (近似值)

二、进阶:不同类型的范数

norm 函数可以通过指定第二个参数 p 来计算不同类型的范数。

1. 向量范数 (norm(v, p))

对于向量 vp-范数通常定义为 (sum(abs(v).^p))^(1/p)

  • 1-范数 (p=1): 向量元素绝对值之和。
    语法: n = norm(v, 1)
    示例:
    matlab
    v = [-1 2 -3];
    n = norm(v, 1);
    disp(n); % 输出: 6 (abs(-1) + abs(2) + abs(-3))
  • 2-范数 (p=2): 欧几里得长度(默认)。
    语法: n = norm(v, 2)n = norm(v)
  • 无穷范数 (p=Inf): 向量元素绝对值的最大值。
    语法: n = norm(v, Inf)
    示例:
    matlab
    v = [-1 2 -3];
    n = norm(v, Inf);
    disp(n); % 输出: 3 (max(abs(v)))
  • 负无穷范数 (p=-Inf): 向量元素绝对值的最小值。
    语法: n = norm(v, -Inf)
    示例:
    matlab
    v = [-1 2 -3];
    n = norm(v, -Inf);
    disp(n); % 输出: 1 (min(abs(v)))
  • P-范数 (任意正实数 p): 广义范数。
    语法: n = norm(v, p)
    示例:
    matlab
    v = [1 2];
    n = norm(v, 3); % (1^3 + 2^3)^(1/3) = (1+8)^(1/3) = 9^(1/3)
    disp(n); % 输出: 2.0801

2. 矩阵范数 (norm(X, p))

对于矩阵 X,不同的 p 值对应不同的矩阵范数:

  • 1-范数 (p=1): 矩阵列向量绝对值之和的最大值。
    语法: n = norm(X, 1)
    示例:
    matlab
    X = [1 -2; -3 4];
    n = norm(X, 1); % max(abs(1)+abs(-3), abs(-2)+abs(4)) = max(4, 6)
    disp(n); % 输出: 6
  • 2-范数 (p=2): 最大奇异值(默认)。
    语法: n = norm(X, 2)n = norm(X)
  • 无穷范数 (p=Inf): 矩阵行向量绝对值之和的最大值。
    语法: n = norm(X, Inf)
    示例:
    matlab
    X = [1 -2; -3 4];
    n = norm(X, Inf); % max(abs(1)+abs(-2), abs(-3)+abs(4)) = max(3, 7)
    disp(n); % 输出: 7
  • Frobenius 范数 (p='fro'): 所有元素绝对值平方和的平方根。它等价于 norm(X(:), 2)
    语法: n = norm(X, 'fro')
    示例:
    matlab
    X = [1 2; 3 4];
    n = norm(X, 'fro'); % sqrt(1^2 + 2^2 + 3^2 + 4^2) = sqrt(1+4+9+16) = sqrt(30)
    disp(n); % 输出: 5.4772

三、精通:高级概念与考量

1. 数学基础

  • 向量范数: 向量范数是一个函数,它为向量空间中的每个向量(零向量除外)分配一个严格为正的长度或大小。它满足非负性、定性、齐次性和三角不等式等性质。p-范数是向量范数的一个常见族。
  • 矩阵范数: 矩阵范数大致可分为:
    • 逐元素范数 (Entry-wise norms): 将矩阵视为一个长向量(例如 Frobenius 范数)。
    • 诱导范数 (Induced (or Operator) norms): 根据向量范数定义,表示矩阵对向量施加的最大“拉伸”。矩阵的 1-范数、2-范数和无穷范数都是诱导范数。矩阵的 2-范数尤其由向量 2-范数诱导。

2. 计算效率

  • 计算矩阵的 2-范数 (norm(X)norm(X, 2)) 涉及到计算矩阵的奇异值分解(SVD),这对于大型矩阵来说计算成本可能很高。
  • 矩阵的 1-范数、无穷范数和 Frobenius 范数通常计算速度更快,因为它们不需要 SVD。在需要与向量 2-范数兼容时,Frobenius 范数通常是 2-范数的一个计算成本较低的良好替代方案。

3. vecnorm 函数

为了计算数组沿特定维度(例如矩阵的行或列)的范数,MATLAB 提供了 vecnorm 函数。这对于避免显式循环特别有用。

语法:
* N = vecnorm(A): 如果 A 是一个矩阵,计算每列的 2-范数;对于多维数组,则计算第一个非单一维度上的范数。
* N = vecnorm(A, p): 计算 p-范数。
* N = vecnorm(A, p, dim): 沿指定维度 dim 计算 p-范数。

示例:
“`matlab
A = [1 2 3; 4 5 6];
col_norms = vecnorm(A); % 每列的范数 (默认 p=2)
disp(col_norms); % 输出: [4.1231 5.3852 6.7082]

row_norms = vecnorm(A, 2, 2); % 每行的 2-范数
disp(row_norms); % 输出: [3.7417; 8.7750]
“`

4. 符号范数

norm 函数也可以与 MATLAB 的符号数学工具箱一起用于符号变量和矩阵。

示例:
matlab
syms x y z;
v_sym = [x; y; z];
n_sym = norm(v_sym);
disp(n_sym); % 输出: (abs(x)^2 + abs(y)^2 + abs(z)^2)^(1/2)

5. 应用领域

范数在许多领域都至关重要:
* 优化: 用于定义目标函数(例如 L1 正则化、L2 正则化)。
* 机器学习: 误差度量(例如均方误差使用 L2 范数)、距离计算。
* 数值分析: 衡量算法的误差和收敛性。
* 信号处理: 量化信号强度或噪声。
* 线性代数: 分析矩阵性质和稳定性。

总结

通过理解 norm 函数的这些不同方面,您可以在 MATLAB 中有效地将其应用于各种问题。从计算向量和矩阵的基本大小,到选择特定类型的范数进行高级分析,再到利用 vecnorm 进行高效计算,norm 函数是您在 MATLAB 中进行数值计算和数据分析的强大工具。不断实践和探索其不同用法,将有助于您更深入地掌握 MATLAB。
“`

滚动至顶部