概述
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);
最后
以上就是眯眯眼冬日为你收集整理的fortran matlab eng,关于MATLAB转FORTRAN的几点注意的全部内容,希望文章能够帮你解决fortran matlab eng,关于MATLAB转FORTRAN的几点注意所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复