Reverses the balancing of balance for the eigenvectors
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | n | Dimension of matrix |
||
integer, | intent(in) | :: | low | First nonzero row |
||
integer, | intent(in) | :: | high | Last nonzero row |
||
real(kind=double), | intent(in) | :: | scal(0:n-1) | Scaling data from balance |
||
real(kind=double), | intent(inout) | :: | eivec(0:n-1,0:n-1) |
subroutine balback(n, low, high, scal, eivec )
!+ Reverses the balancing of balance for the eigenvectors
integer,intent(in) :: n
!+ Dimension of matrix
integer,intent(in) :: low
!+ First nonzero row
integer,intent(in) :: high
!+ Last nonzero row
real(double), intent(in) :: scal(0:n-1)
!+ Scaling data from balance
real(double), intent(inout):: eivec(0:n-1,0:n-1)
!+ Input: n x n matrix of eigenvectors, as computed in qr2
!+ Output: Non-normalized eigenvectors of the original matrix
real(double) :: s
integer :: i,j,k
do i = low, high
s = scal(i)
do j = 0, n-1
eivec(i,j) = eivec(i,j) * s
enddo
enddo
do i = low-1, 0, -1
k = Int(scal(i))
if (k.ne.i) then
do j = 0, n-1
call RSWAP(eivec(i,j), eivec(k,j))
enddo
endif
enddo
do i = high + 1, n-1
k = Int(scal(i))
if (k.ne.i) then
do j = 0, n-1
call RSWAP(eivec(i,j), eivec(k,j))
enddo
endif
enddo
return
end subroutine balback