| 外部インタフェース/API | ![]() |
メモリのダイナミックな割り当て
Fortran MEX-ファイルにメモリをダイナミックに割り当てることは可能ですが、そのためには%valを使わなければなりません。つぎの例は、実数データの入力行列の各要素を2倍します。
C $ Revision: 1.12 $
C===============================================================
C
C dblmat.f
C Example for illustrating how to use %val.
C Doubles the input matrix. The demo only handles real part
C of input.
C NOTE: If your Fortran compiler does not support %val,
C use mxCopy_routine.
C
C NOTE: The subroutine compute() is in the file called
C compute.f.
C
C This is a MEX-file for MATLAB.
C Copyright (c) 1984-2000 The MathWorks, Inc.
C
C===============================================================
C Gateway subroutine
subroutine mexfunction(nlhs, plhs, nrhs, prhs)
C---------------------------------------------------------------
C (pointer) Replace integer by integer*8 on the DEC Alpha
C platform.
C
integer plhs(*), prhs(*)
integer pr_in, pr_out
integer mxGetPr, mxCreateFull
C---------------------------------------------------------------
C
integer nlhs, nrhs, mxGetM, mxGetN
integer m_in, n_in, size
if(nrhs .ne. 1) then
call mexErrMsgTxt('One input required.')
endif
if(nlhs .gt. 1) then
call mexErrMsgTxt('Cannot return more than one output.')
endif
m_in = mxGetM(prhs(1))
n_in = mxGetN(prhs(1))
size = m_in * n_in
pr_in = mxGetPr(prhs(1))
C mxCreateFull dynamically allocates memory.
plhs(1) = mxCreateFull(m_in, n_in, 0)
pr_out = mxGetPr(plhs(1))
C Call the computational routine.
call compute(%val(pr_out), %val(pr_in), size)
return
end
C $ Revision: 1.3 $
C===============================================================
C
C compute.f
C
C This subroutine doubles the input matrix. Your version of
C compute() may do whaveter you would like it to do.
C
C This is a MEX-file for MATLAB.
C Copyright (c) 1984-2000 The MathWorks, Inc.
C
C===============================================================
C Computational subroutine
subroutine compute(out_mat, in_mat, size)
integer size, i
real*8 out_mat(*), in_mat(*)
do 10 i=1,size
out_mat(i) = 2*in_mat(i)
10 continue
return
end
x = [1 2 3; 4 5 6];
y = dblmat(x)
y =
2 4 6
8 10 12
| 複素データの操作 | スパース行列の操作 | ![]() |