6

ここに画像の説明を入力

上のスクリーン ショットでわかるように、Matlab の m ファイル コードに次の式があります
K = P * D * D' * P;

この警告メッセージが表示されるのはなぜですか?
括弧を使用する場合と使用しない場合の違いは何ですか?

4

2 に答える 2

8

浮動小数点演算は結合的ではありません。したがって、一般に、a * (b * c)必ずしも と同じ結果が得られるとは限りません(a * b) * c

書かれたステートメントは と同等((P * D) * D') * Pであるため、コンパイラは、 のエルミート対称性に依存している場合はD * D'、正確に計算するように強制する必要があることを警告しています。

于 2012-05-23T17:03:18.937 に答える
2

補足として:いつでもできます

K = (K + K') / 2;

のエルミート性を強制するには、ヒントKで示唆されているように、最初にエルミートとして計算することをお勧めします。P * (D * D') * P

編集: 実際には、注意すべきことの 1 つは、が一般的に対角線でKある場合にのみ、必然的にエルミートになるということです。P順列行列であっても(文字が示すように)、エルミートPであるという保証はありません。K唯一の保証されたエルミート部分D * D'

于 2012-05-23T17:19:11.663 に答える