Tag: matlab

GCC C / C ++ MEX Matlab R2015 Mac OS X(带有OpenMP)不起作用

我正在尝试使用GCC / G ++在Matlab中编译一个非常简单的MEX文件…首先我检查了它已经安装在matlab中:!gcc 输出:/ usr / bin / gcc …之后,我尝试执行以下操作: mex -v GCC =’/ usr / bin / gcc’hello.c 但它仍然使用XCode Clang进行编译……这是使用G ++和OPENMP库进行并行计算。 已知Mathworks不支持,但可能。

Makefile:将C代码转换为mex代码(链接错误)

我有一个使用makefile C-code which works fine的C-code which works fine 。 现在,我正在尝试convert it to mex文件,以便我可以从Matlab运行它。 在这里,我正在using makefile approach 。 但是,mex的makefile给了我错误。 这是我要与我的mex文件一起编译的tsnnls lib 。 C项目组织: tsnnls_test_DKU.c Include_4_TSNNLS.c Include_4_TSNNLS.h “ Include_4_TSNNLS.* ”文件具有调用第三部分库的函数TestingLibraries() ; 而我试图保持“ tsnnls_test_DKU.c ”非常简单,因为: 原始代码:tsnnls_test_DKU.c int TestingLibraries() ; int main( int argc, char* argv[] ) { int k = TestingLibraries() ; return(1); } 现在,代码已更改: 更改的代码:tsnnls_test_DKU.c: #include “mex.h” […]

MATLAB的tic-toc和C的时钟差异

我编写了一些C代码,在使用MEX编译之后我将其称为MATLAB。 在C代码中,我使用以下代码测量计算的一部分时间: clock_t begin, end; double time_elapsed; begin = clock(); /* do stuff… */ end = clock(); time_elapsed = (double) ((double) (end – begin) / (double) CLOCKS_PER_SEC); 经过的时间应该是以秒为单位的执行时间。 然后我将值time_elapsed输出到MATLAB(它被正确导出;我检查过)。 然后MATLAB端我调用这个C函数(在我使用MEX编译它之后)并使用tic和toc测量它的执行时间。 结果是完全荒谬的是我使用tic和toc计算的时间是0.0011s(500次运行时的平均值,st.dev.1.4e-4),而C代码返回的时间是0.037s(平均500次运行,st.dev.0016)。 人们可能会注意到两个非常奇怪的事实: 整个函数的执行时间低于部分代码的执行时间。 因此,MATLAB或C的测量结果非常不准确。 在C代码中测量的执行时间非常分散并且表现出非常高的st。 偏差(变异系数44%,而tic-toc仅为13%)。 这些计时器发生了什么事?

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

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

用于读取未知大小的csv文件(仅使用浮点数填充)的c ++程序,其中列数为常量(但未知)

想知道是否有人可以试着建立一个程序,从csv文件中读取大小未知的浮动数据块。 我已经在MATLAB中编写了这个,但是想要编译和分发它,以便转向c ++。 我只是学习并尝试阅读这个开始 7,5,1989 2,4,2312 来自文本文件。 代码到目前为止。 // Read in CSV // // Alex Byasse #include #include #include #include #include #include int main() { unsigned int number_of_lines = 0; FILE *infile = fopen(“textread.csv”, “r”); int ch; int c = 0; bool tmp = true; while (EOF != (ch=getc(infile))){ if(‘,’ == ch){ ++c; } if […]

在OS X 10.9和MATLAB 2012a下使用Xcode 5.1的Mex文件

我正在尝试为OpenCV(3.0.0)编译开发人员构建,但是我无法将我的系统配置为mex C文件。 我试图遵循stackoverflow的建议,目前我可以使用mex c ++文件,但不能使用C ++文件。 我所做的是编辑mexopts.sh以便使用正确的SDKROOT ,我也将部署目标更改为10.9 。 我的mexopts.sh看起来如下: #PATCH: MacOSX10.8 // updated manually to 10.9 CC=’llvm-gcc’ CXX=’llvm-g++’ SDKROOT=’/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/’ #SDKROOT=’/’ MACOSX_DEPLOYMENT_TARGET=’10.9′ ARCHS=’x86_64′ # StorageVersion: 1.0 # CkeyName: GNU C # CkeyManufacturer: GNU # CkeyLanguage: C # CkeyVersion: CFLAGS=”-fno-common -no-cpp-precomp -arch $ARCHS -isysroot $SDKROOT -mmacosx-version-min=$MACOSX_DEPLOYMENT_TARGET” CFLAGS=”$CFLAGS -fexceptions” CLIBS=”$MLIBS” COPTIMFLAGS=’-O2 -DNDEBUG’ CDEBUGFLAGS=’-g’ CLIBS=”$CLIBS -lstdc++” # C++keyName: […]

从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到C或C ++

我正在使用Matlab进行图像处理项目。 我们应该在手机上运行我们的程序(打算成为一个应用程序)。然后我们被要求将我们的代码转换为C或C ++语言,这样我们就可以了解执行需要多长时间然后选择一个平台。 到目前为止,我们还没有弄清楚如何进行这种转换..任何关于如何将Matlab转换为C或C ++的想法?

搜索快速/有效的直方图算法(带有预先指定的箱)

我没有在Matlab之外做太多编码,但我需要将我的Matlab代码导出到另一种语言,很可能是C.我的Matlab代码包括一个直方图函数histc(),它放置我的输入数据(这是双-precision,而不是整数)到指定的bin数组中,形成直方图。 我确信我可以拼凑几个嵌套循环来生成直方图函数,但我需要这个函数快速和内存轻,因为它将被重复和经常访问。 为了避免重新发明轮子,任何人都知道C语言是否有任何现有的直方图function可供使用,或者是否需要这样的人通常自己创建它? 有人知道创建直方图的有效算法吗? 伪代码很好。 提前致谢。