6

在此处输入图像描述

正如您在上面的屏幕截图中看到的,我的 Matlab m 文件代码中有以下表达式:
K = P * D * D' * P;
其中,P 是 nxn 矩阵,D 是 nx1 列向量(如果重要,n=4)。

为什么我会收到此警告消息?
如果我在那里使用或不使用括号会有什么变化?

4

2 回答 2

8

浮点运算不是关联的。所以一般来说,a * (b * c)不一定会给出与(a * b) * c.

您所写的语句等效于((P * D) * D') * P,因此编译器警告您,如果您依赖 的 Hermitian 对称性D * D',您应该强制它精确计算。

于 2012-05-23T17:03:18.937 回答
2

作为旁注:你总是可以做

K = (K + K') / 2;

要强制执行 的 Hermetian-ity K,但最好首先按照P * (D * D') * P提示将其计算为 Hermitian。

编辑:实际上,需要注意的一件事是,如果通常是对角线,K则它只会是 Hermitian 。P即使使用P置换矩阵(如字母所示),也不能保证K是 Hermitian。唯一有保证的 Hermitian 部分D * D'

于 2012-05-23T17:19:11.663 回答