如下为本人亲证代码:

一:

编译器的安装与配置(环境不同,显示结果不同)

要使用MATLAB编译器,用户计算机上应用事先安装与MATLAB适配的以下任何一种ANSI C/C++编译器:

5.0、6.0版的MicroSoft Visual C++(MSVC)

5.0、5.2、5.3、5.4、5.5版的Borland C++

LCC(由MATLAB自带,只能用来产生MEX文件)

下面是安装与配置MATLAB编译器应用程序MEX的设置的步骤:

(1)在MATLAB命令窗口中运行mex –setup,出现下列提示:

Please choose your compiler for building external interface (MEX) files:

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

(2)选择y,MATLAB将自动搜索计算机上已安装的外部编译器的类型、版本及所在路径,并列出来让用户选择:

Select a compiler:

[1] Borland C++Builder version 6.0 in C:\Program Files\Borland

[2] Digital Visual Fortran version 6.0 in C:\Program Files\Microsoft Visual Studio

[3] Lcc C version 2.4 in D:\MATLAB6P5P1\sys\lcc

[4] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio

[0] None

Compiler:

(3)选择其中一种(在这里选择了3),MATLAB让用户进行确认:

Please verify your choices:

Compiler: Lcc C 2.4

Location: D:\MATLAB6P5P1\sys\lcc

Are these correct?([y]/n):

(4)选择y,结束MATLAB编译器的配置。

二在matlab当前目录下新建 add.c文件。输入

#include "mex.h" //使用MEX文件必须包含的头文件
//mex 通过
//a=add(b,c)
double add(double x,double y)
{
return x+y;
}
//MEX文件接口函数
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{ //步骤一:声明
// 源文件名后缀为.c时,所有变量声明必须一次性完成,且放在最前面, 否则mex编译错误
// 源文件名后缀为.cpp时,没有上面的问题,...- -||
double b,c;
double *a;
//步骤二:操作输入数据
//对输入数据进行操作,根据需要选择这几个函数mxGetPr指针指向参数的数据地址、 mxGetM 、 mxGetN 得到矩阵数据的行和列 (返回整数)。
b=*(mxGetPr(prhs[]));//*代表取地址的内容
c=*(mxGetPr(prhs[]));
//步骤三:操作输出数据,
//对于输出数据,需要首先用专门的mex函数分配内存空间
plhs[] = mxCreateDoubleMatrix(, , mxREAL);
//同输入数据一样,要对输出数据操作,我们也需要一个指向数据的指针变量
a=mxGetPr(plhs[]);
//步骤四:调用add
*a=add(b,c); }

三、C文件已写好,名为add.c。那么在Matlab中,输入:

>> mex add.c

就能把add.c编译为MEX文件(编译器的设置使用指令mex -setup),在Windows多出MEX文件

>> output = add(1.1,5)

五、得到输出结果

output =

6.1000

案例二:

在matlab中建立EstabHibert.cpp的文件,并插入如下代码

//Matlab以MEX方式调用C代码示例二
//功能:建立一个n*n的Hibert 矩阵 ,n存放输入值,y存放输出的矩阵
// 【例1】用m文件建立一个1000×1000的Hilbert矩阵代码如下。
//
// tic
//
// m=1000;
//
// n=1000;
//
// a=zeros(m,n);
//
// for i=1:1000
//
// for j=1:1000
//
// a(i,j)=1/(i+j);
//
// end
//
// end
//
// toc #include "mex.h"
//计算过程,该过程包含了MEX文件实现计算功能的代码,是标准的C语言子程序。
void hilb(double *y,int n)
{
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
*(y+j+i*n)=1/((double)i+(double)j+2);
}
}
}
//接口过程
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
//步骤一:声明
// 源文件名后缀为.c时,所有变量声明必须一次性完成,且放在最前面, 否则mex编译错误
// 源文件名后缀为.cpp时,没有上面的问题,...- -||
//double x,*y;
// int n;
double* y;
int n;
//检测输入、输出参数个数和类型的正确性
if(nrhs!=1)
mexErrMsgTxt("One inputs required.");
if(nlhs!=1)
mexErrMsgTxt("One output required.");
if(!mxIsDouble(prhs[0])||mxGetN(prhs[0])*mxGetM(prhs[0])!=1)
mexErrMsgTxt("input must be scalars");
//scalars 代表标量,double型是标量的一种哦
n=mxGetScalar(prhs[0]);
plhs[0]=mxCreateDoubleMatrix(n,n,mxREAL);
// n=mxGetM(plhs[0]); //get rows
y=mxGetPr(plhs[0]);
hilb(y,n);
}

  

mex EstabHibert.cpp

a= EstabHibert(1000);

Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示的更多相关文章

  1. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(四)

    利用Matlab与VC++联合编程,既可在C语言程序中打开Matlab引擎,调用Matlab的ToolBox函数和作图函数,也可在Matlab中调用C代码生成的动态链接库文件,用以加快执行速度.缩短开 ...

  2. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(一)

    MEX文件是一种可在matlab环境中调用的C语言(或fortran)衍生程序,mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件. 中文名 mex文件 外文名 MATLAB ...

  3. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(三)

    最近写了个Matlab程序,好慢呐……所以开始学习Matlab与C/C++混合编程.下面写了个测试代码,显示一个Double类型矩阵中的元素. 源代码 #include "mex.h&quo ...

  4. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)

    如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比 ...

  5. Matlab以MEX方式调用C源代码【转载】

    原文地址:http://blog.sina.com.cn/s/blog_468651400100coas.html 这是自己整理的一个对应的文档:<Matlab以MEX方式调用C源代码> ...

  6. Matlab以MEX方式调用C源代码

    #include "mex.h" // 使用MEX文件必须包含的头文件 // 执行具体工作的C函数 double add(double x, double y) { return ...

  7. matlab中文论坛视频谷普教程MATLAB压缩包介绍

    matlab中文论坛视频谷普教程MATLAB压缩包介绍 我也正在学习这个软件 ,看到这个教程就在这里分享了,希望大家喜欢!Matlab 初学者视频教学1. Matlab视频:Matlab中文论坛为新手 ...

  8. MATLAB/Excel-如何将Excel数据导入MATLAB中

    在使用MATLAB对矩阵进行数据处理时,为了方便编辑与修改,常常需要先将数据录入到Excel中,然后再将其导入到MATLAB中参与矩阵运算.本文在MATLAB 2013a和Office 2013环境下 ...

  9. 【从业余项目中学习2】C# 实现调用Matlab函数(Visual Studio:2008, Matlab:R2009a)

    最近正在给客户做的个人项目,要求实现C#与Matlab之间的调用,即C# winform界面收集用户输入的参数,将参数传递给Matlab的算法计算,Matlab函数返回的结果显示在winform界面上 ...

随机推荐

  1. oninput,onpropertychange,onchange的用法和区别【转载】

    1.前言 由于工作需要,需实现一个类似于微博输入框的功能,在用户动态输入文字的时候,修改提示“您还可以输入XX字”.如下图所示: 因此,稍微研究了一下oninput,onpropertychange, ...

  2. android 存储

    总共四种:SharedPreferences,文件存储,SQLite数据库,ContentProvider,网络存储 1.sharedPreferences:适合存储少量数据,而且存取的格式简单,采用 ...

  3. wifi adb 调试手机

    首先手机,PC都连上WIFI, 如果可以用USB操作,在PC端,输入ping 手机的ip 地址,看看是否成功, 在PC端输入下面命令adb tcpip 5555adb connect 192.168. ...

  4. this(C# 参考)

    原文地址:https://msdn.microsoft.com/zh-cn/library/dk1507sz.aspx this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符. 注意 ...

  5. IE6 IE7 hasLayout bug之li间的3px垂直间距

    1. li中仅包含a,span等内联(行内)元素2.触发条件: li元素的layout被触发(通常为设置了宽或高,设置overflow:hidden在IE7下同样触发layout),且a或span元素 ...

  6. 转 http://www.5icool.org/a/201106/a654.html CSS开发中常用的公用样式

    overflow:hidden 隐藏溢出 一.自己总结的公用样式解析 html, body, div, p, ul, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, f ...

  7. BluetoothGatt API

    punlic final class BluetoothGatt继承自Object , 实现了BluetoothProfile接口/** 相关的蓝牙协议可http://www.cnki.net/KCM ...

  8. php使用位与运算符【&】位或运算符【|】实现权限管理

    权限值是这样的2^0=1,相应2进数为”0001″(在这里^我表示成”次方”,即:2的0次方,下同)2^1=2,相应2进数为”0010″2^2=4,相应2进数为”0100″2^3=8,相应2进数为”1 ...

  9. LINUX 硬盘命令

    1. 查看硬盘情况fdisk -l 每个Disk 为一个硬盘2. 挂在新硬盘fdisk /dev/sdb #硬盘地址Command (m for help):n #新建立分区Command actio ...

  10. VI编辑器学习笔记

    VIM的使用 VI是Linux系统中的一种编辑器,它的使用方法和界面与Unix平台十分相似,掌握了VIM的特殊,你可以感觉到它强大的功能与高效.Vim 相对来说较小,无论你使用任何Linux系统,你总 ...