假设 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 \ M 和 M / D 执行逆缩放。它们等价于在最小二乘最小范数意义下求解对角(或矩形对角)矩阵。在精确算术运算中,这等价于乘以一个伪逆。矩形对角矩阵的伪逆仍是一个矩形对角矩阵,但维度互换,且每个非零对角元素被替换为其倒数。矩阵除法算法实际上使用除法而非乘以倒数,以获得更好的数值精度;除此以外,它们遵循上述定义。注意,对角矩阵永远不会因病态而被截断;否则它对于缩放就没有太大用处了。这通常符合线性代数的需求。一个恰好为对角形式的满矩阵(因此不是一个特殊对象)当然会被正常处理。
对角矩阵的乘法和除法在与稀疏矩阵结合时也能高效工作,即 D*S,其中 D 是对角矩阵,S 是稀疏矩阵,这会缩放稀疏矩阵的行并返回一个稀疏矩阵。表达式 S*D、D\S、S/D 的工作方式与此类似。
如果 D1 和 D2 都是对角矩阵,那么表达式
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