HOWTO · MATLAB
MATLAB norm() 函数
MATLAB 的 norm() 可计算向量范数(默认 2-范数)或矩阵范数(默认矩阵 2-范数);要计算矩阵的 Frobenius 范数,需指定 "fro" 选项。
本页内容
MATLAB 的 norm() 用于计算向量或矩阵的大小。默认计算方式取决于输入:向量使用 2-范数,矩阵使用矩阵 2-范数,也称谱范数。需要其他度量时,可显式指定阶数或选项。若要分别计算各行或各列的范数,请使用 vecnorm()。
MATLAB 的 norm() 语法和默认行为
默认计算可写为 n = norm(X);要选择范数阶数,使用 n = norm(X,p);要计算矩阵的 Frobenius 范数,使用 n = norm(X,"fro")。X 是输入向量或矩阵。p 的含义取决于 X 是向量还是矩阵,因此相同的阶数不一定表示相同的计算方式。
对于向量,norm(v) 等同于 norm(v,2)。对于矩阵,norm(A) 等同于 norm(A,2):它返回最大奇异值,而不是 Frobenius 范数。要计算 Frobenius 范数,必须显式指定 "fro"。
选择向量范数
对于向量 v,当 p 为正有限值时,p-范数是将各元素绝对值分别取 p 次方、求和后再取 p 次方根。常见选择包括 norm(v,1)(绝对值之和)、norm(v,2)(欧几里得长度)和 norm(v,Inf)(最大绝对值)。省略 p 时默认使用 2-范数。
如果关注绝对值的总和,可使用 1-范数;如果关注欧几里得长度,可使用 2-范数;如果尺度由最大分量决定,可使用无穷范数。这些范数从不同角度概括同一个向量,应根据计算需求选择。例如,分量为 3 和 4 的向量,其 1-范数为 7、2-范数为 5、无穷范数为 4。
选择矩阵范数
对于矩阵 A,MATLAB 可通过 norm(A,p) 计算 1-范数、2-范数和无穷范数;这些范数的定义与向量范数不同。矩阵 1-范数是各列绝对值之和中的最大值。矩阵 2-范数是最大奇异值,也是默认值。矩阵无穷范数是各行绝对值之和中的最大值。要计算 Frobenius 范数,请使用 norm(A,"fro");其值是所有元素绝对值平方之和的平方根。
例如,对于 A = [1 2; 3 4],1-范数为 6,无穷范数为 7。Frobenius 范数为 30 的平方根,而 2-范数是最大奇异值,约为 5.465。不要把 norm(A) 的结果当作矩阵的 Frobenius 范数;要计算后者,请指定 "fro"。
运行示例并查看结果
运行以下示例:
本节中的代码以及显示的标签或输出仍为英文。
v = [3 4];
A = [1 2; 3 4];
fprintf('vector 2-norm: %.1f\n', norm(v));
fprintf('matrix default (2-norm): %.4f\n', norm(A));
fprintf('matrix 1-norm: %.1f\n', norm(A, 1));
fprintf('matrix infinity-norm: %.1f\n', norm(A, Inf));
fprintf('matrix Frobenius norm: %.4f\n', norm(A, "fro"));
vector 2-norm: 5.0
matrix default (2-norm): 5.4650
matrix 1-norm: 6.0
matrix infinity-norm: 7.0
matrix Frobenius norm: 5.4772
向量的结果是其欧几里得长度。对于矩阵,默认阶数和显式指定阶数 2 都会返回谱范数;其余各行分别显示最大列绝对值之和、最大行绝对值之和,以及显式请求的 Frobenius 范数。这些数值有助于确认计算使用了哪种定义。
使用 vecnorm() 计算各行或各列的范数
norm() 为整个输入返回一个范数。若要分别计算每一列或每一行的范数,请调用 vecnorm(X,p,dim)。参数 dim 指定计算所沿的维度。对于二维矩阵,维度 1 表示沿每一列向下计算,并为每列返回一个值;维度 2 表示沿每一行计算,并为每行返回一个值。如果省略该参数,vecnorm() 会使用第一个非单例维度;对于普通矩阵,这意味着按列计算。
例如,使用 vecnorm(A,2,1) 可计算每列的 2-范数,使用 vecnorm(A,2,2) 可计算每行的 2-范数。按维度计算范数应使用此操作;给 norm() 添加维度参数并不能实现按行或按列计算。要为整个向量或矩阵计算一个范数,请使用 norm();若要沿某个维度为每个切片分别计算范数,请使用 vecnorm()。