lapack - 寻址完全打包的矩形格式

时间:2013-02-17 23:05:02

标签: lapack

我想使用LAPACK例程来使用完全打包的矩形格式进行矩阵的因式分解和反演,因为这只需要为对称nxn矩阵存储n(n + 1)/ 2个元素。到目前为止,我正在以'打包'格式设置矩阵并将其转换为调用例程DTPTTF。但是,这需要第二个阵列。我想用完全打包的矩形格式直接构建矩阵 (以节省空间) - 是否有一个'寻址'函数,它将给我第i,第j个元素的位置?或者有人能指出我的相关公式吗?

1 个答案:

答案 0 :(得分:0)

部分回答我自己的问题:检查DTPTTF的源代码和其中给出的例子,我已经为四个可能的星座中的一个(我唯一需要的星座)制定了地址,即uplo ='L'和trans ='N'。下面是我的fortran函数:

! ====================================     ! returns address for RFP format
  integer function ijfprf( ii, jj, n )     ! for row jj and column ii
! ====================================     ! for UPLO = 'L' and TRANSR = 'N' only!

  implicit none
  integer, intent(in) :: ii, jj, n
  integer             :: i, j, k, n1, k1

  if( ii <= jj ) then
      i = ii; j = jj
  else
      i = jj; j = ii
  end if
  k = n/2
  if( mod(n,2) == 0 ) then                     ! n even
      n1 = n + 1
      if( i <= k ) then
          ijfprf = 1 + (i - 1) * n1 + j
      else
          ijfprf = ( j - k - 1 ) * n1 + i - k
      end if
  else                                         ! n odd
      k1 = k + 1
      if( i > k1 ) then
          ijfprf = ( j - k1 ) * n + i - k1
      else
          ijfprf = ( i - 1 ) * n + j
      end if
  end if

  return
  end function ijfprf