首页 > 教程 > 正文

阅读排行

Fortran调用Matlab引擎的简单办法
2016-09-01 16:47:36   来源:自主总结   评论:0 点击:

这是FORTRAN和MATLAB混编的一种办法,当然还有其它办法,根据程序特点,不同的办法有各自的好处;这里做简要介绍,可以进行MATLAB的简单调用。更复杂的应用需要参考其它资料

一、前言
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’。

Fortran调用Matlan引擎的简单办法 By @abstion @fcode.cn

相关热词搜索:fortran matlab

上一篇:Simply Fortran 安装DISLIN,绘制图形
下一篇:最后一页

分享到: 收藏