目前我正在开发基于一些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');
当数值数据是输出时,这种方法可以很好地工作;但是,如果输出是具有许多成员变量的类,则可能会失败。我想知道是否有更好的方法来完成这项工作,不仅是简单的数字数据,还有复杂的数据结构。谢谢!
答案 0 :(得分:1)
我建议使用MATLAB引擎,通过它可以实时地将数据传递给MATLAB,甚至可以使用MATLAB中提供的各种图形绘图工具来显示数据。
您所要做的就是从C / C ++程序调用MATLAB引擎,然后您可以直接从C / C ++程序轻松执行MATLAB命令和/或在MATLAB和C / C ++之间交换数据。它可以在两个方向上完成,即从C ++到MATLAB,反之亦然。
您可以查看与here所示相同的工作示例。
答案 1 :(得分:0)
我建议在matlab
中使用fread命令。我一直这样做,以便在matlab
和其他程序之间交换数据,例如:
fd = fopen('datafile.bin','r');
a = fread(fd,3,'*uint32');
b = fread(fd,1,'float32');
使用fread
,您可以灵活地读取任何类型的数据。通过在名称中放置*
,如上所述,您还要表示要存储到该数据类型而不是默认的matlab
数据类型。所以第一个读取3个32 bit
无符号整数并将它们存储为整数。第二个读取单个精度浮点数,但将其存储为默认的双精度。
您需要控制在c++
代码中写入数据的方式,但这是不可避免的。您可以在c++
中创建一个以确定的方式打包数据的类方法。
达斯汀