Matlab / Octave에서 큰 행렬의 조건 수를 계산하는 가장 빠른 알고리즘


9

조건 번호의 정의에서 그것을 계산하기 위해 행렬 반전이 필요한 것 같습니다. 일반 정사각형 행렬 (또는 대칭 양수 한정의 경우)이 행렬 분해를 이용하여 조건 번호를 계산할 수 있는지 궁금합니다. 더 빠른 방법.

답변:


7

이 방향에 대한 이론은 없지만 조건 수를 계산하는 경우 (2의 인수 내에 근사하더라도) 인수 분해를 계산하는 것과 동일한 복잡성을 갖는 것으로 보입니다.

대칭 양수 한정 행렬 의 희소 한 Cholesky factor 또는 일반 정사각 행렬 의 희소 인수 분해 (암시 적 )에서 은 전체 역을 계산하는 것보다 훨씬 빠릅니다. (이것과 관련하여 제 논문은 과도하게 결정된 선형 시스템에 대한 하이브리드 규범 및 범위, Linear Algebra Appl. 216 (1995), 257-266입니다. http://www.mat.univie.ac.at/~neum/scan/74 .pdf )RQRQ(RTR)1

편집 : 경우 단위 불변 norn과 관련하여희소 QR 분해의 계산에 대해서는, 예를 들어 http://dl.acm.org/citation.cfm?id=174408을 참조하십시오 . 희소 역의 계산에 대해서는, 예를 들어, 나의 논문 : 희소 선형 모델에서 공분산의 제한된 최대 가능성 추정, Genetics Selection Evolution 30 (1998), 1-24를 참조하십시오. https://www.mat.univie.ac.at/~neum/ms/reml.pdf 비용은 인수 분해 비용의 약 3 배입니다.A=QR

cond(A)=cond(R)=cond(RTR).




따라서 행렬 은 형식으로 QR을 계산합니다. 여기서 은 상위 삼각 행렬이고 는 직교 행렬이며 조건 번호는 여기에서 요점은 QR 분해를 계산하는 빠른 방법을 찾는 방법입니다. 내가 맞아? AA=QRRQcond(A)=||A||||A1||(RTR)1
linello

@linello :별로; 내 편집을 참조하십시오.
Arnold Neumaier

감사! 이 단계의 비용은 얼마입니까?
linello

@linello : 전체 행렬의 경우 O(n3); 희소 행렬의 경우 희소 구조에 크게 의존합니다.
Arnold Neumaier

4

조건 행렬을 계산하기 위해 대칭 행렬의 고유 값 / 고유 벡터 분해 또는 일반 행렬의 SVD를 사용하는 것은 확실히 쉽지만, 특히 빠른 방법은 아닙니다.

모든 컴퓨팅 작업을 수행하지 않고도 대부분의 목적에 유용한 조건 번호의 추정치를 계산할 수있는 반복 알고리즘이 있습니다. A1. 예를 들어 condestMATLAB 의 함수를 참조하십시오 .


그러나 때로는 추정치가 너무 작습니다. 이 방향에 대한 이론은 없지만 조건 수를 계산하는 경우 (2의 인수 내에 근사하더라도) 인수 분해를 계산하는 것과 동일한 복잡성을 갖는 것으로 보입니다.
Arnold Neumaier

1

희소 에르 미트 행렬의 경우 HLanczos 알고리즘을 사용하여 고유 값을 계산할 수 있습니다. 만약H 에르 미트 (Hermitian)가 아닌 경우 HTH.

최대 및 최소 고유 값 / 단일 값을 매우 빠르게 찾을 수 있기 때문에 (삼각형 화가 완료되기 훨씬 전에) Lanczos 방법이 조건 번호를 계산하는 데 특히 유용합니다.


나는 항상 가장 작은 또는 가장 큰 고유 값을 얻는 방법을 명확하게하는 lanczos 반복을위한 읽을 수있는 matlab 코드를 어디에서 찾을 지 궁금했습니다. 당신은 하나를 제안 할 수 있습니까?
linello

Lanczos 알고리즘에 대한 MATLAB 코드가 없습니다.
chaohuang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.