You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LAPACK的sgesvx求解Ax=b时结果错误的技术问询

使用LAPACK的sgesvx函数求解线性方程组得到错误结果

我尝试用LAPACK库的sgesvx函数求解形如Ax = b的线性方程组,但某个测试用例返回了错误结果。

测试用例方程:

-0.33333 * x₁ - 0.06667 * x₂ = -0.133333

函数返回的解为x₁=0.01346、x₂=0,代入原方程后得到-0.0044866218 = -0.133333,显然不成立。

以下是相关代码:

program Main

    implicit none

    external :: sgesv, sgesvx

    ! SCALAR 
    integer, parameter :: n=2,m=1
    integer :: i,j

    ! ARRAY 
    real(kind=8)    :: A(m,n),b(m),x(n)
    character(len=15)          :: subname

    ! LAPACK 
    integer                    :: IPIV(n),IWORK(n),INFO 
    character                  :: EQUED='N'
    real(kind=8)               :: R(n),C(n),RCOND,FERR(1),BERR(1),WORK(4*n),AF(m,n)

    !
    x(1) = 0
    x(2) = 0
    A(1,1) = -0.33333
    A(1,2) = -0.06667
    b(1) = -0.133333

    !
    do i = 1,m
        print *,"Constraint ",i,": "
        do j = 1,n
            print "(f10.5)",A(i,j)
        end do
        print *," = ",b(i)
    end do

    !
    call sgesvx( &
        'E', &
        'N', &
        n, &
        1, &
        A, &
        n, &
        AF, &
        n, &
        IPIV, &
        EQUED, &
        R, &
        C, &
        b, &
        n, &
        x, &
        n, &
        RCOND, &
        FERR, &
        BERR, &
        WORK, &
        IWORK, &
        INFO &
        )   

    if (INFO .lt. 0) then
        print *,INFO,"-th argument of sgesv is invalid"
    else if (INFO .gt. 0) then
        print *,INFO
    end if

    do j = 1,n
        print "(f10.5)",x(j)
    end do

end program Main

编译命令:
gfortran -O3 linearsystem.f90 -o main -lblas -llapack


内容的提问来源于stack exchange,提问作者Matheus Diogenes Andrade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:14:54