我正試圖解決一個mex文件中DGESV的線性系統。 當我有一個2x2系統,mex文件工作正常,沒有發生錯誤,但是當系統大於2時,MATLAB系統錯誤對話框出現,並說matlab遇到了內部問題,需要關閉。 im使用MATLAB r2016a上64位的Windows 10和intel作曲家XE 2013錯誤在Matlab中使用DGESV mex
編譯行是:
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
找到永遠不要用「不工作」或「將無法正常工作。」描述發生了什麼事。任何錯誤消息?究竟是什麼?錯誤的結果?你使用哪種操作系統? –
請勿將任何謝意或簽名置於您的問題中。這裏預計不會。以簡潔的方式描述您的問題。 –