📄 timetwos.f90
字号:
!!!!!计算一个数的倍数,将输入数据乘以2!!!
!!!!!第一部分:入口子程序
subroutine mexFunction(nlhs,plhs,nrhs,prhs)
!参数定义:prhs,plhs 分别是指向输入输出数值的指针,其中(*) 指参数长度不确定
!nrhs,nlhs 分别是输入输出的数据个数
integer plhs(*),prhs(*)
integer mxGetPr,mxCreateFull
integer x_pr,y_pr
integer nlhs,nrhs
integer mxGetM,mxGetN,mxIsNumeric
integer m,n,size
real*8 x,y
!检查输入输出数据的个数
if (nrhs.ne.1) then
call mexErrMsgTxt('one input must required')
elseif (nlhs.ne.1) then
call mexErrMsgTxt('one output must required')
endif
!获取输入数据的大小
m=mxGetM(prhs(1))
n=mxGetN(prhs(1))
size=m*n
!检查数据的类型
if(mxIsNumeric(prhs(1)).eq.0)then
call mexErrMsgTxt('input must be a number')
endif
!产生输出数组
plhs(1)=mxCreateFull(m,n,0)
!获取输入参数的指针
x_pr=mxGetPr(prhs(1))
!获取输出参数的指针
y_pr=mxGetPr(plhs(1))
!将输入数据指针转换成双精度数据以调用子程序计算
call mxCopyPtrToReal8(x_pr,x,size)
!调用现有的FORTRAN 子程序(这是我们编写这个接口程序的目的所在)
call timestwo(y,x)
!将计算结果转换成指针返回到MATLAB
call mxCopyReal8ToPtr(y,y_pr,size)
return
end
!第二部分:计算用子程序(FORTRAN 中已有的子程序)
subroutine timestwo(y,x)
real*8 x,y
y=2.0*x
return
end
!将该文件保存成timestwo1f 放在MATLAB 当前工作目录下. 在MATLAB 命令窗口运行:
!mex timestwo.f %编译程序
!x=2;
!y=timestwo(x)
!y=4 %输出结果
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -