Eigenvalues of a tridiagonal matrix

In summary, tqli is a subroutine found on pg.1228 of numerical recipes in fortran. It is used to find the eigenvalues of a matrix.
  • #1
petr1243
13
0
Could some one please explain the logic behind the subroutine tqli(d,e,z) found on pg.1228 of numerical recipes in fortran. For this subroutine, d and e are one dimensional arrays and z is an optional multi-dimensional array(only used if also seeking for eigenvectors of matrix). The 3 modules, and the whole jacobi rotation technique has me confused. Thank you very much.
 
Technology news on Phys.org
  • #2
It looks like you're looking at the F90 version...
Have you looked at the online F77 version that provides some explanation?
 
  • #3
Are you referring to the explanation from indiana university? If it isn't, then could you please send me the link.
 
  • #4
Can you post the contents of the subroutine?

I've actually worked on this problem before - in C, however - but maybe I can help provide some input.
 
  • #5
I'm actually working on a tridiagonal matrix in which the diagonal term is some forumla in terms of integer n, and the super and sub diagonal terms are equivalent to one another(constant, independent of n). I would like to implement this subroutine into my program. I would prefer an explanation in f90, but if you can explain it in f77 then that's fine. Here is the f77 program: http://www.physics.louisville.edu/help/nr/bookfpdf/f11-3.pdf (on pg.474)

I am not too skilled in f77, so could you please be explicit in your explanation. Thank you for your time.
Here is the subroutine in f90, where the 3 modules are easily accessible on the net:

SUBROUTINE tqli(d,e,z)

USE nrtype; USE nrutil, ONLY : assert_eq, nrerror
USE nr, ONLY : pythag

IMPLICIT NONE

REAL(sp), DIMENSION(:), INTENT(inout) :: d, e
!REAL(sp), DIMENSION(:,:), OPTIONAL, INTENT(inout) :: z

INTEGER(i4b) :: i, iter, l, m, n, ndum
REAL(sp) :: b, c, dd, f, g, p, r, s
REAL(sp), DIMENSION(SIZE(e)) :: ff

n = assert_eq(SIZE(d), SIZE(e), 'tqli: n')
!IF(PRESENT(z)) ndum=assert_eq(n, SIZE(z, 1), SIZE(z, 2), 'tqli: ndum')
e(:)=EOSHIFT(e(:),1)
DO l=1, n
iter=0
iterate: DO
DO m=l, n-1
dd=ABS(d(m)) + ABS(d(m+1))
IF(ABS(e(m))+dd == dd) EXIT
END DO
IF (m==l) EXIT iterate
IF(iter == 30) CALL nrerror('too many iterations in tqli')
iter = iter+1
g=(d(l+1)-d(l))/(2.0_sp*e(l))
r = pythag(g, 1.0_sp)
g = d(m) - d(l) + e(l) / (g + SIGN(r, g))
s = 1.0
c = 1.0
p = 0.0
DO i = m-1, l, -1
f = s*e(i)
b = c*e(i)
r = pythag(f, g)
e(i+1) = r
IF(r == 0.0) THEN
d(i+1) = d(i+1) - p
e(m) = 0.0
CYCLE iterate
END IF
s = f/r
c = g/r
g = d(i + 1) - p
r = (d(i) - g) * s + 2.0_sp * c * b
p = s * r
d(i + 1) = g + p
g = c * r - b
!IF(PRESENT(z)) THEN
!ff(1:n) = z(1:n,i+1)
!z(1:n, i+1) = s*z(1:n,i) + c*ff(1:n)
!z(1:n,i) = c*z(1:n, i) - s*ff(1:n)
!END IF
END DO
d(l) = d(l) - p
e(l) = g
e(m) = 0.0
END DO iterate
END DO
END SUBROUTINE tqli

!I have commented z out, since I'm only interested in the eigenvalues of this matrix.
 
Last edited by a moderator:

1. What is a tridiagonal matrix?

A tridiagonal matrix is a square matrix where all elements are zero except for the main diagonal and the two diagonals directly above and below it.

2. What are eigenvalues?

Eigenvalues are scalar values that represent the solutions to a particular equation, known as the characteristic equation, that is associated with a given matrix. They are often used in linear algebra to understand the properties and behavior of a matrix.

3. How are eigenvalues of a tridiagonal matrix calculated?

The eigenvalues of a tridiagonal matrix can be calculated using various methods, such as the QR algorithm or the bisection method. These methods involve finding the roots of the characteristic equation associated with the matrix.

4. What are the applications of studying eigenvalues of a tridiagonal matrix?

Eigenvalues of a tridiagonal matrix have various applications in fields such as physics, engineering, and economics. They are used to solve differential equations, analyze stability in dynamical systems, and understand the behavior of Markov chains, among others.

5. Can a tridiagonal matrix have complex eigenvalues?

Yes, a tridiagonal matrix can have complex eigenvalues. This means that the solutions to the characteristic equation are complex numbers. However, for some specific types of tridiagonal matrices, the eigenvalues can be guaranteed to be real numbers.

Similar threads

  • Programming and Computer Science
Replies
18
Views
6K
  • Programming and Computer Science
Replies
12
Views
3K
  • Engineering and Comp Sci Homework Help
Replies
18
Views
2K
  • Quantum Physics
Replies
2
Views
957
Replies
7
Views
1K
  • Programming and Computer Science
Replies
21
Views
2K
  • Differential Equations
Replies
2
Views
1K
  • Programming and Computer Science
Replies
2
Views
1K
  • Linear and Abstract Algebra
Replies
1
Views
915
Replies
16
Views
1K
Back
Top