Упакованное хранилище с функцией BLAS - PullRequest
0 голосов
/ 18 июня 2020

Я хочу вычислить A * x с помощью матрицы нижнего треугольника и x вектор. Например:

     1  0  0
A =  2  4  0
     3  5  6

с упакованным хранилищем

 A = (/ 1, 2, 3, 4, 5, 6/) 

и

 X = (/1, 1, 1/)

Теперь я хочу выполнить A * x с функцией BLAS, если я преобразую A вернуться к матрице 3x3? Если нет, не могли бы вы мне намекнуть? (Я знаю, что в памяти массива fortran, A хранится непрерывно)

1 Ответ

0 голосов
/ 18 июня 2020

решается проверкой: http://www.icl.utk.edu/~mgates3/docs/lapack.html

program main

  implicit none
  integer :: n
  real*8, allocatable, dimension(:) :: x
  real*8, allocatable, dimension(:) :: A

  n = 3
  allocate(A(n*(n+1)/2))
  allocate(x(n))
  A = 1.0d0
  x = 1.0d0

  ! x will be updated as A*x
  call dtpmv('L', 'N', 'N', n, A, x, 1)

  deallocate(A)
  deallocate(x)

end program main
...