gpt4 book ai didi

为 C 程序创建 MATLAB MEX 文件

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:27 24 4
gpt4 key购买 nike

我是一位经验丰富的 MATLAB 用户,但对 C 和 MEX 文件完全陌生。我有一个用 C 编写的复杂程序,我需要从 MATLAB 中调用它。该程序由一个文件夹中的几十个文件组成,其中包括一个名为 main.c 的文件,它处理来自命令行的输入,将结果传递给其他进行实际计算的类。

通常,要从命令行安装此程序,我会在 UNIX 命令提示符下运行 ./configure, make。然后,要运行该程序,./runMyProgram -f input_file.txt -p some_parameters。该程序将包含数字列表的文本文件作为输入,并在命令窗口中打印结果表。我想为程序提供一个 MATLAB 数组(而不是 .txt 文件)并取回一个数组(而不是打印的结果表)。

我已经阅读了 The Mathworks 的 MEX 文档(我发现它相当晦涩难懂)以及其他一些“教程”,但我完全迷失了——这些示例是针对非常简单的单文件 C 程序的,并且不不真正讨论如何处理更大更复杂的程序。用执行相同操作的 MEX 文件替换 main.c 文件就足够了吗?另外,如何在 MATLAB 中编译整个包?

我将不胜感激任何关于从哪里开始的简单英语建议,或指向任何以易于理解的方式处理该主题的教程。

最佳答案

是的。通常用 MEX 文件替换 main.c 文件是这个过程。在你的情况下,因为你已经有复杂的build设置,构建一个库然后构建一个单独的 mex 文件可能更容易链接到这个库。这比使用 mex 命令构建整个东西要容易得多。如果您导出需要从您的库中调用的函数,您可以从您的 mexFunction 中调用它。 mexFunction 可以完成 mxArrays 的所有创建和读取。一个简单的示例 mexFunction 可以是,

#include "mex.h"
// Include headers for your library

void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
void* x = mxGetData(prhs[0]); // Assume one input. Check nrhs
plhs[0] = mxCreateDoubleMatrix(10,10,mxREAL); // Create 10x10 double matrix for output
void* y = mxGetData(plhs[0]);
yourLibraryFunction(x, y); // Read from x and write to y. Pass sizes in if needed
}

关于为 C 程序创建 MATLAB MEX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15883018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com