Я пытаюсь запустить простую программу с библиотекой LAPACK с помощью FORtran 95. Я решение системы линейных уравнений, как: Ax=B
Сегментации в Фортране LAPACK рутины
A = [4 -2 3]
[1 3 -4]
[3 1 2]
B=[ 1
-7
5]
x
является вектор решения
Solution is
x = [-1
2
3]
Вот код. Я использую две подпрограммы: SGETRF и SGETRS. Первая функция SGETRF
вычисляет LU-декомпозицию матрицы, а вторая подпрограмма решает систему уравнений.
program main
implicit none
integer :: i,j,info1,info2
integer :: neqn ! number of equations
real,dimension(3,3) :: coeff
real,dimension (3,1) :: lhs
real,dimension (3,1) :: ipiv
neqn=3
coeff = reshape((/4,1,3,-2,3,1,3,-4,2/),(/3,3/))
lhs = reshape ((/1,-7,5/),(/3,1/))
call SGETRF (neqn,1,coeff,neqn,ipiv,infO1)
if (info1==0) then
call SGETRS ('N',neqn,1,coeff,neqn,ipiv,lhs,neqn,info2) !Error
else
end if
write (*,*) 'Answer: '
do j=1,neqn,1
write (*,100) lhs(j,1)
100 format (F12.5,' ,')
end do
write (*,100) (lhs)
end program
Согласно LAPACK документации SGETRF, в моем случае, M=neqn=3, N=1, A=coeff, LDA=3
я составил программу как gfortran main.f95 -o main -fcheck=all -llapack
И я получаю ошибку:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7F758C3B3777
#1 0x7F758C3B3D7E
#2 0x7F758C00BD3F
#3 0x7F758CA2F3EF
#4 0x7F758C9BE8ED
#5 0x400AE0 in MAIN__ at main.f95:19
Segmentation fault (core dumped)
Line 19 является call SGETRS ('N',neqn,1,coeff,neqn,ipiv,lhs,neqn,info2)
Я не понимаю, почему это ошибка. Любая идея или комментарии?