エントリー
この記事では、MATLABをC#.NETに接続し、3Dプレーンを構築する例を使用して、インターフェイスを備えたアプリケーションを作成する方法を、順を追って説明します。
なぜこれが必要なのですか?
多くの場合、プログラマは複雑な数学を計算するタスクに直面します。 一方、MATLABは解決に優れたツールですが、本格的なカスタムアプリケーションを作成するのは苦手です(MATLABのGUIツールを使用できますが、それは私には不向きです)。
ツール
- Microsoft Visual Studio 2008 SP1
- MATLAB 2010a
- MATLABコンポーネントランタイム
ステップ1.リンカーのセットアップ
C#.NETに統合するためのMATLAB dllライブラリをビルドするには、リンカーを構成する必要があります。 プロジェクトを収集する環境。 最初に、MCRランタイム(MATLABコンポーネントランタイム)をインストールする必要があります。 これは、MATLAB言語を完全にサポートするdllライブラリのセットです。 インストールファイルは次の場所にあります。... \ MATLAB \ R2011b \ toolbox \ compiler \ deploy \ win32 \ MCRInstaller。 標準インストール、次へをクリックします。
MATLABコマンドウィンドウでリンカーを構成するには、
mbuild -setup
と入力し
mbuild -setup
。 すべてに同意し、必要な環境を選択します。この場合はMVS 2008 SP1です。 同様の結果が得られます。
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? y
Select a compiler:
[1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2010a\sys\lcc
[2] Microsoft Visual C++ 2008 SP1 in C:\Program Files\Microsoft Visual Studio 9.0
[0] None
Compiler: 2
Please verify your choices:
Compiler: Microsoft Visual C++ 2008 SP1
Location: C:\Program Files\Microsoft Visual Studio 9.0
Are these correct [y]/n? y
私たちはうれしそうな
Done
を取得
Done
ます。 すべて-リンカーは構成されています。
ステップ2. m関数を書く
与えられた境界条件で3D平面を構築する関数を書きます;興味を引くために、関数記述子を返します。
function res=plane(strfunc,vx0,vx1,vy0,vy1,h)
vx=vx0:h:vx1;
vy=vy0:h:vy1;
figure(1)
res=ezsurfc(strfunc,vx,vy);
end
ご覧のとおり、関数は6行のコードで構成されていますが、上記のすべてのアクションを実行します。シンボル関数(
strfunc
)、平面境界ベクトルの初期値と最終値(v
x0,vx1,vy0,vy1
)、グリッドステップ(
h
)、記述子(
res
)を返します。
このコードをplane.mとして保存します。
重要: MATLABコンパイラーは関数のみを理解します。つまり、各スクリプトは
function
始まり(好ましくはendで
end
)、個別のmファイルである必要があります。
ステップ3.動的ライブラリーを入手する
コマンドウィンドウにMATLAB'a
deploytool
入力します。 新しい.NETアセンブリプロジェクトMATLABplaneを作成し、場所を指定します。

次に、planeClassクラスを作成し、plane.mを追加して、ビルドボタンをクリックします

コンパイルが成功すると、興味のあるMATLABplane.dllライブラリが作成されます。ここにあります:... MATLABplane \ distrib \ MATLABplane.dll。
ステップ4. C#.NETアプリケーションを作成する
MVS 2008 SP1では、C#でWindowsフォームアプリケーションを作成します。
ライブラリリンクを追加する
プロジェクトメソッドを使用する前に、コンパイルされたMATLABplane.dllライブラリとMWArray.dllライブラリへのリンクを追加する必要があります。\ MATLAB \ R2010a \ toolbox \ dotnetbuilder \ bin \ win32 \ v2.0にあります。 追加すると、次のようになります。

プロジェクトでライブラリを使用するには、名前空間の説明を追加する必要があります。
using MathWorks.MATLAB.NET.Utility;
using MathWorks.MATLAB.NET.Arrays;
using MATLABplane;
フォームを作成する
デザイナーのツールバーを使用して、将来のアプリケーションのフォームを作成します。

次のブロックを使用してフォームを作成しました:Label、TextBox、RichBox、Button。
コードを書く
プログラミング言語C#とMATLABの相互作用のために、MATLAB型に対応するMWArray C#データ型が作成されました。 MWArrayは配列の配列であり、変数、スカラー、ベクトル、行列、行、構造体、オブジェクトなどで構成できます。 MWArrayから値を取得するには、型キャストを使用する必要があります。
アプリケーション操作アルゴリズムは次のようになります。
- シンボリック形式の関数とテキストフィールドからの値の取得
- planeClassクラスからplaneメソッドを呼び出す
- 記述子出力配列の取得(タイプMWNumericArray)
- RichBoxの出力記述子配列
以下にコメント付きの完全なコードを示します。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Utility; using MathWorks.MATLAB.NET.Arrays; using MATLABplane; namespace planeApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); button1.Click += new EventHandler(button1_Click);// button2.Click += new EventHandler(button2_Click); } double x0, x1, y0, y1, h; // string func, s_x0, s_x1, s_y0, s_y1, s_h; MWArray[] res = null; // plane MWNumericArray descriptor = null; // private void button1_Click(object sender, EventArgs e)// { try { func = textBox1.Text; // TextBox s_x0 = textBox2.Text; s_x1 = textBox3.Text; s_y0 = textBox4.Text; s_y1 = textBox5.Text; s_h = textBox6.Text; MWCharArray mw_func = new MWCharArray(func);// MWCharArray x0 = Convert.ToDouble(s_x0); // string double x1 = Convert.ToDouble(s_x1); y0 = Convert.ToDouble(s_y0); y1 = Convert.ToDouble(s_y1); h = Convert.ToDouble(s_h); planeClass obj_plane = new planeClass(); // res = obj_plane.plane(1, mw_func, x0, x1, y0, y1, h);// plane, - - descriptor = (MWNumericArray)res[0]; // MWArray MWNumericArray double[,] d_descriptor = (double[,])descriptor.ToArray(MWArrayComponent.Real);// MWNUmericArray double for (int i = 0; i < d_descriptor.Length; i++)// d_descriptor RichBox { richTextBox1.Text += i.ToString() + '\t'; richTextBox1.Text += d_descriptor[i, 0].ToString("0.000") + '\n';// double string } } catch (Exception ex)// { System.Windows.Forms.MessageBox.Show(ex.Message); } } private void button2_Click(object sender, EventArgs e) { richTextBox1.Text = string.Empty;// RichBox res = null;// descriptor = null; } } }
ご覧のとおり、MWArray-> MWNUmericArray-> type C#のスキームに従って、型キャストが積極的に使用されています。
プロジェクトをコンパイルして結果を確認します。

文学
- MATLAB。 Visual C#プログラミング、Borland JBuilder、VBA-N.K. Smolentsev
- C#と.NETプラットフォーム-E. Troelsen