正如您在上面的屏幕截图中看到的,我的 Matlab m 文件代码中有以下表达式:
K = P * D * D' * P;
其中,P 是 nxn 矩阵,D 是 nx1 列向量(如果重要,n=4)。
为什么我会收到此警告消息?
如果我在那里使用或不使用括号会有什么变化?
正如您在上面的屏幕截图中看到的,我的 Matlab m 文件代码中有以下表达式:
K = P * D * D' * P;
其中,P 是 nxn 矩阵,D 是 nx1 列向量(如果重要,n=4)。
为什么我会收到此警告消息?
如果我在那里使用或不使用括号会有什么变化?
浮点运算不是关联的。所以一般来说,a * (b * c)
不一定会给出与(a * b) * c
.
您所写的语句等效于((P * D) * D') * P
,因此编译器警告您,如果您依赖 的 Hermitian 对称性D * D'
,您应该强制它精确计算。
作为旁注:你总是可以做
K = (K + K') / 2;
要强制执行 的 Hermetian-ity K
,但最好首先按照P * (D * D') * P
提示将其计算为 Hermitian。
编辑:实际上,需要注意的一件事是,如果通常是对角线,K
则它只会是 Hermitian 。P
即使使用P
置换矩阵(如字母所示),也不能保证K
是 Hermitian。唯一有保证的 Hermitian 部分D * D'
。