声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3806|回复: 6

[Fortran] matlab 和compaq visual fortran6.5混合编程问题

[复制链接]
发表于 2008-10-17 15:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
matlab怎样调用fortran程序啊?或者fortran怎样调用matlab程序?我想在matlab中运行mex-setup,但是下面没有列出fortran编译器啊。多谢各位指点啊,最好具体点。
回复
分享到:

使用道具 举报

发表于 2008-10-17 18:40 | 显示全部楼层
利用Mex 接口函数生成可以被Matlab 识别的Fortran-Mex 文件
  所谓Mex 接口函数,实际是一种动态链接的子程序,同Matlab的内置函数一样,能被Matlab 的解释器自动装入、运行。Matlab中Mex文件的扩展名可以为.Mex或.DLL,它是由Fortran经过编译生成的Matlab动态链接子程序,需要强调的是Fortran下Mex文件的数据类型只能是双精度型(Double Precision),不像C语言那样,有Matlab支持的数据类型。
  通常一个典型的Fortran-Mex 文件由两部分组成,一个就是包含你要实现的计算功能的子例行程序(不能是函数),该子例行程序实际上就是纯Fortran环境下编写的源程序,而另一个同时也是最主要的部分就是入口程序,该入口程序负责Matlab与Fortran语言之间的数据输入与输出,也即可以在Matlab的环境下输入变量,通过该接口程序传给Fortran进行运算,运算结果赋给输出变量,然后通过该接口程序,返回到Matlab进行输出,这样就完成了Matlab对Fortran函数的调用,典型的调用过程可见图1。
  能够实现接口程序的函数是MexFunction,它由四个参数prhs, nrhs, plhs, nlhs 构成,这里:
    prhs―输入变量的阵列;nrhs―输入变量的个数;
    plhs―输出变量的阵列;nlhs―输出变量的个数;
以已经编译通过的一段Fortran-Mex程序为例,说明为了实现Matlab对Fortran函数的直接调用,需要在Fortran程序的基础上附加的入口程序,该程序用来已知溴化锂水溶液的温度,浓度求焓值,具体程序参见附录。
3) Fortran 编译器(complier)的设置
  在安装了Compaq Fortran version 6.x,Digital Fortran version 5.x,或Fortran powerstation 4.0(或其他版本)的前提下,使用Mex?setup命令即可实现Fortran 编译器的设置。运行后,显示如下结果:
     >>Mex -sutup
    Select a compiler:
    [1] Compaq Fortran version 6.5 in C:\Program Files\Microsoft Visual Studio
    [2] Lcc C version 2.4 in C:\MATLAB6P1\sys\lcc
    [3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
    [0] None
   由于本机安装的Fortran版本是Compaq Fortran version 6.5选择[1],然后选择‘y’
确定项,就可完成Fortran默认编译器的设置。
发表于 2008-10-17 18:42 | 显示全部楼层

                               
登录/注册后可看大图


[ 本帖最后由 风花雪月 于 2008-10-28 17:19 编辑 ]
 楼主| 发表于 2008-10-19 20:16 | 显示全部楼层
非常感谢楼上的回答,但是我在matlab中使用mex -setup命令,结果中为什么没有fortran选择项啊?
mex -setup
Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers [y]/n? y

Select a compiler:
[1] Lcc C version 2.4.1 in D:\PROGRAM\MATLAB71\sys\lcc

[0] None

Compiler:
 楼主| 发表于 2008-10-19 20:18 | 显示全部楼层
我装的是compaq fortran 6.5,与matlab装在同一盘下
发表于 2008-10-28 17:21 | 显示全部楼层
这是环境变量配置问题
有两种选择
(1)Matlab下编译
(假设matlab安装目录为 %matlab%)
    1.打开%matlab%\bin\win32\mexopts\df60engmatopts.bat
将13行中的 set DF_ROOT=%DF_ROOT %
改为set DF_ROOT =C:\Program Files\Microsoft Visual Studio (CVF安装目录)
    2.将matlab的工作目录改为你的fortran源代码存放的目录
    3.在matlab下运行 mex –f df60engmatopts.bat exsample.for
(假设源文件为exsample.for 其中有关于matlab引擎的操作)
(2)CVF下编译
   1.新建一个项目
   2.在tools->directory 里设置 include 和 lib目录
记住要包括以下目录
include ->C:\Program Files\Microsoft Visual Studio\DF98\Include
include->C:\Program Files\Microsoft Visual Studio\DF98\IMSL\Include
include->D:\MATLAB\EXTERN\INCLUDE
   
lib->D:\MATLAB\EXTERN\LIB\WIN32
lib->D:\MATLAB\EXTERN\LIB\WIN32\DIGITAL\DF60
lib->C:\Program Files\Microsoft Visual Studio\DF98\IMSL\Lib
lib->C:\Program Files\Microsoft Visual Studio\DF98\Lib
    3. 在project->setting->link->Object/library modules里添加libmx.lib libmat.
lib libeng.lib
 楼主| 发表于 2008-11-14 09:17 | 显示全部楼层
楼上说的对,是环境变量的问题,可能是我安装Fortran的时候没有进行环境变量的配置,我重装进行了配置就好了。谢谢两位的回答。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-26 05:43 , Processed in 0.136019 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表