2017-11-29 1 views
1

matlab에서 전체 피벗을 수행 할 수 없습니다. 심지어 워드 프로세서 말matlab에서 lu 인수 분해를 수행하는 방법

>> [L,U,P,Q] = lu(A) 
Error using lu 
Too many output arguments. 

: 그것은 드문 드문하지 않기 때문에 나는 그것을 좋아하지 않는 MATLAB에서 lu 명령을 사용하려고하면

A = [0,1,1,1;0,1,0,0;1,1,1,1;0,0,0,-1] 

: 나는 스파 스없는 일부 행렬을 말해봐 이것은 희소 여야

[L은 U, P, Q] 희소 비공 A에 대한 = LU (A)는 단위 하부 삼각 행렬 L, 상부 삼각 행렬 U, 로우 순열 리턴,행렬 P 및 열 재 배열 행렬 Q이므로, P A Q = L * U가된다. A 이 비어 있거나 희소하지 않은 경우 lu는 오류 메시지를 표시합니다. 문 lu (A, 'matrix')는 동일한 출력 값을 반환합니다.

1) 당사는 드문 드문해야합니다 :

나는 이것에 대해 두 가지 질문이 있습니까? 이론적으로 LU 분해는 비 스파 스 행렬에서도 작동하며 완전한 피벗을 수행합니다.

2) 희소하지 않은 행렬에 대해 피벗 팅을 수행하기 위해 호출 할 적절한 MATLAB 메소드는 무엇입니까?

+1

출력 매개 변수가 너무 많습니다라는 오류 메시지가 표시됩니다. 2 또는 3 개의 출력으로 시도하십시오. –

+1

출력 Q는 스파 스 행렬에만 적용됩니다. –

+0

친구들. 알아. 하지만 왜? 확실히 이론적으로는 비 스파 스 매트릭스로 작업해야합니다 (이유가 없습니다). – Hunle

답변

1

의견에서 언급했듯이 오류는 출력 수에 관한 것입니다. Q은 스파 스 행렬에 특정한 열을 재정렬하기위한 것입니다. 따라서, 다음과 같은 명령을 사용하여 L, UP를 얻을 수 : 전체 회전에

[L,U,P] = lu(A) 
+0

예, 알고 있습니다.하지만 두 번째 질문은 왜 그것이 희소 매트릭스에만 해당 되는가하는 것입니다. 그것은 희소하지 않은 행렬에서도 작동해야합니다. – Hunle

+0

@Hunle'lu (A, '행렬') 문서에서도 언급 된 것은 희소 행렬뿐만 아니라 일반 행렬에서도 작동합니다. – OmG

+0

질문에 답변하지 않았습니다. 비 스파 스 행렬에서는 왜 작동하지 않습니까? 나는 훌륭한 이론적 이유를 생각할 수 없다. – Hunle

0

이론적으로 LU 인수 분해는 (전체 또는 스파 스) 어떤 매트릭스와 잘 작동합니다. 실제로 Matlab이 그것을 계산하는 데 사용하는 특정 라이브러리에 따라 다릅니다. Quarteroni 외 저서. "Matlab과 Octave를 이용한 과학 계산"(Springer, 4 판, 166 페이지)에서는 행렬이 꽉 차고 특정 구조가없는 경우 "일반 삼각 인수 분해는 가우시안 제거 부분적 피벗"으로 계산됩니다.

매트릭스가 가득 찬 경우 Matlab은 부분 피벗만을 사용하는 알고리즘을 사용하여 LU 분해를 수행하므로 매트릭스 Q가 정의되지 않습니다. 행렬이 희소 한 경우 전체 피벗을 사용하는 다른 라이브러리 (UMFpack)가 사용됩니다. 그래서 행렬 Q는 드문 드문 한 행렬에 대해서만 리턴됩니다.

관련 문제