通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度

Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或Watcom C中的一种

注:在Matlab里,矩阵第一行是从1开始的

1. 主接口

#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mexPrintf("hello,world!\n");
}
//编译
>> mex hello.c
//运行
>> hello

整个程序由一个接口子过程 mexFunction构成

nlhs:输出参数数目

plhs:指向输出参数的指针

nrhs:输入参数数目

prhs:输入参数

2. mxGetScalar

i = mxGetScalar(prhs[0]);

“Scalar”就是标量的意思。在Matlab里数据都是以数组的形式存在的,mxGetScalar的作用就是把通过prhs[0]传递进来的mxArray类型的指针指向的数据(标量)赋给C程序里的变量。这个变量本来应该是double类型的,通过强制类型转换赋给了整形变量i

3. mxGetPr

从指向mxArray类型数据的prhs[0]获得了指向double类型的指针

mxGetPr只能得到指向这个矩阵的指针,如果我们不知道这个矩阵的确切大小,就没法对它进行计算

4. mxGetM和mxGetN

获得传进来参数的行数和列数

5. mxCreateDoubleMatrix

mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag)

内存申请

m:待申请矩阵的行数

n:待申请矩阵的列数

6. mexErrMsgTxt

MexErrMsgTxt在给出出错提示的同时退出当前程序的运行

7. MxIsDouble

MxIsDouble则用于判断mxArray中的数据是否double类型

参考文档:http://www.cnblogs.com/tjulxh/archive/2012/04/23/2467087.html

matlab C程序的更多相关文章

  1. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  2. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  3. matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读

    静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...

  4. matlab练习程序(透视投影,把lena贴到billboard上)

    本练习程序是受到了这个老外博文的启发,感觉挺有意思,就尝试了一下.他用的是opencv,我这里用的是matlab. 过去写过透视投影,当时是用来做倾斜校正的,这次同样用到了透视投影,不过更有意思,是将 ...

  5. matlab练习程序(多圆交点)

    最近总是对计算几何方面的程序比较感兴趣. 多圆求交点,要先对圆两两求交点. 有交点的圆分为相切圆和相交圆. 相切圆求法: 1.根据两圆心求直线 2.求公共弦直线方程 3.求两直线交点即两圆切点. 相交 ...

  6. matlab练习程序(矩形变换为单连通形状)

    变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了. 虽然非单连通模板也有办法处理,不过不是这里要讨论的. 这里用到的方法和矩形变换为圆那片文 ...

  7. matlab练习程序(渲染三原色)

    这里我用的空间是x向右为正,y向下为正,z向屏幕里面为正.相当于标准右手系绕x轴旋转了180度. 将三个点光源放在 r = [0.3,0,0.5];g = [0.3,-0.5*cos(pi/6),-0 ...

  8. matlab练习程序(生成希尔伯特曲线)

    能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线. 程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数. 这里如果n等于log2(h)或log2(w),则图像就全 ...

  9. matlab练习程序(随机直线采样)

    我只是感觉好玩,写了这样一段程序. 原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了. 最后生成了一幅含有很多空洞的图像. 当然,对含有空洞的图像是 ...

  10. matlab练习程序(旋转、径向模糊)

    还记得过去写过径向模糊,不过当时效果似乎不好. 这次效果还可以,程序中用的算法是: 1.求当前处理点和图像中心点之间的距离r与角度ang; 2.通过对r的修改得到径向模糊. 3.通过对ang的修改得到 ...

随机推荐

  1. DockerFlie的基本命令解析

    DockerFlie官网文档:  https://docs.docker.com/engine/reference/builder/   DockerFile中文: http://www.docker ...

  2. Java学习 1.3——Java开发环境的搭建:安装JDK,配置环境变量

    了解了基本的Java知识后,就需要开始搭建开发环境了. 一,安装JDK JDK1.8下载地址 接受协议,选择选择自己的系统,我的是Windows64位: 点进去后会让你登录Oracle账号,没有就创建 ...

  3. vue-property-decorator使用指南

    在Vue中使用TypeScript时,非常好用的一个库,使用装饰器来简化书写. 1.安装npm i -S vue-property-decorator @Prop @PropSync @Provide ...

  4. 简单快速上手Jackson使用

    1简介 Jackson具有比较高的序列化和反序列化效率,据测试,无论是哪种形式的转换,Jackson > Gson > Json-lib,而且Jackson的处理能力甚至高出Json-li ...

  5. Android 视频播放器 (四):使用ExoPlayer播放视频

    一.简介 ExoPlayer是一个Android应用层的媒体播放器,它提供了一套可替换Android MediaPlayer的API,可以播放本地或者是线上的音视频资源.ExoPlayer支持一些An ...

  6. 剑指offer 22:验证栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  7. Thymeleaf常用语法:条件判断 if、switch case

    if语句条件判断使用th:if,它会判断表达式是否成立,表达式的结果支持boolean.number.character.String及其他类型.满足下面情况,if语句成立:(1) 表达式的结果是数字 ...

  8. FLUME NG的基本架构

    Flume简介 Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统.原名是 Flume OG (original generation),但随着 FLume 功能 ...

  9. SQL Server查询数据库近期执行的SQL语句

    SELECT TOP 1000        ST.text AS '执行的SQL语句',       QS.execution_count AS '执行次数',       QS.total_ela ...

  10. Spring 事务 属性 详细

    学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过几天就会忘记,接下来我们一起实践来学习Spring事务的传播属性. 传播属性 传播属性定义的是当一个事务方法碰到另一个事 ...