3

目前我正在开发一个基于一些 MATLAB 代码的 C++ 程序。在开发期间,我需要将中间结果输出到 MATLAB,以便将 C++ 实现结果与 MATLAB 结果进行比较。我现在做的是用C++写一个二进制文件,然后用MATLAB加载这个二进制文件。以下代码显示了一个示例:

int main ()
{
    ofstream abcdef;
    abcdef.open("C:/test.bin",ios::out | ios::trunc | ios::binary); 

    for (int i=0; i<10; i++)
    {
        float x_cord;
        x_cord = i*1.38;
        float y_cord;
        y_cord = i*10;
        abcdef<<x_cord<<"   "<<y_cord<<endl;
    }

    abcdef.close();

    return 0;
} 

当我有文件 test.bin 时,我可以使用 MATLAB 命令自动加载文件:

 data = load('test.bin');

当输出数值数据时,这种方法可以很好地工作;但是,如果输出是具有许多成员变量的类,它可能会失败。我想知道是否有更好的方法来完成这项工作,不仅适用于简单的数值数据,而且适用于复杂的数据结构。谢谢!

4

2 回答 2

1

我建议使用 MATLAB 引擎,通过它您可以将数据实时传递给 MATLAB,甚至可以使用 MATLAB 中提供的各种图形绘图工具来可视化数据。

您所要做的就是从 C/C++ 程序调用 MATLAB 引擎,然后您可以轻松地直接从 C/C++ 程序执行 MATLAB 命令和/或在 MATLAB 和 C/C++ 之间交换数据。它可以在两个方向上完成,即从 C++ 到 MATLAB,反之亦然。

您可以查看与此处所示相同的工作示例。

于 2013-02-18T14:06:45.117 回答
0

我建议在matlab. 我一直这样做是为了在matlab和其他程序之间交换数据,例如:

fd = fopen('datafile.bin','r');
a = fread(fd,3,'*uint32');
b = fread(fd,1,'float32');

fread您可以灵活地读取任何类型的数据。通过在名称中放置 a *,如上所述,您还表示您希望存储到该数据类型而不是默认matlab数据类型。所以第一个读取 3 个32 bit无符号整数并将它们存储为整数。第二个读取单精度浮点数,但将其存储为默认的双精度。

您需要控制在c++代码中写入数据的方式,但这是不可避免的。您可以创建一个c++以确定性方式打包数据的类方法。

达斯汀

于 2012-08-28T01:24:07.007 回答