Math 版 (精华区)

发信人: ysc (bajie), 信区: Math
标  题: 用c编写mex程序[开篇](转信)
发信站: 哈工大紫丁香 (Sun Oct 22 09:01:32 2000), 转信

发信人: fasiondog (乱了), 信区: MathTools       
发信站: BBS 水木清华站 (Sun Apr  4 10:52:11 1999)

发信人: dodoo (虚怀), 信区: Programming
标  题: 用C编写mex程序  [开篇]
  用C编写mex程序
  大家都知道,matlab是一种解释型的编程环境,也就是说,跟以前的basic一样,是读
一句执行一句的。这样做可以很方便的实现编程过程中的交互,也免去了麻烦又耗时的
编译过程。但凡事有一利必有一弊,matlab在执行时速度慢也就根源于此。在matlab里
  tic
  for i=1:10000
  b(i)=a(10001-i);
  end
  怎么样,是不是很慢?
  你的程序里如果再多几个这样的循环,运行速度就可想而知了。
  上面程序的功能是将向量a里的数据逆序赋给向量b。下面的程序可以实现相同的功能
  tic
  b=a(10000:-1:1);
  为什么这个程序运行速度就这么快呢?这是因为matlab里的基础矩阵运算函数,像转
置,复制等等,都是以二进制程序的形式存在的,运行起来速度当然比解释执行10000次
  所以编matlab程序时,应该尽量避免用循环语句,而使用等效的矩阵运算。虽然这样
  但总是有的时候没法找到对应的矩阵运算来等效,或编出来的程序复杂得让人没法修
  简单地说,mex程序就是根据一定的接口规范(mtlab提出的)编写的一个dll,matla
比如我编了一个mex函数,名字叫max2.dll,那么只要把这个dll所在的目录加到matlab
的搜索路径里(用addpath),就可以像调用普通matlab函数一样来调用它了。因为把

循环体放到了二进制程序中,执行速度快得多。


  Mex文件既可以用c,也可以用fortran来编。因为我用的是c语言,所以下面的介绍都

是用c语言编写mex文件的方法。如果你用的是fortran,请你自己去看Apiguide.pdf,里

面有详细说明。



[开场说明]


  我的论文里的程序大多是用matlab编的,因为方向是图像处理,速度上的限制很大。

不得已,拿着apiguide.pdf啃了两天,才算摸出点门道。现在论文写完了,想着这点经

验也许有用,就不惮浅薄,打算把它写下来。因为还要准备论文讲稿,还有一堆表要填

,不知能否写完,在这里预为说明,到时莫要骂我。 ^:^


--

※ 来源: 心网 cag.seu.edu.cn [FROM: 202.119.30.69]

--

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: ysc.bbs@smth.org]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.865毫秒