我想使用 LAPACK 例程使用完全压缩的矩形格式对矩阵进行因式分解和求逆,因为这只需要为对称的 nxn 矩阵存储 n(n+1)/2 个元素。到目前为止,我正在以“打包”格式设置矩阵并将其转换为调用例程 DTPTTF。但是,这需要第二个数组。我想直接以完全打包的矩形格式构建我的矩阵(以节省空间) - 是否有一个“寻址”函数可以为我提供第 i,j 个元素的位置?或者有人可以指出我的相关公式吗?
问问题
100 次
1 回答
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
于 2013-02-19T22:20:20.953 回答