2016-09-16 10 views
3

私は、次の対角線が必要:行列の逆数を取らずにdiag(X%*%solve(A)%*%t(X))を効率的に計算する方法は?

Aがフルランク正方行列である
diag(X %*% solve(A) %*% t(X)) 

Xが矩形行列です。 AXはどちらもスパースです。

本当に必要な場合を除き、行列の逆行列が見つからないことが分かります。しかし、solve(A)が2つの引数を持つsolveに置き換えられるような式を書き直す方法はわかりません。そのため、線形システムは明示的に反転することなく解かれます。それは可能ですか?私は本当に開始する前に

+0

@ZheyuanLi:以下は、いくつかの統計的なアプリケーションを提供します – Coolwater

答えて

7

はおそらく、私はあなたが

diag(X %*% solve(A, t(X))) 

行う場合には逆行列が回避されることを言及する必要があります。 solve(A, B)はLU分解を実行し、その結果の三角マトリックス因子を使用して線形システムA x = Bを解きます。 Bを指定しないままにすると、デフォルトで対角行列になりますので、逆行列の計算はAと明示的に計算されます。

?solveを慎重に、またヒントのために何度も読んでください。それはLAPACKルーチンDGESVに基づいており、シーンの背後にある数値線形代数を見つけることができます。

DGESV computes the solution to a real system of linear equations 

    A * X = B, 

where A is an N-by-N matrix and X and B are N-by-N RHS matrices. 

The LU decomposition with partial pivoting and row interchanges is 
used to factor A as 

    A = P * L * U, 

where P is a permutation matrix, L is unit lower triangular, and U is 
upper triangular. The factored form of A is then used to solve the 
system of equations A * X = B. 

solve(A, t(X))solve(A) %*% t(X)との間の差は、効率の問題です。後者の一般的な行列乗算%*%は、solveよりもはるかに高価です。

solve(A, t(X))を使用しても、別の%*%があるため、あなたは最速のトラックではありません。

また、対角要素だけを必要とするため、最初に完全な行列を取得するのにかなりの時間を費やします。 私の答えは以下の通りです。

私はLaTeXのすべてを書き直しました。また、R実装への参照を含め、コンテンツも大幅に拡張されています。最後にQR分解、特異値分解、ピボットされたコレスキー因子分解に余分なリソースが与えられます。あなたが旋回しCholesに興味がある場合には


overview

chol

lu


エクストラリソース

あなたはCompute projection/hat matrix via QR factorization, SVD (and Cholesky factorization?)を参照することができます。 QR分解と特異値分解についても議論します。

上記のリンクは、通常の最小二乗回帰コンテキストで設定されます。加重最小二乗についてはGet hat matrix from QR decomposition for weighted least square regressionを参照してください。

QR分解はまた、コンパクトな形を取る。 QR分解がどのように行われ、保存されているかをもっと知りたい場合は、What is "qraux" returned by QR decompositionを参照してください。

これらの質問と回答は、すべて数値行列計算に焦点を当てています。あまりにも早くそれを私は受け入れますが、私は決してしない

関連する問題