上のスクリーン ショットでわかるように、Matlab の m ファイル コードに次の式があります
K = P * D * D' * P;
。
この警告メッセージが表示されるのはなぜですか?
括弧を使用する場合と使用しない場合の違いは何ですか?
上のスクリーン ショットでわかるように、Matlab の m ファイル コードに次の式があります
K = P * D * D' * P;
。
この警告メッセージが表示されるのはなぜですか?
括弧を使用する場合と使用しない場合の違いは何ですか?
浮動小数点演算は結合的ではありません。したがって、一般に、a * (b * c)
必ずしも と同じ結果が得られるとは限りません(a * b) * c
。
書かれたステートメントは と同等((P * D) * D') * P
であるため、コンパイラは、 のエルミート対称性に依存している場合はD * D'
、正確に計算するように強制する必要があることを警告しています。
補足として:いつでもできます
K = (K + K') / 2;
のエルミート性を強制するには、ヒントK
で示唆されているように、最初にエルミートとして計算することをお勧めします。P * (D * D') * P
編集: 実際には、注意すべきことの 1 つは、が一般的に対角線でK
ある場合にのみ、必然的にエルミートになるということです。P
順列行列であっても(文字が示すように)、エルミートP
であるという保証はありません。K
唯一の保証されたエルミート部分D * D'
。