matlab2016b+vs2010+ivf2013+f90

其实默认是f77语法,但通过配置可以改变为自由格式。

默认只能f77代码,怎样修改:

找到:mex_FORTRAN_win64,删掉fixed就可以用f90了。


大体过程:

1.在matlab中配置fortran编译环境: mex -setup FORTRAN
2.写好源代码,自定义子函数仍可以像往常一样调用别的子函数
3.将matlab当前路径调整到当前源代码文档所在路径
4.在matlab命令行输入编译命令:mex csuherror.f90
5.像使用matlab内置函数一样使用此函数,error=csuherror(X),其中X为csuh的9个参数(包括C),输出的为计算误差
6.若需要调试,需要这样编译:mex -g csuherror.f90 ,之后通过vs附加matlab到进程,并打开源代码加断点,在matlab运行时就可以调试了,具体请参考帮助文档。


下面是一个例子:

先写fortran代码:传入一个数组和一个数字,输出一个数组

Add.f90 ,注意此文档名为将来matlab调用的函数名,调用函数名时与其内的子函数名称Add无关。
 #include "fintrf.h" !必须有的头文件,里面有mxGetPr, mxGetM, mxGetN,mxCreateDoubleMatrix等函数的申明 http://yuehongliang2000.lofter.com/post/1d001431_ab72071

       subroutine mexFunction(OutSum,OutVar,InSum,InVar)!函数接口名称必须为mexFunction,

     !OutSum:输出参数个数

     !OutVar:输出参数数组指针

     !InSum:输入参数个数

     !InVar:输入参数数组指针

     !参数顺序不能随意更改
Integer InSum,OutSum mwPointer InVar(*),OutVar(*) !mwPointer专门用于表示指针变量,这个不能随意用Integer代替 mwPointer mxGetPr, mxGetM, mxGetN,mxCreateDoubleMatrix !这个对返回指针函数的再次申明,
integer, parameter :: fp = selected_real_kind(,)
Integer , parameter :: myINT = SELECTED_INT_KIND( ) Real(fp),Allocatable::x(:,:),y(:,:)
real(fp)::z Integer m,n If(InSum/=)Then call mexErrMsgIdAndTxt('MATLAB:InputTooBig','输入参数个数必须为2个') Return EndIf m=mxGetM(InVar())!获取第1个输入参数的行数 n=mxGetN(InVar())!获取第1个输入参数的列数 Allocate(x(m,n),y(m,n)) Call mxCopyPtrToReal8(mxGetPr(InVar()),x,m*n)!将第1个参数数组赋值给x变量 Call mxCopyPtrToReal8(mxGetPr(InVar()),z,)!将第2个整数变量赋值给z Call Add(x,y,z,m,n)!调用内部函数 OutVar()=mxCreateDoubleMatrix(m,n,)!给返回参数分配内存 Call mxCopyReal8ToPtr(y,mxGetPr(OutVar()),m*n)!将返回参数赋值给分配的内存 DeAllocate(x,y)!释放临时分配的内存 Return End SubRoutine ! SubRoutine Add(x,y,z,m,n)
!
! Integer,Intent(In)::m,n
! integer, parameter :: fp = selected_real_kind(,)
!
! Real(fp),Intent(In)::x(m,n),z
!
! Real(fp),Intent(Out)::y(m,n)
!
! Integer i,j
!
! Do i=,m
!
! Do j=,n
!
! y(i,j)=x(i,j)+z
!
! EndDo
!
! EndDo
!
! Return
!
!End SubRoutine SubRoutine Add(x,y,z,m,n) Integer,Intent(In)::m,n
integer, parameter :: fp = selected_real_kind(,) Real(fp),Intent(In)::x(m,n),z Real(fp),Intent(Out)::y(m,n) Integer i,j Do i=,m Do j=,n y(i,j)=x(i,j)+z EndDo EndDo Return End SubRoutine

将matlab当前路径改为Add.f90同目录路径,然后 : mex Add.f90   ,之后会生成Add.mex64

在matlab命令行窗口输入:

x=[1 2 3];

a=2;

y=Add(x,a)

---

我把Add.f90改为multiple.f90的话:

效果一样。

同样的功能的m文档,会优先调用.mexw64,且速度很快。所以可以写一个同名的m文档,只有函数名,之后全是注释文档,用以查阅。

matlab和fortran混合编程的更多相关文章

  1. matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)

    matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...

  2. [转载:]C#与Fortran混合编程之本地调用Fortran动态链接库

    前言 C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++.并依靠强大的.NET底层框架.C#可以用来快速构建桌面及Web应用.然而在我们的实际工作中,尽管C#已经非常完善,但还是不 ...

  3. 【目录】Matlab和C#混合编程文章目录

    本博客所有文章分类的总目录链接:[总目录]本博客博文总目录-实时更新 1.Matlab和C#混合编程文章目录 9.接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点 8.国内第一 ...

  4. 算法库:Matlab与C++混合编程

    算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...

  5. Matlab与.NET混合编程解决人脸识别问题

    原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ht ...

  6. Matlab与C++混合编程(依赖OpenCV)

    Matlab与C++混合编程实际上就是通过Matlab的Mex工具将C++的代码编译成Matlab支持调用的可执行文件和函数接口.这样一方面可以在Matlab中利用已经编写好的函数,尽管这个函数是用C ...

  7. matlab与vs混合编程/matlab移植

    前言 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程. 在matlab中将.m文件编译生成库文件等供外部 ...

  8. [转] Matlab与C++混合编程(依赖OpenCV)

    作者 zouxy09@qq.com,原文 Matlab与C++混合编程(依赖OpenCV) 之前在运行别人论文的代码的时候,经常有遇到Matlab与C++混合编程的影子.实际上就是通过Matlab的M ...

  9. [转] Matlab与C++混合编程,添加OpenCV库

    原文地址 峰回璐转 最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍 受.软件立刻移植到C++上又不太实际,故采用 ...

随机推荐

  1. jetson nano 安装 snowboy 遇到的问题及处理

    Snowboy 是 KITT.AI 开发的一个高度可定制的热词检测引擎,当笔者的 jetson nano 加上话筒后,就立马尝试安装,但在安装过程中却发生了错误,所以把处理方式记录了下来以作备忘. 首 ...

  2. Ideone:在线多语言编程执行器工具

    Ideone:在线多语言编程执行器工具此网站提供40种编程语言以上, 能在线直接做编译和执行的动作,该工具是一款简易的编程测试工具,虽然不能替代专业版的工具,但是其功能非常全面. Ideone,一款在 ...

  3. Js为Dom元素绑定事件须知

    为异步加载的Dom 元素绑定事件必须在加载完成之后绑定: $('body').load('LearnClickBinding.ashx');$('a').click(function () { ale ...

  4. 使用MyCat实现MySQL读写分离

    说明 配置MyCat读写分类前需要先配置MySQL的主从复制,参考我上一篇的文章,已经做了比较详细地讲解了. 环境 centos7.MySQL5.7.mycat1.6 配置MyCat账号密码和数据库名 ...

  5. redis之Hash类型常用方法总结

    redis之Hash类型常用方法总结 格式: 存--HMGET key field [field ...] 取--HMGET key field [field ...] M:表示能取多个值,many ...

  6. 二 SSH整合:Spring整合Hibernate,无障碍整合&无核心配置整合,Hibernate模版常用方法,

    重建SSH项目 java项目可以直接复制,但是web项目除了改名字还要该配置,如下: 方式一:无障碍整合:带Hibernate配置文件 <?xml version="1.0" ...

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:表示一个警告的操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. jqGrid 多选复选框 编辑列 方法事件

    参考:https://blog.csdn.net/zsq520520/article/details/53375284?locationNum=8&fps=1

  9. tensorflow之逻辑回归模型实现

    前面一篇介绍了用tensorflow实现线性回归模型预测sklearn内置的波士顿房价,现在这一篇就记一下用逻辑回归分类sklearn提供的乳腺癌数据集,该数据集有569个样本,每个样本有30维,为二 ...

  10. JDBC--使用beanutils工具类操作JavaBean

    1.在JavaEE中,Java类的属性通过getter,setter来定义: 2.可使用BeanUtils工具包来操作Java类的属性: --Beanutils是由Apache公司开发,能够方便对Be ...