一、前言
1、这是FORTRAN和MATLAB混编的一种办法,当然还有其它办法,根据程序特点,不同的办法有各自的好处;
2、这里做简要介绍,可以进行MATLAB的简单调用。更复杂的应用需要参考其它资料;
3、欢迎更正和更新。
二、准备工作
1、将例如“D:\Program Files\MATLAB\R2010b\bin”的MATLAB安装目录加到计算机环境变量-用户变量-path中,重启系统;
2、将例如“D:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft”中的所有.lib文件加入到新建的Fortran工程中;
三、具体编程
1、打开MATLAB的engine;
a) 申明:INTEGER,EXTERNAL :: engOpen;INTEGER :: EP
b) EP = engOpen(‘MATLAB’) !EP =0: 启动失败;EP/=0:启动成功;
2、将Fortran数据传递给MATLAB;
a) 申明:INTEGER,EXTERNAL :: mxCreateDoubleMatrix,mxGetPr,engPutVariable;INTEGER :: T,Status;REAL*8 :: Variables(M,N)
b) T = mxCreateDoubleMatrix(M,N,0);!申请内存,建立矩阵
c) CALL mxCopyReal8ToPtr(Variables, mxGetPr(T),M*N);!将
d) Status = engPutVariable(EP,'x',T);!=0赋值成功;/=0赋值失败
3、调用MATLAB程序,执行MATLAB命令;
a) 申明:INTEGER,EXTERNAL :: engEvalString;CHARACTER*100 :: STRING;
b) STRING = ‘matlat 命令行’,例如’y = 2*x;’ ! x为2-d)中设置的变量名称;
c) 执行 Status = engEvalString(EP,STRING);!Status = 0执行成功;Status /=0 执行失败;
d) 若MATLAT命令行很多,b)和c)可多次进行。
4、将MATLAB数据传递给Fortran。
a) 申明:INTEGER,EXTERNAL :: engGetVariable;REAL*8 :: output (M,N)
b) Status = engGetVariable(ep,"y") !y为3-b)中设置的变量名;
c) CALL mxCopyPtrToReal8(mxGetPr(Status),output,M*N) !MATLAB的y变量传给了FORTRAN的output变量。
5、关闭MATLAB的engine;
a) 申明:INTEGER,EXTERNAL :: engClose;
b) STATUS = engClose(EP) ! =0成功关闭;/=0关闭失败;
四、常用函数说明
1、engOpen : 打开MATLAB引擎;
2、engClose:关闭MATLAB引擎;
3、mxCreateDoubleMatrix :创建双精度数组;
4、mxCopyReal8ToPtr:给新创建的数组赋值;
5、mxGetPr:返回数组实部;
6、engPutVariable:将新创建数组植入MATLAB引擎;
7、engEvalString:向MATLAB传达命令;
8、engGetVariable:返回MATLAB中某数组的指针;
9、mxCopyPtrToReal8:得到MATLAB中某数组的值。
五、注意
传给MATLAB的命令行中的变量大小写是被区分的,程序中一定要保持变量名大小写统一。例如第3步执行“y = 2*x”,第2步输入x,不能写成‘X’,第4步输出y,不能写成‘Y’。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删