2016-09-16 3 views
3

나는 다음과 같은 대각선이 필요합니다행렬 역행렬을 취하지 않고 diag (X % * % solve (A) % * % t (X))를 효율적으로 계산하는 방법은 무엇입니까?

A 전체 순위 광장 행렬
diag(X %*% solve(A) %*% t(X)) 

, X는 직사각형 행렬이다. AX 모두가 희박합니다.

정말 필요하지 않으면 매트릭스의 역함수를 찾는 것이 나쁘다는 것을 알고 있습니다. 그러나 solve(A)이 두 개의 인수를 사용하여 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 분해, Singular Value 분해 및 Pivoted Cholesky 분해에 대한 추가 리소스가 제공되므로 유용합니다.


overview

chol

lu


추가 자원 경우

당신이 피벗 Choles에 관심 ky 인수 분해는 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을 참조하십시오.

이 질문과 답변은 모두 수치 행렬 계산에 초점을 둡니다. 다음은 몇 가지 통계 응용 프로그램을 제공합니다