21.2.1 涉及对角矩阵的表达式

假设 D 是一个对角矩阵。如果 M 是一个满矩阵,那么 D*M 将缩放 M 的行。也就是说,若 S = D*M,则对于每一对索引 i,j,有

S(i,j) = D(i,i) * M(i,j).

类似地,M*D 将进行列缩放。

矩阵 D 也可以是矩形的,即 m×n,其中 m != n。如果 m < n,那么表达式 D*M 等价于

D(:,1:m) * M(1:m,:),

M 末尾的 n-m 行被忽略。如果 m > n,则 D*M 等价于

[D(1:n,:) * M; zeros(m-n, columns (M))],

即在结果后附加零行。右乘 M*D 的情况与此类似。

表达式 D \ MM / D 执行逆缩放。它们等价于在最小二乘最小范数意义下求解对角(或矩形对角)矩阵。在精确算术运算中,这等价于乘以一个伪逆。矩形对角矩阵的伪逆仍是一个矩形对角矩阵,但维度互换,且每个非零对角元素被替换为其倒数。矩阵除法算法实际上使用除法而非乘以倒数,以获得更好的数值精度;除此以外,它们遵循上述定义。注意,对角矩阵永远不会因病态而被截断;否则它对于缩放就没有太大用处了。这通常符合线性代数的需求。一个恰好为对角形式的满矩阵(因此不是一个特殊对象)当然会被正常处理。

对角矩阵的乘法和除法在与稀疏矩阵结合时也能高效工作,即 D*S,其中 D 是对角矩阵,S 是稀疏矩阵,这会缩放稀疏矩阵的行并返回一个稀疏矩阵。表达式 S*DD\SS/D 的工作方式与此类似。

如果 D1D2 都是对角矩阵,那么表达式

D1 + D2
D1 - D2
D1 * D2
D1 / D2
D1 \ D2

同样生成对角矩阵,前提是遵循通常的维度匹配规则。所使用的关系与上述相同。

此外,对角矩阵 D 可以乘以或除以一个标量,或者如果它是方阵则可以求标量幂,所有这些情况都会产生对角矩阵结果。

对角矩阵也可以进行转置或共轭转置,得到预期结果。提取对角矩阵的前导子矩阵,即 D(1:m,1:n),将生成一个对角矩阵;其他索引表达式将隐式转换为满矩阵。

将对角矩阵加到满矩阵上时,仅对对角元素进行操作。因此

A = A + eps * eye (n)

是一种增强矩阵对角线的有效方法。减法的工作方式与此类似。

当涉及与其他逐元素运算符(.*./.\.^)的表达式时,将发生到满矩阵的隐式转换。这并不总是严格必要的,但为了与 MATLAB 保持更好的一致性而这样选择。


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2