0

「mat.mat」というワークスペースがあり、そこから変数の名前をコンソール アプリケーション経由で C# にダウンロードする必要があります。問題があります。変数のリストが にありstructます。私のコード:GetWorkspaceDataGetCharArray

        MLApp.MLApp matlab = new MLApp.MLApp();            
        string loadCommand = @"zmienne=load('C:\myPath\mat.mat')";
        matlab.Execute(loadCommand);

終わり。

4

1 に答える 1

4

COM インターフェイスは、構造体またはスパース配列をサポートしていません。つまり、MATLAB と .NET の間でこれらを直接渡すことはできません。MATLAB コマンド ウィンドウに次のエラーが表示されます。

警告: ActiveX - 引数の型または値が無効です

回避策は、MATLAB 側で構造体のフィールドにアクセスし、サポートされている変換規則のいずれかを使用して C# にマーシャリングできる変数にそれぞれを格納することです。

以下に例を示します。

static void Main(string[] args)
{
    // load MAT-file contents into a structure variable
    matlab.Execute("S = load('wind.mat')");

    // get field and store in separate variable
    matlab.Execute("x = S.x;");

    // obtain variable "x" from MATLAB into C#
    var x = (double[,,]) matlab.GetVariable("x", "base");

    // print array in C#
    Console.WriteLine("ndims(x) = {0}, numel(x) = {1}", x.Rank, x.Length);
    for (int i = 0; i < x.GetLength(0); i++)
    {
        for (int j = 0; j < x.GetLength(1); j++)
        {
            for (int k = 0; k < x.GetLength(2); k++)
            {
                Console.WriteLine("x[{0},{1},{2}] = {3}", i, j, k, x[i,j,k]);
            }
        }
    }
}

double上記の例では、使用される MAT ファイルには次のタイプの多次元行列が含まれています。

>> whos -file wind.mat
  Name       Size                Bytes  Class     Attributes

  u         35x41x15            172200  double              
  v         35x41x15            172200  double              
  w         35x41x15            172200  double              
  x         35x41x15            172200  double              
  y         35x41x15            172200  double              
  z         35x41x15            172200  double              

loadもちろん、出力引数を使用して MAT ファイルを作成すると、そのファイルに格納されている変数をフィールドとする構造体が返されることに注意してください。

>> S = load('wind.mat')
S = 
    u: [35x41x15 double]
    v: [35x41x15 double]
    w: [35x41x15 double]
    x: [35x41x15 double]
    y: [35x41x15 double]
    z: [35x41x15 double]

したがって、出力を指定せずにファイルをロードすることもできます。その場合、変数は個別の変数として直接ロードされます。

于 2013-05-29T21:37:44.813 に答える