使用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
相关产品推荐
相关产品推荐

