Tag: mex

如何在运行时创建一个mex函数printf?

我有一个在我的MATLAB脚本中调用的mex文件。 mex函数可能需要一段时间才能运行,因此为了防止我的代码“在没有任何输出的情况下停在那里”,我在mex文件中放入了许多printf语句来输出有关正在处理的数据的一些运行信息。 但是当我调用mex函数时,它不会printf任何东西并且在int运行期间保持不变。 最后,在完成其工作后,它将printf出我想要的所有信息 – 不是在运行时,而是在完成之后 。 这不是我想要的。 所以我想知道如何使printf成为我想要的东西,而且在我想要的时候也是printf 。

从MATLAB中调用MEX中的C ++类方法

我有一个DLP工具包,我需要使用C ++ API通过MATLAB进行控制。 比如说,我在一个名为dlp_controller.cpp / .c的mex文件中使用C / C ++来实现{load_data, load_settings,display_data}函数/方法。 我知道我可以调用dlp_controller(); 用MATLAB。 有没有办法可以直接从MATLAB调用这个mex的方法? 说我的dlp_controller.cpp mex看起来像: class dlp{ … } dlp::dlp{ … } dlp::load_data{ … } dlp::load_settings{ … } dlp::display_data{ … } void mexFunction(int nlhs, mxArray *[],int nrhs, const mxArray *prhs[]{ … } 我可以以某种方式从MATLAB调用像dlp_controller.load_data这样的方法吗? 注意:解决方法可以是将变量发送到dlp_controller并使用该函数和传递的数据在内部调用该函数。

在MEX中创建稀疏矩阵

如何在用C编写的MEX文件中创建一个2d稀疏矩阵。创建矩阵之后如何像C一样单独访问元素,比如mat[i][j] ? 我厌倦了使用mxCreateNumericArray函数,但我无法访问元素并将其作为稀疏矩阵。 请帮忙

Matlab 2013b生成的代码在mex中为架构x86_64错误生成未定义的符号

我有一个由Simulink编码器生成的C代码,我需要在C S函数中使用它。 这可能听起来有点奇怪,但我需要在编写s函数的输出之前在s函数中多次执行此代码(这是一种演化算法,需要在评估和排名之前模拟许多人的预测……但这些细节并不重要)。 问题是,当我尝试使用我的代码时,我似乎遇到了64位指令集的问题。 我将生成的erg_main.c作为如何与生成的代码进行交互的示例: /* * File: ert_main.c * * Code generated for Simulink model ‘Peltier_model’. * * Model version : 1.14 * Simulink Coder version : 8.5 (R2013b) 08-Aug-2013 * C/C++ source code generated on : Thu Apr 3 18:01:46 2014 * * Target selection: ert.tlc * Embedded hardware selection: 32-bit Generic * […]

Matlab mex文件与其直接C等效文件相比较慢

我无法解释(并避免)Matlab mex程序与没有Matlab接口的相应C程序之间的速度差异。 我一直在分析数值分析程序: int main(){ Well_optimized_code(); } 使用gcc 4.4针对Matlab-Mex等效编译(指向使用gcc44,这不是Matlab当前支持的版本,但出于其他原因需要): void mexFunction(int nlhs,mxArray* plhs[], int nrhs, const mxArray* prhs[]){ Well_optimized_code(); //literally the exact same code } 我执行的时间如下: $ time ./C_version 与 >> tic; mex_version(); toc 时间上的差异是惊人的。 从命令行运行的版本平均需要5.8秒。 Matlab中的版本在21秒内运行。 对于上下文,mex文件替换SimBiology工具箱中的算法,该算法大约需要26秒才能运行。 与Matlab算法相比,C和mex版本都使用对openMP的调用线性扩展到27个线程,但为了进行性能分析,这些调用已被禁用并注释掉。 这两个版本以相同的方式编译,除了作为mex文件编译的必要标志:-fPIC –shared -lmex -DMATLAB_MEX_FILE应用于mex编译/链接。 我删除了对mex文件的左右参数的所有引用。 也就是说它不需要输入,也没有输出,它仅用于分析。 伟大而光荣的谷歌告诉我,与位置无关的代码不应该是经济放缓的源头,而且我不知所措。 任何帮助将不胜感激, 安德鲁

Matlab Mex库生命周期

有谁知道matlab mex库的生命周期是什么? 具体来说,我对以下内容感兴趣: 有没有办法在调用它之前强制加载库? 库是单例还是多个实例加载? 在调用之前是否有任何挂钩用于初始化? 是否有一个析构函数钩子/信号,可以在卸载库进行清理时截获? 我在这里和网上进行了广泛的搜索,但我找不到这些问题的答案。 我的问题在初始化时有一些性能成本,我想尽可能避免这种情况,而无需编写服务。

matlab中的C ++ C ++和C ++中的matlab

似乎有几种方法可以在C C ++中调用matlab并在matlab中调用C C ++。 当我尝试在这里列出它们时,请指出它如果我错过了什么。 要在matlab中调用C C ++,还有两种方法。 第一个是调用C共享库中的函数。 第二个是将C C ++代码构建为二进制MEX文件,这些文件将从MATLAB命令行调用。 对于第一种方法,C共享库是否只是通用的,即没有改变他们的matlab的C代码,并从像gcc这样的通用C编译器编译? 要在C C ++中调用matlab代码,有两种方法可用。 第一个是Matlab引擎。 第二个是使用MATLAB Compiler mcc从MATLAB代码创建C或C ++共享库。 除了matlab和C ++之外,C ++还可以通过写入和从某些文件(例如mat文件,文本文件)读取数据来进行通信。 有多种方法可以实现这里的每个目标,你能告诉我哪些案例最适合使用哪些目标? 即调用C共享库中的函数VS将C ++代码构建成二进制MEX文件,Matlab引擎VS将Matlab代码编译成C C ++共享库。 感谢致敬!