eigs
고유값(Eigenvalue)과 고유벡터(Eigenvector)의 부분 집합
구문
설명
는 하나 이상의 이름-값 쌍의 인수로 추가 옵션을 지정합니다. 예를 들어, d
= eigs(A
,k
,sigma
,Name,Value
)eigs(A,k,sigma,'Tolerance',1e-3)
은 알고리즘에 대한 수렴 허용오차를 조정합니다.
예제
희소 행렬의 최대 고유값
행렬 A = delsq(numgrid('C',15))
는 (0 8) 구간에 적절히 분산된 고유값을 갖는 양의 정부호 대칭 행렬입니다. 가장 큰 고유값 여섯 개를 계산합니다.
A = delsq(numgrid('C',15));
d = eigs(A)
d = 6×1
7.8666
7.7324
7.6531
7.5213
7.4480
7.3517
특정 개수의 가장 큰 고유값을 계산하려면 두 번째 입력값을 지정하십시오.
d = eigs(A,3)
d = 3×1
7.8666
7.7324
7.6531
희소 행렬의 최소 고유값
행렬 A = delsq(numgrid('C',15))
는 (0 8) 구간에 적절히 분산된 고유값을 갖는 양의 정부호 대칭 행렬입니다. 가장 작은 고유값 다섯 개를 계산합니다.
A = delsq(numgrid('C',15)); d = eigs(A,5,'smallestabs')
d = 5×1
0.1334
0.2676
0.3469
0.4787
0.5520
함수 핸들을 사용하는 고유값
0이 아닌 요소의 밀도가 25% 정도인 희소 형식의 1500×1500 확률 행렬을 만듭니다.
n = 1500; A = sprand(n,n,0.25);
행렬의 LU 분해를 수행하여 A(p,:) = L*U
를 충족하는 치환 벡터 p
를 반환합니다.
[L,U,p] = lu(A,'vector');
벡터 입력값 x
를 받고 LU 분해의 결과를 사용하여 사실상 A\x
를 반환하는 함수 핸들 Afun
을 만듭니다.
Afun = @(x) U\(L\(x(p)));
eigs
와 함께 함수 핸들 Afun
을 사용하여 가장 작은 고유값 여섯 개를 계산합니다. 두 번째 입력값은 A
의 크기입니다.
d = eigs(Afun,1500,6,'smallestabs')
d = 6×1 complex
0.1423 + 0.0000i
0.4859 + 0.0000i
-0.3323 - 0.3881i
-0.3323 + 0.3881i
0.1019 - 0.5381i
0.1019 + 0.5381i
고유값의 유형
west0479
는 켤레 고유값의 실수 쌍과 복소수 쌍을 모두 포함한 실수 값의 479×479 희소 행렬입니다.
west0479
행렬을 불러온 후 eig
를 사용하여 모든 고유값을 계산하고 플로팅하십시오. 고유값이 복소수이므로 plot
에서는 실수부를 x 좌표로, 허수부를 y 좌표로 각각 자동으로 사용합니다.
load west0479 A = west0479; d = eig(full(A)); plot(d,'+')
고유값은 실수 선(x축)을 따라 특히 원점 근처에 모여 있습니다.
eigs
에는 각기 다른 유형의 최대 고유값이나 최소 고유값을 선택할 수 있는 sigma
에 대한 여러 가지 옵션이 있습니다. sigma
에서 사용할 수 있는 각각의 옵션에 대해 고유값을 계산하고 플로팅합니다.
figure plot(d, '+') hold on la = eigs(A,6,'largestabs'); plot(la,'ro') sa = eigs(A,6,'smallestabs'); plot(sa,'go') hold off legend('All eigenvalues','Largest magnitude','Smallest magnitude') xlabel('Real axis') ylabel('Imaginary axis')
figure plot(d, '+') hold on ber = eigs(A,4,'bothendsreal'); plot(ber,'r^') bei = eigs(A,4,'bothendsimag'); plot(bei,'g^') hold off legend('All eigenvalues','Both ends real','Both ends imaginary') xlabel('Real axis') ylabel('Imaginary axis')
figure plot(d, '+') hold on lr = eigs(A,3,'largestreal'); plot(lr,'ro') sr = eigs(A,3,'smallestreal'); plot(sr,'go') li = eigs(A,3,'largestimag','SubspaceDimension',45); plot(li,'m^') si = eigs(A,3,'smallestimag','SubspaceDimension',45); plot(si,'c^') hold off legend('All eigenvalues','Largest real','Smallest real','Largest imaginary','Smallest imaginary') xlabel('Real axis') ylabel('Imaginary axis')
'smallestabs'
고유값과 'smallestreal'
고유값 간의 차이점
양의 정부호 대칭 희소 행렬을 생성합니다.
A = delsq(numgrid('C', 150));
A
를 이용한 크릴로프(Krylov) 방법을 차용하는 'smallestreal'
로 실수부 기준으로 최소 고유값 여섯 개를 계산합니다.
tic
d = eigs(A, 6, 'smallestreal')
d = 6×1
0.0013
0.0025
0.0033
0.0045
0.0052
0.0063
toc
Elapsed time is 1.717946 seconds.
A
의 역행렬을 이용한 크릴로프 방법을 차용하는 'smallestabs'
로 동일한 고유값을 계산합니다.
tic
dsm = eigs(A, 6, 'smallestabs')
dsm = 6×1
0.0013
0.0025
0.0033
0.0045
0.0052
0.0063
toc
Elapsed time is 0.251762 seconds.
고유값은 0 근처에 모여 있습니다. 'smallestreal'
계산에서는 고유값 간 간격이 너무 작아 A
를 사용하여 수렴하는 것이 쉽지 않습니다. 반대로, 'smallestabs'
옵션에서는 A
의 역행렬을 사용하는데, A
의 고유값의 역은 고유값 간 간격이 훨씬 더 크기 때문에 계산하기가 더욱 쉽습니다. 이러한 성능 향상은 'smallestreal'
에서는 불필요한 과정인 A
분해에 드는 계산 과정이 생략되기에 일어납니다.
고유값에 근접한 Sigma 값
고유값과 거의 같은 숫자형 sigma
값에 가까운 고유값을 계산합니다.
행렬 A = delsq(numgrid('C',30))
은 632 크기의 양의 정부호 대칭 행렬로, (0 8) 구간에 적절히 분산된 고유값을 갖지만 18개의 고유값이 4.0에서 반복됩니다. 4.0에 가까운 고유값을 계산하려면 함수 호출 eigs(A,20,4.0)
을 시도하는 것이 합리적입니다. 그러나 이 호출은 A - 4.0*I
의 역행렬에서 가장 큰 고유값을 계산합니다. 여기서 I
는 단위 행렬입니다. 4.0이 A
의 고유값이기 때문에 이 행렬은 특이 행렬이며, 따라서 역행렬을 갖지 않습니다. eigs
는 실패하고 오류 메시지를 만듭니다. sigma
의 숫자형 값은 고유값과 정확히 같을 수 없습니다. 대신, 이 고유값을 구하기 위해서는 4.0에 가깝지만 4와 동일하지 않은 sigma
값을 사용해야 합니다.
먼저 eig
를 사용하여 모든 고유값을 계산하고, 이후 eigs
를 사용하여 4 - 1e-6에 가장 가까운 고유값 20개를 계산한 후, 두 계산 결과를 비교합니다. 각 방법으로 계산된 고유값을 플로팅합니다.
A = delsq(numgrid('C',30));
sigma = 4 - 1e-6;
d = eig(A);
D = sort(eigs(A,20,sigma));
plot(d(307:326),'ks') hold on plot(D,'k+') hold off legend('eig(A)','eigs(A,20,sigma)') title('18 Repeated Eigenvalues of A')
치환된 촐레스키 인수(Cholesky Factor)의 고유값
0이 아닌 요소의 비율이 적은 희소 형식의 확률 행렬 A
B
를 만듭니다.
B = sprandn(1e3,1e3,0.001) + speye(1e3); B = B'*B; A = sprandn(1e3,1e3,0.005); A = A+A';
세 개의 출력값을 사용해 행렬 B
의 촐레스키 분해(Cholesky Decomposition)를 수행하여 치환 벡터 s
와 테스트 값 p
를 반환합니다.
[R,p,s] = chol(B,'vector');
p
p = 0
p
가 0이므로 B
는 B(s,s) = R'*R
을 충족하는 양의 정부호 대칭 행렬입니다.
A
와 R
을 포함하는 일반 고유값 문제의 최대 고유값과 고유벡터 여섯 개를 각각 계산합니다. R
이 B
의 촐레스키 인수(Cholesky Factor)이므로 'IsCholesky'
를 true
로 지정하십시오. 또한 B(s,s) = R'*R
이며, 고로 R = chol(B(s,s))
이므로 치환 벡터 s
를 'CholeskyPermutation'
의 값으로 사용하십시오.
[V,D,flag] = eigs(A,R,6,'largestabs','IsCholesky',true,'CholeskyPermutation',s); flag
flag = 0
flag
가 0이므로 모든 고유값이 수렴됩니다.
입력 인수
A
— 입력 행렬
행렬
입력 행렬로, 정사각 행렬로 지정됩니다. A
는 항상 그렇지는 않지만 일반적으로 큰 희소 행렬입니다.
A
가 대칭 행렬이면 eigs
는 그에 특화된 알고리즘을 사용합니다. A
가 거의 대칭에 가까우면 eigs
를 호출하기 전에 A = (A+A')/2
를 사용하여 A
를 대칭 행렬로 만드는 것을 고려해 보십시오. 이렇게 하면 eigs
가 복소수 고유값 대신 실수 고유값을 계산합니다.
데이터형: double
복소수 지원 여부: 예
B
— 입력 행렬
행렬
입력 행렬로, A
와 같은 크기의 정사각 행렬로 지정됩니다. B
가 지정된 경우 eigs
는 일반 고유값 문제 A*V = B*V*D
의 해를 구합니다.
B
가 양의 정부호 대칭 행렬이면 eigs
는 그에 특화된 알고리즘을 사용합니다. B
가 거의 양의 정부호 대칭 행렬에 가까우면 eigs
를 호출하기 전에 B = (B+B')/2
를 사용하여 B
를 대칭 행렬로 만드는 것을 고려해 보십시오.
A
가 스칼라인 경우 B
를 빈 행렬 eigs(A,[],k)
로 지정하여 표준 고유값 문제의 해를 구하고 B
와 k
를 구별할 수 있습니다.
데이터형: double
복소수 지원 여부: 예
k
— 계산할 고유값 개수
스칼라
계산할 고유값 개수로, 양의 정수 스칼라로 지정됩니다. k
가 size(A,2)
보다 크면 eigs
는 유효한 최댓값 k = size(A,2)
를 대신 사용합니다.
예: eigs(A,2)
는 A
에서 가장 큰 고유값 두 개를 반환합니다.
sigma
— 고유값의 유형
'largestabs'
(디폴트 값) | 'smallestabs'
| 'largestreal'
| 'smallestreal'
| 'bothendsreal'
| 'largestimag'
| 'smallestimag'
| 'bothendsimag'
| 스칼라
고유값의 유형으로, 다음 표에 있는 값 중 하나로 지정됩니다.
sigma | 설명 | sigma(R2017a 이하) |
---|---|---|
스칼라(실수 또는 복소수, 0 포함) | 숫자 | 변경 없음 |
| 최대 크기의 고유값입니다. | 'lm' |
| 최소 크기의 고유값입니다. | 'sm' |
| 실수부 기준 최대 고유값입니다. | 'lr' , 'la' |
| 실수부 기준 최소 고유값입니다. | 'sr' , 'sa' |
| 실수부 기준으로 최대 및 최소 고유값 | 'be' |
비대칭 문제의 경우, sigma
는 다음과 같습니다.
sigma | 설명 | sigma(R2017a 이하) |
---|---|---|
| 허수부 기준 최대 고유값입니다. | A 가 복소수이면 'li' . |
| 허수부 기준 최소 고유값입니다. | A 가 복소수이면 'si' . |
| 허수부 기준으로 최대 및 최소 고유값 | A 가 실수 행렬인 경우 'li' . |
예: eigs(A,k,1)
은 1에 가장 가까운 고유값 k
개를 반환합니다.
예: eigs(A,k,'smallestabs')
은 가장 작은 고유값 k
개를 반환합니다.
데이터형: double
| char
| string
opts
— options 구조체
구조체
options 구조체로, 다음 표의 필드 중 하나 이상을 포함하는 구조체로 지정됩니다.
참고
옵션을 지정하는 데 options 구조체를 사용하는 것은 권장되지 않습니다. 대신 이름-값 쌍을 사용하십시오.
옵션 필드 | 설명 | 이름-값 쌍 |
---|---|---|
issym |
| 'IsFunctionSymmetric' |
tol | 수렴 허용오차. | 'Tolerance' |
maxit | 최대 반복 횟수입니다. | 'MaxIterations' |
p | Lanczos 기저 벡터 개수입니다. | 'SubspaceDimension' |
v0 | 시작 벡터입니다. | 'StartVector' |
disp | 진단 정보 표시 수준. | 'Display' |
fail | 출력값에서 수렴되지 않은 고유값 처리. | 'FailureTreatment' |
spdB | B 가 양의 정부호 대칭 행렬입니까? | 'IsSymmetricDefinite' |
cholB |
| 'IsCholesky' |
permB | 희소 | 'CholeskyPermutation' |
예: opts.issym = 1, opts.tol = 1e-10
은 필드 issym
과 tol
의 값이 설정된 구조체를 생성합니다.
데이터형: struct
Afun
— 행렬 함수
함수 핸들
행렬 함수로, 함수 핸들로 지정됩니다. 함수 y = Afun(x)
는 다음 sigma
입력값에 따라 적절한 값을 반환해야 합니다.
A*x
—sigma
가 지정되지 않거나'smallestabs'
이외의 텍스트 옵션인 경우.A\x
—sigma
가0
이거나'smallestabs'
인 경우(A-sigma*I)\x
—sigma
가 0이 아닌 스칼라인 경우(표준 고유값 문제)(A-sigma*B)\x
—sigma
가 0이 아닌 스칼라인 경우(일반 고유값 문제)
예를 들어, 다음 Afun
은 sigma = 'smallestabs'
을 사용하여 eigs
를 호출할 때 동작합니다.
[L,U,p] = lu(A,'vector'); Afun = @(x) U\(L\(x(p))); d = eigs(Afun,100,6,'smallestabs')
일반 고유값 문제의 경우에는 다음과 같이 행렬 B
를 추가하십시오(B
는 함수 핸들로 나타낼 수 없음).
d = eigs(Afun,100,B,6,'smallestabs')
'IsFunctionSymmetric'
(또는 opts.issym
)이 지정되지 않으면 A
가 비대칭 행렬로 가정됩니다. 'IsFunctionSymmetric'
을 true
로 설정하면 eigs
가 복소수 고유값 대신 실수 고유값을 계산합니다.
함수 Afun
에 추가 파라미터를 제공하는 방법에 대한 자세한 내용은 함수를 파라미터화하기 항목을 참조하십시오.
팁
eigs
호출에 'Display'
옵션을 설정하여 Afun
에서 예상되는 출력값을 확인할 수 있습니다.
n
— Afun
으로 표현된 정사각 행렬의 크기
스칼라
Afun
으로 표현된 정사각 행렬 A
의 크기로, 양의 정수 스칼라로 지정됩니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: d = eigs(A,k,sigma,'Tolerance',1e-10,'MaxIterations',100)
은 수렴 허용오차를 완화하고 더 적은 반복 횟수를 사용합니다.
Tolerance
— 수렴 허용오차
1e-14
(디폴트 값) | 양의 실수형 스칼라
수렴 허용오차로, 'Tolerance'
과 함께 양의 실수 숫자형 스칼라가 쉼표로 구분되어 지정됩니다.
예: s = eigs(A,k,sigma,'Tolerance',1e-3)
MaxIterations
— 최대 알고리즘 반복 횟수
300
(디폴트 값) | 양의 정수
최대 알고리즘 반복 횟수로, 'MaxIterations'
와 함께 양의 정수가 쉼표로 구분되어 지정됩니다.
예: d = eigs(A,k,sigma,'MaxIterations',350)
SubspaceDimension
— 크릴로프 부분공간의 최대 크기
max(2*k,20)
(디폴트 값) | 음이 아닌 정수
크릴로프 부분공간의 최대 크기로, 'SubspaceDimension'
과 함께 음이 아닌 정수가 쉼표로 구분되어 지정됩니다. 'SubspaceDimension'
값은 실수 대칭 문제의 경우 k + 1
보다 크거나 같아야 하고, 그렇지 않으면 k + 2
보다 크거나 같아야 합니다. k
는 고유값 개수입니다.
권장되는 값은 p >= 2*k
이거나, 실수 비대칭형 문제의 경우 p >= 2*k+1
입니다. 'SubspaceDimension'
값을 지정하지 않으면 디폴트 알고리즘은 적어도 20
개의 Lanczos 벡터를 사용합니다.
eigs
가 수렴에 실패하는 문제의 경우에는 'SubspaceDimension'
값을 증가시키면 수렴 동작이 개선될 수 있습니다. 그러나, 값을 너무 많이 늘리면 메모리 문제를 초래할 수 있습니다.
예: d = eigs(A,k,sigma,'SubspaceDimension',25)
StartVector
— 초기 시작 벡터
확률 벡터 (디폴트 값) | 벡터
초기 시작 벡터로, 'StartVector'
와 함께 숫자형 벡터가 쉼표로 구분되어 지정됩니다.
다른 확률 시작 벡터를 지정하는 1차적인 이유는 벡터를 생성하는 데 사용되는 난수 스트림을 제어해야 할 때입니다.
참고
eigs
는 프라이빗 난수 스트림을 사용하여 재현 가능한 방식으로 시작 벡터를 선택합니다. 난수 시드값을 변경해도 시작 벡터에는 영향을 주지 않습니다.
예: d = eigs(A,k,sigma,'StartVector',randn(m,1))
에서는 전역 난수 스트림에서 값을 도출하는 난수 시작 벡터를 사용합니다.
데이터형: double
FailureTreatment
— 수렴되지 않는 고유값의 처리 방식
'replacenan'
(디폴트 값) | 'keep'
| 'drop'
수렴되지 않는 고유값의 처리 방식으로, 'FailureTreatment'
와 함께 'replacenan'
, 'keep'
또는 'drop'
옵션 중 하나가 쉼표로 구분되어 지정됩니다.
'FailureTreatment'
의 값에 따라 eigs
함수가 출력값에 수렴되지 않는 고유값을 표시하는 방식이 결정됩니다.
옵션 | 출력값에 미치는 영향 |
---|---|
| 수렴되지 않은 고유값을 |
| 출력값에 수렴되지 않은 고유값을 포함합니다. |
| 출력값에서 수렴되지 않은 고유값을 제거합니다. 이 옵션을 설정하면 |
예: d = eigs(A,k,sigma,'FailureTreatment','drop')
은 출력값에서 수렴되지 않은 고유값을 제거합니다.
데이터형: char
| string
Display
— 진단 정보 표시에 대한 토글
false
또는 0
(디폴트 값) | true
또는 1
진단 정보 표시에 대한 토글로, 'Display'
와 함께 숫자형 또는 논리값 1
(true
)이나 0
(false
)이 쉼표로 구분되어 지정됩니다. true
또는 1
값을 지정하면 계산 중에 진단 정보가 표시됩니다.
Afun
에 대한 옵션IsFunctionSymmetric
— Afun
행렬의 대칭
true
또는 1
| false
또는 0
Afun
행렬의 대칭 여부로, 'IsFunctionSymmetric'
과 함께 숫자형 또는 논리값 1
(true
)이나 0
(false
)이 쉼표로 구분되어 지정됩니다.
이 옵션은 Afun
이 입력 벡터에 적용하는 행렬이 대칭 행렬인지 여부를 지정합니다. eigs
가 대칭 행렬에 대해 특화된 알고리즘을 사용하고 실수 고유값을 반환하도록 하려면 true
또는 1
로 값을 지정하십시오.
A*V = B*V*D
에 대한 옵션IsCholesky
— B
에 대한 촐레스키 분해 여부 토글
true
또는 1
| false
또는 0
B
에 대한 촐레스키 분해 여부 토글로, 'IsCholesky'
와 함께 숫자형 또는 논리값 1
(true
)이나 0
(false
)이 쉼표로 구분되어 지정됩니다.
이 옵션은 호출 eigs(A,B,___)
에 있는 행렬 B
의 입력값이 실제로 R = chol(B)
에서 생성된 촐레스키 인수 R
인지 여부를 지정합니다.
참고
sigma
가 'smallestabs'
또는 숫자형 스칼라인 경우에는 이 옵션을 사용하지 마십시오.
CholeskyPermutation
— 촐레스키 치환 벡터
1:n
(디폴트 값) | 벡터
촐레스키 치환 벡터로, 'CholeskyPermutation'
과 함께 숫자형 벡터가 쉼표로 구분되어 지정됩니다. chol(B(permB,permB))
에 따라 인수분해하기 전에 희소 행렬 B
가 다시 정렬된 경우 치환 벡터 permB
를 지정하십시오.
[R,p,permB] = chol(B,'vector')
와 같이 희소 행렬에 출력값을 3개 갖는 chol
구문을 사용하여 permB
를 직접 얻을 수도 있습니다.
참고
sigma
가 'smallestabs'
또는 숫자형 스칼라인 경우에는 이 옵션을 사용하지 마십시오.
IsSymmetricDefinite
— B
의 양의 정부호 대칭 행렬 여부를 전환하는 토글
true
또는 1
| false
또는 0
B
의 양의 정부호 대칭 행렬 여부를 전환하는 토글로, 'IsSymmetricDefinite'
와 함께 숫자형 또는 논리값 1
(true
)이나 0
(false
)이 쉼표로 구분되어 지정됩니다. B
가 양의 정부호 대칭 행렬임을 즉, 이것이 순양수 고유값으로 구성된 대칭 행렬임을 알고 있으면 true
또는 1
을 지정하십시오.
B
가 양의 준정부호 행렬이면(일부 고유값은 0임) 'IsSymmetricDefinite'
를 true
또는 1
로 지정할 때 eigs
함수는 B
가 양의 정부호 대칭 행렬일 때 사용하는 전문 알고리즘과 같은 알고리즘을 사용하게 됩니다.
참고
이 옵션을 사용하려면 sigma
의 값이 숫자형이거나 'smallestabs'
여야 합니다.
출력 인수
d
— 고유값
열 벡터
고유값으로, 열 벡터로 반환됩니다. d
는 sigma
의 값에 따라 다르게 정렬됩니다.
| 출력값 정렬 |
---|---|
| 크기 기준 내림차순 정렬 |
| 실수부 기준 내림차순 정렬 |
| 허수부 기준 내림차순 정렬 |
| 크기 기준 오름차순 정렬 |
| 실수부 기준 오름차순 정렬 |
| 허수부 기준 오름차순 정렬 |
| 허수부의 절댓값 기준 내림차순 정렬 |
V
— 고유벡터
행렬
고유벡터로, 행렬로 반환됩니다. V
의 열은 D
의 주대각선상에 있는 고유값에 대응합니다. V
의 형식과 정규화는 다음과 같이 입력 인수의 조합에 따라 달라집니다.
[V,D] = eigs(A)
는 행렬V
를 반환합니다. 행렬의 각 열은A*V = V*D
를 충족하는A
의 우고유벡터입니다.V
내 고유벡터는 각각의 2-노름이 1이 되도록 정규화됩니다.A
가 대칭 행렬이면 고유벡터V
는 정규 직교 벡터입니다.[V,D] = eigs(A,B)
는 각 열이A*V = B*V*D
를 충족하는 일반화된 우고유벡터인 행렬,V
를 반환합니다. 각 고유벡터의 2-노름은 반드시 1일 필요가 없습니다.B
가 양의 정부호 대칭 행렬이면V
의 고유벡터는 각각의B
-노름이 1이 되도록 정규화됩니다.A
도 대칭 행렬이면 고유벡터는B
-정규 벡터입니다.
컴퓨터, MATLAB® 릴리스 또는 파라미터(예: 시작 벡터 및 부분공간 차원)가 다르면, 같지는 않지만 수치적으로는 정확한 고유벡터가 생성될 수 있습니다.
실수 고유벡터의 경우, 고유벡터의 기호가 달라질 수 있습니다.
복소수 고유벡터의 경우, 크기가 1인 복소수와 고유벡터를 곱할 수 있습니다.
중복 고유값의 경우, 선형 결합을 통해 고유벡터를 다시 결합할 수 있습니다. 예를 들어, Ax = λx이고 Ay = λy인 경우 A(x+y) = λ(x+y)이므로, x+y도 A의 고유벡터입니다.
D
— 고유값 행렬
행렬
고유값 행렬로, 주대각선에 고유값이 있는 대각 행렬로 반환됩니다.
flag
— 수렴 플래그
0
| 1
수렴 플래그로, 0
또는 1
로 반환됩니다. 값이 0
이면 모든 고유값이 수렴되었음을 나타냅니다. 그렇지 않으면 일부 고유값이 수렴되지 않았음을 나타냅니다.
이 수렴 플래그 출력값을 사용하면 실패한 수렴에 대한 경고가 표시되지 않습니다.
팁
eigs
는 프라이빗 난수 스트림을 사용하는 디폴트 시작 벡터를 생성하여 매 실행마다 같은 결과를 재현할 수 있게 합니다.eigs
를 호출하기 전에rng
를 사용하여 난수 생성기 상태를 설정해도 출력값에는 영향을 주지 않습니다.작고 조밀한 행렬의 고유값 몇 개를 구하자고자 한다면
eigs
를 사용하는 것이 그렇게 효율적인 방법은 아닙니다. 이러한 문제에는eig(full(A))
를 사용하는 것이 더 빠를 수 있습니다. 예를 들어, 500×500 행렬에서 고유값 세 개를 구하는 것은 비교적 작은 문제이며eig
를 사용하여 쉽게 처리할 수 있습니다.eigs
가 어떤 행렬에 대해 수렴하지 않는 경우'SubspaceDimension'
값을 늘려 Lanczos 기저 벡터의 개수를 늘려보십시오. 부차적인 옵션으로 최대 반복 횟수,'MaxIterations'
, 수렴 허용오차'Tolerance'
를 조정하는 것도 수렴 동작에 도움이 될 수 있습니다.
참고 문헌
[1] Stewart, G.W. "A Krylov-Schur Algorithm for Large Eigenproblems." SIAM Journal of Matrix Analysis and Applications. Vol. 23, Issue 3, 2001, pp. 601–614.
[2] Lehoucq, R.B., D.C. Sorenson, and C. Yang. ARPACK Users' Guide. Philadelphia, PA: SIAM, 1998.
확장 기능
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
이 함수는 분산 배열을 완전히 지원합니다. 자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2017b: 동작 및 알고리즘 변경 사항
출력값의 정렬 순서 변경
이제
eigs
는sigma
의 값에 따라 출력값을 정렬합니다. 예를 들어, 명령eigs(A,k,'largestabs')
는k
개의 고유값을 크기를 기준으로 내림차순으로 정렬하여 생성합니다.이전에는
eigs
에 의해 생성되는 출력값의 정렬 순서가 보장되지 않았습니다.재현성
이제
eigs
를 연속해서 여러 번 호출하면 동일한 결과가 생성됩니다. 이 동작을 변경하려면'StartVector'
를 확률 벡터로 설정하십시오.표시
2
의 표시 값이 더 이상 시간 측정 정보를 반환하지 않습니다. 그 대신eigs
는2
의 값을1
의 값과 동일하게 취급합니다.'Display'
옵션에 의해 표시되는 메시지도 변경되었습니다. 이제 메시지가 Ritz 값 대신 각 반복의 잔차를 표시합니다.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)