私はmexファイルでDGESVを使用して線形システムを解こうとしています。 2x2システムの場合、mexファイルは正常に動作し、エラーは発生しませんでしたが、システムが2より大きい場合、MATLABシステムエラーダイアログボックスのapperasが発生し、内部問題が発生し、終了する必要があります。 Imはコンパイルラインは、64ビットのウィンドウ10とインテル作曲XE 2013Matlab mexでDGESVを使用する際のエラー
にMatlabのr2016aを使用して:
mex -lmwlapack *.F
次のようにコードがある:
#include "fintrf.h"
C Gateway subroutine
subroutine mexfunction(nlhs, plhs, nrhs, prhs)
C Declarations
implicit none
C mexFunction arguments:
mwPointer plhs(*), prhs(*)
integer nlhs, nrhs
C Function declarations:
mwPointer mxGetPr
mwPointer mxCreateDoubleMatrix
mwPointer mxGetM
C Pointers to input/output mxArrays:
mwPointer pr_A, pr_B, pr_C
C Array information:
mwPointer sizea
real*8 , allocatable :: A(:,:)
+ ,B(:,:),C(:,:)
C Get the size of the input array.
sizea = mxGetM(prhs(1))
allocate(A(sizea,sizea),B(sizea,1))
allocate(C(sizea,1))
C Create Fortran array from the input argument.
pr_A = mxGetPr(prhs(1))
pr_B = mxGetPr(prhs(2))
call mxCopyPtrToReal8(pr_A,A,sizea**2)
call mxCopyPtrToReal8(pr_B,B,sizea)
C Create matrix for the return argument.
plhs(1) = mxCreateDoubleMatrix(sizea, 1, 0)
pr_C = mxGetPr(plhs(1))
C Call the computational routine.
Call SolveLS(A,B,C,sizea)
call mxCopyReal8ToPtr(C,pr_C,sizea)
return
end
C Computational routine
subroutine SolveLS(A,B,C,sizea)
integer*4 :: sizea,pivot(sizea),info
real*8 :: A(sizea,sizea),B(sizea,1), C(sizea,1)
call DGESV(sizea, 1,A,sizea,pivot,B,sizea,info)
C=B
return
end subroutine SolveLS
で見つけることができます。起こっていることを説明する。エラーメッセージはありますか?どれが正確?間違った結果?どのオペレーティングシステムを使用していますか? –
質問に感謝や署名を入れないでください。ここでは期待していません。あなたの問題を簡潔な方法で説明してください。 –