3

今のところ、いくつかの MATLAB コードに基づいて C++ プログラムを開発しています。開発期間中、C++ の実装結果と MATLAB の結果を比較するために、中間結果を 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

でfreadコマンドを使用することをお勧めしmatlabます。matlabたとえば、他のプログラムとの間でデータを交換するために、これを常に行っています。

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

これによりfread、あらゆるタイプのデータを柔軟に読み取ることができます。上記のように名前にaを付けること*で、デフォルトのmatlabデータ型ではなく、そのデータ型に格納することもできます。したがって、最初のものは3つの符号なし整数を読み取り、32 bitそれらを整数として格納します。2つ目は、単精度浮動小数点数を読み取りますが、デフォルトの倍精度として格納します。

データがコードに書き込まれる方法を制御する必要がありますc++が、それは避けられません。c++決定論的な方法でデータをパックするクラスメソッドを作成できます。

ダスティン

于 2012-08-28T01:24:07.007 に答える