如何让Matlab使mex会话保持活动状态 我的问题是如何编程MATLAB和我的C++代码,以便它们能够交互。更具体地说,我有一个C++程序,它处理数据、创建对象、导出该对象的统计信息并写入到Mat文件。然后,我将把它加载到matlab中进行进一步的分析和可视化。 然而,处理数据和创建对象所需的时间是巨大的,而导出统计数据所需的时间可以忽略不计。另一方面,有许多统计数据和它们的不同组合,很难预测我们将使用什么组合。因此,我希望我可以反复多次运行“统计”部分,而不必重复处理数据的工作

如何让Matlab使mex会话保持活动状态 我的问题是如何编程MATLAB和我的C++代码,以便它们能够交互。更具体地说,我有一个C++程序,它处理数据、创建对象、导出该对象的统计信息并写入到Mat文件。然后,我将把它加载到matlab中进行进一步的分析和可视化。 然而,处理数据和创建对象所需的时间是巨大的,而导出统计数据所需的时间可以忽略不计。另一方面,有许多统计数据和它们的不同组合,很难预测我们将使用什么组合。因此,我希望我可以反复多次运行“统计”部分,而不必重复处理数据的工作,c++,matlab,C++,Matlab,我的问题是:我能问一下Matlab吗。调用C++代码;2.在处理数据并创建对象之后,在内存3中保持该对象“活动”。再次调用C++代码,以请求将一个统计数据加载到工作区中。4.用不同的统计数据重复3。 感谢< P>一个实现这一点的方法是声明你想要再次访问的变量,如C++中的。这些变量将保留在内存中,您可以再次访问它们(当您调用mex函数时),直到清除该mex函数或关闭Matlab会话。为此,我使用了全局变量,对我来说效果很好 另一个选择是使用。从文件中 持久变量与全局变量类似,因为 MATLAB®

我的问题是:我能问一下Matlab吗。调用C++代码;2.在处理数据并创建对象之后,在内存3中保持该对象“活动”。再次调用C++代码,以请求将一个统计数据加载到工作区中。4.用不同的统计数据重复3。
感谢

< P>一个实现这一点的方法是声明你想要再次访问的变量,如C++中的。这些变量将保留在内存中,您可以再次访问它们(当您调用mex函数时),直到清除该mex函数或关闭Matlab会话。为此,我使用了全局变量,对我来说效果很好

另一个选择是使用。从文件中

持久变量与全局变量类似,因为 MATLAB®软件为两者创建永久存储。它们不同于 全局变量,因为持久变量仅为 在其中声明它们的函数。这可以防止持久的 变量不会被其他函数或MATLAB更改 命令行


<>一种实现这一点的方法是声明要再次访问的变量,如C++中的。这些变量将保留在内存中,您可以再次访问它们(当您调用mex函数时),直到清除该mex函数或关闭Matlab会话。为此,我使用了全局变量,对我来说效果很好

另一个选择是使用。从文件中

持久变量与全局变量类似,因为 MATLAB®软件为两者创建永久存储。它们不同于 全局变量,因为持久变量仅为 在其中声明它们的函数。这可以防止持久的 变量不会被其他函数或MATLAB更改 命令行


另一个选项可能是在Max函数中创建C++类实例,并将指针返回到Matlab,将指针传递给任何后续调用。如果使用这种方法,您还应该为它创建一个MatlabHandle类包装器,以允许您正确地清理其析构函数中的内存。是一篇建议海报这样做的帖子,也是Mathworks文件交换上的一个方法示例


此方法对问题的适用性取决于问题的复杂性。我个人只会在其他方法难以解决的复杂问题时才走这条路(例如,您需要使用来自某个库的C++类,并且实例必须在调用之间保持生存,或者如果全局变量不能执行该操作,因为您需要跟踪很多实例,这自然地由一组C++类最好地表示,在这些类中您可以正确地分离关注点)。另一个选项可能是在MEX函数中创建C++类实例,并将指针返回到Matlab,将指针传递给任何后续调用。如果使用此方法,还应该创建一个Matlab句柄类包装器,以允许在其析构函数中正确地清理内存。sed就是这样做的,这是Mathworks文件交换上的一个示例

这种方法对你的问题的适用性取决于问题的复杂性。我个人只会在问题与其他方法难以解决的复杂情况下走这条路(例如,您需要使用来自某个库的C++类,并且实例必须在调用之间保持生存,或者如果全局变量不能执行该操作,因为您需要跟踪很多实例,这自然地最好通过C++类的数组来表示,这样您就可以正确地分离关注点)。