Schur decomposition and QR algorithm for eigenvalue problems

조회 수: 17 (최근 30일)
Ruye Wang
Ruye Wang 2016년 2월 24일
댓글: Ruye Wang 2016년 3월 1일
I created a 5x5 complex matrix with one real eigenvalue and two complex conjugate eigenvalue pairs by this piece of code:
N=5;
A=zeros(5);
A(1,1)=3;
A(2,2)=1+sqrt(-1);
A(3,3)=1-sqrt(-1);
A(4,4)=2+sqrt(-1);
A(5,5)=2-sqrt(-1);
V=rand(N);
A=V*A*inv(V)
I then used [U T]=schur(A) to get a strictly upper triangular matrix T with all 5 eigenvalues (the two conjugate pairs as well as the real eigenvalue) on its diagonal. I then used the QR algorithm trying to convert A into an upper triangular matrix: [Q R]=qr(A); A=R*Q. The iteration converges to a block (quasi) upper triangular matrix with two 2x2 blocks as well as the real eigenvalue along the diagonal. The eigenvalues of the two 2x2 blocks are of course the two conjugate eigenvalue pairs of A. However, the QR algorithm can never produce a strictly upper triangular matrix as the Schur function did. My question is, how does the Schur algorithm in Matlab generate the triangular matrix? The Schur decomposition theorem (e.g., https://en.wikipedia.org/wiki/Schur_decomposition) only states such a upper triangular matrix exists, but it does not provide any specific algorithm for actually generating this matrix. What algorithm does the Matlab function schur use?

답변 (1개)

Cam Salzberger
Cam Salzberger 2016년 2월 29일
Hello Ruye,
I understand that you are wondering how MATLAB could produce an upper-triangular matrix with Schur decomposition, but not with QR decomposition. This is understandable, given QR decomposition is commonly used to help calculate the Schur decomposition.
I believe that a good place to start looking at Schur algorithms is in the LAPACK user guide . There is a section on Schur Factorization which overviews a method that can be used to compute the decomposition.
I hope this helps.
-Cam
  댓글 수: 1
Ruye Wang
Ruye Wang 2016년 3월 1일
Hi Cam,
Thank you very much for answering my question. Following your link, I read the explanation, however, I feel my question is not quite addressed.
I also realize there is a function rsf2csf in Matlab, which converts a real Schur form ("quasi-upper-triangular matrix" with 2x2 blocks for complex conjugate eigenvalue pairs, if exist, on the diagonal) to complex Schur form (upper-triangular matrix with all eigenvalues including conjugate pairs on the diagonal), which is probably used inside the function schur. However, I cannot find any information about this function, in terms of what specific algorithm it uses to do the conversion. Could you please point me to any documentation about this rsf2csf? Thanks again!
Ruye

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Computations에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by