Main Content

.NET からの MATLAB 関数の実行

.NET から MATLAB® 関数を呼び出すときに、.NET 変数を関数に渡すことができます。MATLAB 関数が出力変数を返す場合、エンジンがその値を MATLAB から .NET に変換します。

.NET エンジン プログラムを設定およびビルドする方法の詳細については、.NET 開発環境のテストを参照してください。

.NET から MATLAB への変数の引き渡し

この例では、MATLAB 関数 linspace を使用して 1 次元 double 配列を作成し、reshape を使用して要素の形状を変更します。.NET から MATLAB へのデータの変換の詳細については、MATLAB 関数への .NET データ型の受け渡しを参照してください。

この例の MATLAB コードは、次のとおりです。

A = linspace(-5.0,5.0);
sz = [25,4];
B = reshape(A,sz);

この例の C# コードは、次のとおりです。

using MathWorks.MATLAB.Engine;
using MathWorks.MATLAB.Exceptions;
using MathWorks.MATLAB.Types;
using System;

namespace MathWorks.MATLAB.Engine.ConsoleExamples {
    public class Program {
        public static void Main(string[] args) {
            Console.Write("Starting MATLAB... ");
            using (dynamic matlab = MATLABEngine.StartMATLAB()) {
                Console.WriteLine("done.");
                double[] A = matlab.linspace(-5.0,5.0);
                int[] sz = new int[] {25,4};
                double[,] B = matlab.reshape(A,sz);
            }
            // Call when you no longer need MATLAB Engine in your application.
            MATLABEngine.TerminateEngineClient();
        }
    }
}

MATLAB から .NET への変数の引き渡し

関数 MATLABmagic は、double 型の 2 次元の行列を返します。エンジンは、返された MATLAB 2 次元 double 行列を、double[,] として宣言される .NET 変数 dbls に変換します。これにより、.NET プログラム内で dbls を使用できるようになります。MATLAB から .NET へのデータの変換の詳細については、.NET アプリケーションでの MATLAB データの処理を参照してください。

この例の C# コードは、次のとおりです。

using MathWorks.MATLAB.Engine;
using MathWorks.MATLAB.Exceptions;
using MathWorks.MATLAB.Types;
using System;

namespace MathWorks.MATLAB.Engine.ConsoleExamples {
    public class Program {
        public static void Main(string[] args) {
            Console.Write("Starting MATLAB... ");
            using (dynamic matlab = MATLABEngine.StartMATLAB()) {
                Console.WriteLine("done.");
                double[,] dbls = matlab.magic(3.0);
                matlab.disp(new RunOptions(nargout: 0), dbls);
            }
            // Call when you no longer need MATLAB Engine in your application.
            MATLABEngine.TerminateEngineClient();
        }
    }
}

このコードでは、変数 dbls が double の 2 次元行列として定義されています。代替のサイズ定義は次のとおりです。

double[,] dbls = matlab.magic(3.0);  // 3x3
double[,,] dbls = matlab.magic(3.0); // 3x3x1
Array dbls = matlab.magic(3.0);      // 3x3

次のコードは、数値 3.0 を表すサイズ定義を示しています。

double x = matlab.eval(" 3.0 ");       // double scalar
double[] y = matlab.eval(" 3.0 ");     // double array, length 1
double[,,,] z = matlab.eval(" 3.0 ");  // 1x1x1x1
Array q = matlab.eval(" 3.0 ");        // 1x1

参考

関連するトピック