일반 행렬의 최대 고유 값을 계산하는 가장 빠른 방법은 무엇입니까?


27

편집 : 고유 값의 크기가 1 이상인지 테스트하고 있습니다.

큰 희소 비대칭 행렬의 최대 절대 고유 값을 찾아야합니다.

나는 R의 eigen()함수를 사용하여 EISPACK 또는 LAPACK의 QR algo를 사용하여 모든 고유 값을 찾은 다음 abs()절대 값을 얻는 데 사용 합니다. 그러나 나는 더 빨리해야합니다.

igraphR 패키지 에서 ARPACK 인터페이스를 사용해 보았습니다 . 그러나 내 행렬 중 하나에 오류가 발생했습니다.

최종 구현은 R에서 액세스 할 수 있어야합니다.

아마도 같은 크기의 여러 고유 값이있을 것입니다.

의견 있으십니까?

편집 : 정확도는 필요합니다 1e-11. "일반적인"행렬은 지금까지 386×386 이었습니다. 나는 그것에 QR 분해를 할 수있었습니다. 그러나 훨씬 더 큰 것도 가능합니다. 나는 현재 Arnoldi 알고리즘에 대해 읽기 시작했습니다. Lanczsos와 관련이 있음을 이해합니다.

EDIT2 : 내가 "테스트 중"인 행렬이 여러 개인 경우 변하지 않는 큰 하위 행렬이 있음을 알고 있습니다. 무시하거나 버릴 수 있습니까?


내 대답을 참조하십시오 : scicomp.stackexchange.com/a/1679/979 . 이것은 현재 연구 주제이며 현재 방법은 Lanczos보다 더 잘 할 수 있습니다. 특이 값을 계산하는 문제는 고유 값을 계산하는 문제와 같습니다.
dranxo

2
400x400 매트릭스! = 큼 "동일한 크기의 고유 값이 여러 개있을 것"인 경우 가장 큰 의미는 무엇입니까? numpy land : linalg.eig (random.normal (size = (400,400)))은 약 0.5 초가 걸립니다. 너무 느려요?
meawoppl

@meawoppl 네 반 초가 너무 느립니다. 이 계산을 여러 번 실행하는 다른 알고리즘의 일부이기 때문입니다.
power

1
@power gotcah. 고유 벡터에 대한 근사값이 있습니까? 즉, 마지막 솔루션과 비슷합니까, 아니면 그 구조에 대한 교육적인 추측을 할 수 있습니까?
meawoppl

답변:


14

행렬의 크기, 대규모의 경우 희소 여부 및 달성하려는 정확도에 따라 크게 달라집니다.

행렬이 너무 커서 단일 인수 분해를 수행 할 수없고 높은 정확도가 필요한 경우 Lanczsos 알고리즘이 가장 빠른 방법 일 것입니다. 비대칭의 경우 수치 적으로 불안정한 Arnoldi 알고리즘이 필요하므로 구현시이를 해결해야합니다 (치료가 다소 어색함).

문제가 아닌 경우 질문에보다 구체적인 정보를 제공하십시오. 그런 다음이 답변에 의견을 추가하면 업데이트하겠습니다.

편집 : [이것은 가장 큰 고유 값을 요구하는 이전 버전의 질문이었습니다.] 행렬이 작고 밀도가 높으므로 초기 값을 사용하여 B = (IA) ^ {-1}에서 Arnoldi 반복을 수행합니다 IA의 순열 된 삼각 인수 분해를 사용하여 B에 의한 저렴한 곱셈을 구할 수 있습니다 (또는 명시 적 역수를 계산하지만 인수 분해보다 3 배의 비용이 듭니다). B에 음의 고유 값이 있는지 테스트하려고합니다. A 대신 B를 사용하면 음의 고유 값이 훨씬 더 잘 분리되므로 하나가 있으면 빠르게 수렴해야합니다.

그러나 나는 당신의 문제가 어디에서 왔는지 궁금합니다. 비대칭 행렬은 일반적으로 복잡한 고유 값을 가지므로``최대 ''는 잘 정의되지 않습니다. 따라서 문제에 대해 더 많이 알아야합니다. 문제를 더 빠르고 안정적으로 해결하는 방법을 제안하는 데 도움이 될 수 있습니다.

Edit2 : Arnoldi와 함께 특정 관심 분야 를 얻는 것은 어렵습니다 . 절대적으로 가장 큰 고유 값을 안정적으로 얻으려면 원래 행렬을 사용하여 부분 공간 반복을 수행해야합니다. 작은 행렬에서는 QR 알고리즘보다 느리지 만 큰 행렬에서는 훨씬 빠릅니다.


가장 큰 고유 값이 1보다 큰지 테스트해야합니다. 정확도는 1e-11이어야합니다. "일반적인"행렬은 지금까지 386 x 386입니다. QR 인수 분해를 수행 할 수있었습니다. 그러나 훨씬 더 큰 것도 가능합니다. 나는 현재 Arnoldi 알고리즘에 대해 읽기 시작했습니다. Lanczsos와 관련이 있음을 이해합니다.
전원

이 정보는 귀하의 질문에 속하므로 편집하십시오. 또한 더 많은 정보를 추가하십시오 (고유 값이 왜 실제입니까? 또는 가장 큰 의미는 무엇입니까?)-내 답변 편집을 참조하십시오.
Arnold Neumaier

내가 명확하게 설명하지 못해서 죄송합니다. 또한 고유 값이 복잡하다는 것을 명확하게 설명하지 않았습니다. 고유 값의 크기가 1 이상인지 테스트하고 있습니다.
전원

1
이것은 이제 더 의미하지만 내 조리법을한다 작품 아니라 단지 가난한 고유 값이 실제 참> 1 인 경우. 반면에 새로운 정보는 선택의 여지가 거의 없지만 모든 고유 값을 계산한다는 것을 의미합니다. -추가 정보를 전달하려면 질문을 업데이트하십시오! (나는에이)1
Arnold Neumaier

1
내 답변의 편집 2 참조
Arnold Neumaier

7

전원 반복 댄 설명하는 무엇 (또는 전원 방법), 예 : 항상 속도이기는하지만, 수렴한다 .|λ1/λ|

경우 에 가까운 λ N ,이 느려질 수 있지만 사용할 수있는 추정을 그 주위에 얻을. 복잡해 보이지만 의사 코드로 구현되어 있습니다.λ1λ


1
만약 그렇다면 | λ (n−1) | = | λ (n) | ?
전원

@power이면 일반 Power Iteration이 수렴되지 않습니다. 외삽 법이 다른 고유 값을 얼마나 잘 구별 할 수 있는지 잘 모르겠습니다. 이에 대한 논문을 읽어야합니다.
Pedro

2
@power : 모든 경우에 대해 재고 그러면 전력 반복이 여전히 올바른 고유 값으로 수렴됩니다. 어쨌든 관심이없는듯한 고유 벡터는 λ nλ n - 1에 해당하는 고유 벡터의 선형 조합입니다 . |λ1|=|λ|λλ1
Pedro

이를 지원하는 학술 논문이나 서적에 대한 언급이 있습니까? \ lambda_ {n}이 복잡한 경우 어떻게해야합니까?
power

5
최대 계수의 여러 고유 값이 여러 개인 경우 전력 반복은 예외적 인 상황에서만 수렴됩니다. 일반적으로 다소 예측할 수없는 방식으로 진동합니다.
Arnold Neumaier

5

최근에 이것에 대한 좋은 연구가있었습니다. 새로운 접근 방식은 "랜덤 화 된 알고리즘"을 사용합니다.이 알고리즘은 가장 큰 고유 값에서 좋은 정확도를 얻기 위해 몇 번의 행렬 읽기만 필요합니다. 이는 높은 정확도에 도달하기 위해 여러 행렬-벡터 곱셈이 필요한 전력 반복과 대조적입니다.

새로운 연구에 대한 자세한 내용은 여기를 참조하십시오.

http://math.berkeley.edu/~strain/273.F10/martinsson.tygert.rokhlin.randomized.decomposition.pdf

http://arxiv.org/abs/0909.4061

이 코드는 당신을 위해 그것을 할 것입니다 :

http://cims.nyu.edu/~tygert/software.html

https://bitbucket.org/rcompton/pca_hgdp/raw/be45a1d9a7077b60219f7017af0130c7f43d7b52/pca.m

http://code.google.com/p/redsvd/

https://cwiki.apache.org/MAHOUT/stochastic-singular-value-decomposition.html

선택한 언어가 없으면 자신 만의 무작위 SVD를 쉽게 굴릴 수 있습니다. 행렬 벡터 곱셈과 상용 SVD 호출 만 있으면됩니다.


4

여기 에서 최대 고유 값을 계산하는 Jacobi-Davidson 알고리즘에 대한 알고리즘 소개를 찾을 수 있습니다.

이 논문에서 에서는 수학적 측면에 대해 살펴 본다. JD는 일반 (실수 또는 복소수) 행렬을 허용하며 고유 값 범위를 계산하는 데 사용될 수 있습니다.

여기에서 다양한 라이브러리 구현 JDQR 및 JDQZ (C 인터페이스 포함, R에서 링크 할 수 있어야 함)를 찾을 수 있습니다.


Jacobi-Davidson 방법이 실제 일반 행렬에 효과적이라는 명시 적으로 언급 된 문헌을 찾을 수 없었습니다.
전력

모든 기사가 명시 적으로 제한을 언급하지 않고 수렴 주장은 중요하지 않은 제한에 의존합니다.
Deathbreath

다음 은 JD에 대한 다른 설명입니다. 고려 된 행렬은 완전히 일반적입니다. 특별한 구조는 이용되지 않으며 에르 미트 (Hermitian) 매트릭스에 특정한 결과는 비교되고 대조된다. 예를 들어, 일반 매트릭스에 대한 수렴은 2 차이지만, 에르 미트 (Hermitian) 매트릭스에 대해서는 3 차이다.
Deathbreath

이것에 감사합니다. 일반 행렬에 대한 C 코드를 찾지 못하므로 직접 작성해야합니다. 알고리즘에 대한 링크는 Hermetian 행렬에만 해당되는 것 같습니다.
전원

1
@power 당신은 또한 표준 QR 구현이 실제적인 일반적인 매트릭스에 대해 수렴한다는 사실을 공개적으로 발견하지 못할 것입니다-그것은 열린 문제이며, 얼마 전까지 LAPACK의 QR 코드에 대한 반례가 발견되었습니다.
Federico Poloni

2

원래 게시물에서 다음과 같이 말합니다.

"저는 igraph R 패키지에서 ARPACK 인터페이스를 사용해 보았습니다. 그러나 매트릭스 중 하나에 오류가 발생했습니다."

오류에 대해 더 알고 싶습니다. 이 매트릭스를 어딘가에 공개적으로 사용할 수 있다면 ARPACK을 사용 해보고 싶을 것입니다.

위에서 읽은 내용을 바탕으로 ARPACK은 희소 행렬의 가장 큰 (또는 몇 개의 가장 큰) 고유 값을 추출하는 데 매우 효과적이라고 생각합니다. 좀 더 구체적으로 말하면, Arnoldi 방법 이이 경우에 잘 작동 할 것으로 기대하며 물론 ARPACK의 기반이됩니다.

관심 영역에 근접한 고유 값이있을 때 전력 방법의 느린 수렴은 위에서 언급했습니다. Arnoldi는 전력 방법 중 하나 대신 여러 벡터로 반복하여이를 개선합니다.


그때부터 내 작품을 찾을 수 있는지 볼 것이다. 나는 1 년 전에이 일을했습니다.
전원

0

그것은 아닙니다 가장 빠른 방법은 있지만, 상당히 빠른 방법은 정상화마다 몇 단계 만 반복 행렬과 (처음에 임의) 벡터를 칠하고,. 결국 그것은 가장 큰 고유 벡터로 수렴 될 것이고, 단일 단계에 대한 표준의 이득은 관련된 고유 값입니다.

가장 큰 고유 값이 다른 고유 값보다 큰 경우에 가장 효과적입니다. 다른 고유 값의 크기가 최대 값에 가까워지면 수렴하는 데 시간이 걸리고 수렴되었는지 확인하기 어려울 수 있습니다 .


1
그러나 Dan 감사합니다. 내 행렬에서 다른 고유 값 중 일부는 가장 큰 것과 같은 (동일하지는 않지만) 크기를 갖습니다. 방법이 Power Iteration 및 Rayleigh Quotient Iteration과 유사합니까? Batterson과 Smillie (1990)는 비대칭 행렬의 경우 Rayleigh Quotient Iteration이 수렴하지 않을 것이라고 썼다. Batterson, S., Smillie, J (1990) "비대칭 행렬에 대한 Rayleigh Quotient Iteration", 계산 수학, vol 55, num 191, P 169-178
power

다른 고유 값이 가장 큰 값과 동일한 크기를 갖는 경우 해당 값도 "가장 큰 값"이 아닌가?
ely

@EMS : 여전히 "가장 큰 고유 값"이지만 둘 이상의 최대 값이 있으면 수렴이 계속됩니다.
Dan

어떤 고유 값이 수렴되기를 원하는지 궁금합니다. Rayleigh quotient / Power 방법과 같은 것은 고유 한 고유 값이 가장 큰 경우를 의미합니다. 귀하의 질문에 가장 큰 고유 값을 찾도록 요청하지만 실제로는 문제에 대해 잘 정의되어 있지 않은 것 같습니다. 나는 글의 제목으로 잘못 인도되었습니다.
ely

-1

R 패키지 rARPACK이 저에게 효과적입니다. 그리고 그것은 희소 선형 대수의 표준 패키지 인 ARPACK에 대한 인터페이스 일뿐이므로 매우 빠릅니다 (몇 가지 고유 값과 고유 벡터 계산).


SciComp에 오신 것을 환영합니다! 질문에서 알 수 있듯이 ARPACK은 OP에서 작동하지 않으므로이 답변은 실제로 도움이되지 않습니다.
Christian Clason

@HoangDT이 질문은 rARPACK보다 우선합니다
power
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.