fortran matlab eng,[转载]关于MATLAB转FORTRAN的几点注意

1、关于主程序:需加implicit

none,变量需定义,其他规则同一般程序,句末分号记得去掉。此处再着重提及一下变量声明,常量加parameter不用说,普通变量根据要求选择,外部子程序必要是需加interface(参数包含数组等情况),外部函数一定需加变量说明并指出external(这一点其实不写不会有语法错误,但为避免混乱,最好加上),后面要用到的与MATLAB进行接口的函数也同样需声明。

2、关于循环:for变为do,end改为end do。while改为do while。

3、关于分支:if后需加then,判断语句外加括号,end改为end

if。判断等于都是用==,不变。不等于~=改为<>。逻辑和&&改为.and.,逻辑或||改为.or.。

4、关于计算:乘方^改为**。要得到实数运算结果时注意给数字刻意加上小数点,如1.0/3,否则1/3将默认为整除使结果为0。cos、sin和asin、acos在MATLAB与FORTRAN中都有,但MATLAB中有tan与cot,而FORTRAN中只有tan。总之,大量MATLAB中直接自带的计算函数FORTRAN中要么自己编,要么利用外部库函数。

5、关于产生随机数:MATLAB自带各种随机数,FORTRAN中需先用call random_seed()声明,然后由call

random_number(X)获得0~1之间均匀分布的随机数X,再利用函数得到想用的随机数。

5、关于外部子程序:子程序通过call实现,与MATLAB直接调用不一样。FORTRAN的subroutine中的参数既可以是传入的,也可以是传出的,或两者兼有。为避免犯错,可在子程序内声明时用intrinsic和external加以辨别。还需强调一点,对于子程序的调用,参数最好采取已声明好的变量形式,而不是直接赋值(尤其对于real*8的参数),否则传入参数可能会出现错误。

6、关于文件输入输出:status用‘old’表示旧文件已存在,用‘replace’表示若文件不存在则创建若存在则覆盖。action用‘readwrite’表示又写又读(若有一项未编译到会警告,但不影响运行),position用‘append’表示从文件最后开始操作。

7、关于FORTRAN与MATLAB的接口:ep = engOpen("")打开MATLAB引擎。X =

mxCreateDoubleMatrix(A, B, 0)创建双精度A*B数组X。call

mxCopyReal8toPtr(array, mxGetPr(X),

A*B)给新创建的数组赋值(其中mxGetPr用以返回数组的实部)。status = engPutVariable(ep, "X",

X)将新创建数组植入MATLAB引擎。status = engEvalString(ep, "")向MATLAB传达命令。call

mxDestroyArray(Qq)销毁创建数组。status =

engClose(ep)关闭引擎。需要注意一点,诸如ep,X这些变量需在程序中加以整型变量声明,但存储的实际上是32位指针地址,此外,若要将整数传入MATLAB,则需先在FORTRAN中声明一real*8变量并以此为桥才可将整数传入MATLAB。

8、补充,MATLAB中如何自动输出图片:str1='D:';str=[str1 num2str(frames)

'.jpg'];saveas(gcf,str);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值