Fortran LAPACK例程中的分段错误 [英] Segmentation error in fortran LAPACK routine

查看:0
本文介绍了Fortran LAPACK例程中的分段错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Fortran 95运行一个带有LAPACK库的简单程序。我正在解线性方程组:Ax=B

A = [4 -2 3]
    [1 3 -4]
    [3 1 2]

B=[ 1
   -7
   5]

x是解向量

解决方案

x = [-1
     2
     3]

以下是代码。我使用了两个子例程:SGETRFSGETRS。第一个函数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,在我的情况下, 我将程序编译为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)
第19行call SGETRS ('N',neqn,1,coeff,neqn,ipiv,lhs,neqn,info2) 我不明白为什么会有错误。有什么想法或建议吗?

推荐答案

您的错误是由SGETRF的第二个参数引起的。此参数是coeff的第二个维度,因此应为3neqn

这篇关于Fortran LAPACK例程中的分段错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆