1

[Q,R] = qr(A,0)ドキュメントによると、Aのqr分解の「エコノミー」バージョンを返す関数がMatlabにあり、データnorm(A-Q*R)セットに対して〜1e-12を返します。また、Q'*Q理論的には I を返す必要があります。実際には、対角線の上下 (1e-6 程度) の小さな非ゼロ要素と、1 よりわずかに大きい (1e-6 程度) 対角要素があります。 )。qr(.,0)イプシロンを指定するか、反復回数を介して、結果の Q の精度または品質(直交性)を制御する方法を知っている人はいますか? データセットのサイズにより qr(A) がメモリ不足になるため、qr(A,0) を使用する必要があります。

4

1 に答える 1

2

非エコノミー設定を試してみると、実際には AQ*R と同等の結果が得られます。ここに示すように、小さな数値を含む小さな行列の場合でも:

A = magic(20);
[Q, R] = qr(A); %Result does not change when using qr(A,0)
norm(A-Q*R)

そのため、コメントで@horchlerによって確認されたように、「経済」が問題であるとは思いませんが、タイプ「double」のデータで正確な計算を行う方法の限界に達しただけです。

何らかの方法で精度を変更したとしても、常に概算を扱うことになるため、ここで最初に検討すべきことは、既存の精度よりも高い精度が本当に必要かどうかということです。もっと精度が必要な場合は、常に方法があるかもしれませんが、それが簡単な方法であるかどうかは疑問です.

于 2014-12-10T16:07:06.567 に答える