MATLAB プログラムを Fortran に変換する作業を行っています (MATLAB の機能の一部を利用しながら)。IMSL で利用可能なルーチンを利用しようとしています。非線形方程式ソルバー neqnf を提供しますが、サブルーチンがいつ呼び出されるかによって変化する変数を渡す方法を理解できませんでした (たとえば、MATLAB の fsolve でできるように)。たとえば、以下は、neqnf を呼び出す Fortran で記述された MATLAB の mexFunction です。サブルーチン sub には、解くべき連立方程式が含まれています。2 つの線形方程式の係数と切片の変数を neqnf から sub に渡すにはどうすればよいですか?
ありがとう!
#include "fintrf.h"
#include "link_fnl_shared.h"
subroutine mexFunction(nlhs, plhs, nrhs, prhs)
! Declarations
use NEQNF_INT
implicit none
external sub
! mexFunction arguments
mwPointer plhs(*), prhs(*)
integer*4 nlhs, nrhs
! mex declarations
mwpointer mxGetPr,mxCreateNumericArray
integer*4 mxClassIDFromClassName
! Internal variables
integer*4 myclassid
! Output variables
mwpointer :: f_pr,x_pr
double precision :: f(2),x(2)
! Create return arguments and assign pointers
myclassid = mxClassIDFromClassName('double')
plhs(1) = mxCreateNumericArray(1,2,myclassid,0)
plhs(2) = mxCreateNumericArray(1,2,myclassid,0)
f_pr = mxGetPr(plhs(1))
x_pr = mxGetPr(plhs(2))
! Test nonlinear solver (Math.pdf, pg. 1238)
call d_neqnf(sub,x)
! Assign output
call mxCopyReal8toPtr(f,f_pr,2)
call mxCopyReal8toPtr(x,x_pr,2)
end subroutine mexFunction
! Subroutine
subroutine sub(x,f,n)
mwSize n
double precision :: x(n) ! input
double precision :: f(n) ! output
f(1) = 2.d0*x(1) + 1
f(2) = -1.d0*x(2) + 4
end subroutine sub