3

私はsvd計算を使用してこれを行ってきました

[U, S, V] = svd(A)

ここで、Aの最後の列をヌルスペース近似として使用します。Aが非常に大きくなるので、これが私の計算を遅くしていることに気づきました。

null(A)の場合、ドキュメントはとにかくSVDを実行することを示唆しているようです。また、Aがフルランクの場合は動作しません。SVDは、最大の特異値を見つけ、次に次の値を見つけることによって進行しますが、私は最小の値が必要です。

これは大きなボトルネックのようです。これについての助けを本当に感謝します。MATLABを使用しています。

ありがとう。

4

3 に答える 3

3

このウィキペディアの記事では、零空間の数値計算の3つの方法、つまり、縮小(ガウスの消去法)、SVD、およびQR分解について説明しています。簡単に言えば、(1)縮小は「丸め誤差が存在する場合の数値精度の問題のため、ヌル空間の実際の計算には適していません」、(2)SVDは「最先端のアプローチ」ですが、 「一般に、同じサイズの行列を使用したいくつかの行列-行列の乗算とほぼ同じコスト」であり、(3)数値安定性とQR分解のコストは、「SVDと削減アプローチの中間」です。

したがって、SVDが遅すぎる場合は、QR分解の機会を与えることができます。表記のアルゴリズムは次のとおりです。"Aはの4xN行列4<Nです。のQR分解を使用すると、次のようA'な行列を見つけることができますA'*P = Q*R = [Q1 Q2]*R。ここで、Pは置換行列、QNxNであり、RはですNx4。行列Q1はNx4であり、最初の4列で構成されます。のQ。行列Q2は。Nx(N-4)の最後のN-4列で構成されていますQ。以来A*Q2 = 0、の列は。"Q2のヌルスペースにまたがっています。A

Matlabの実装:[Q, R, P] = qr(A', 'matrix');行列の列はQ2 = Q(:, 5:end);、のヌルスペースを提供しますA

于 2011-12-14T13:26:09.433 に答える
1

この答えは、あなたが実際にやりたいのは解決することであるというあなたのコメントに基づいていますAx = 0。この目的のために、完全な零空間計算は通常非効率的です。の最小二乗近似が必要な場合はx、matlab演算子を調べて\ください(を参照help mldivide)。

他の場合には、「経済的な」SVDビアsvd(A,0)が非正方行列に役立つ場合があります(完全なSを計算せず、非ゼロブロックのみを計算します)。

于 2011-12-14T12:45:17.877 に答える
0

すべてのポイントが平面からのものである場合は、サンプルだけを使用してSVDを呼び出します。

于 2011-12-13T23:34:53.697 に答える