subroutine extrapolate_data(N_data, data, pt2, output)
  implicit none
  BEGIN_DOC
  ! Extrapolate the data to the FCI limit
  END_DOC
  integer, intent(in)            :: N_data
  double precision, intent(in)   :: data(N_data)
  double precision, intent(in)   :: pt2(N_data)
  double precision, intent(out)  :: output(N_data)

  double precision :: data_rev(N_data), pt2_rev(N_data)
  integer :: ifit, i,j
  double precision :: ab(2), x(N_data,2), x_inv(2,N_data), y(N_data)

  do i=1,N_data
    data_rev(N_data+1-i) = data(i)
    pt2_rev(N_data+1-i) = pt2(i)
  enddo

  do i=1,N_data
    y(i) = data_rev(i)
    x(i,1) = 1.d0
    x(i,2) = pt2_rev(i)
  enddo
  do ifit=2,N_data
    call get_pseudo_inverse(x,size(x,1),ifit,2,x_inv,size(x_inv,1),1.d-10)
    ab = matmul(x_inv(1:2,1:ifit),y(1:ifit))
    output(ifit) = ab(1)
  enddo

end
