2009-09-30[n年前へ]
■IronRubyから有償版Mathematicaを.NET/Linkで使ってみる
今日は、無料で使うことができるMathematica Playerでなく、有償版のMatheticaを.NET/Linkを介してIronRubyから操作してみることにします。具体的には、.NETを使いフォームを表示させ、任意の数式処理を行った結果をグラフィック表示させるプログラムを書いてみます。今回のプログラムは、無料で使うことができるMathematica Playerでは動きません。それは、Mathematica Playerでは下記コード中の"Calculate"メソッドを呼ぶことができないからです。
今回書いたRuby(IronRuby)コードを下に張り付けてみます。また、実行画面は右上のようになります。処理させたいコマンドをテキスト・エディットに入力し、"Calculate"ボタンを押すと、その下の部分に処理結果がグラフィック表示される、という具合です。
require 'mscorlib'
require 'System.Drawing'
require 'System.Windows.Forms'
require 'Wolfram.NETLink'
include Wolfram::NETLink
class MainForm < System::Windows::Forms::Form
def initialize
self.Text="Wolfram::NETLink"
self.width=500
self.height=500
@pictureBox=System::Windows::Forms::PictureBox.new()
@pictureBox.width=self.width
@pictureBox.height=self.height
@pictureBox.Location=System::Drawing::Point.new(0, 30)
@pictureBox.Image=nil
self.controls.add(@pictureBox)
@inputBox=System::Windows::Forms::TextBox.new()
@inputBox.Location=System::Drawing::Point.new(100, 0)
@inputBox.Name="inputBox"
@inputBox.Size=System::Drawing::Size.new(300, 00)
@inputBox.TabIndex=2
@inputBox.Text="Plot3D[Sin[x*y],{x,0,10},{y,0,10}]"
self.controls.add(@inputBox)
@kernel=MathKernel.new()
@kernel.AutoCloseLink=true
@kernel.CaptureGraphics=true
@kernel.CaptureMessages=true
@kernel.CapturePrint=true
@kernel.GraphicsFormat="Automatic"
@kernel.GraphicsWidth=@pictureBox.Width
@kernel.GraphicsHeight=@pictureBox.Height
@kernel.HandleEvents=true
@kernel.PageWidth=60
@kernel.GraphicsResolution=74
@kernel.Input=nil
@kernel.Link=nil
@kernel.LinkArguments=nil
@kernel.UseFrontEnd=true
#@kernel.ResultFormat=ResultFormatType.OutputForm;
btn=System::Windows::Forms::Button.new
btn.Location=System::Drawing::Point.new(0, 0)
btn.Text="Calculate"
btn_Click=Proc.new() { |sender, e|
@kernel.Compute(@inputBox.Text)
@pictureBox.image=@kernel.Graphics.first if @kernel.Graphics.Length>0
}
btn.Click(&btn_Click)
self.Controls.Add(btn)
end
end
System::Windows::Forms::Application.Run( MainForm.new )
大まかな流れは、MathKernel.new()でMathematicaカーネルと通信準備を行い(Mathematica Playerと通信する場合と異なり、有償版Mathematicaとやりとりする際にはカーネルをダイアログボックスで選ぶ必要はありません)、Computeメソッドをカーネルに対して投げることで計算処理を行い・処理された結果(グラフィック)を
@pictureBox.image=@kernel.Graphics.firstで、ピクチャー・ボックスに貼り付けています。ちなみに、上のコード中にある@kernel.Graphics.firstを@kernel.Graphics[0]としてしまうと、エラーが出て動かなくなってしまうので注意が必要です。
今日はIronRubyで有償版Mathematicaの機能を使うGUIアプリケーションを書いてみました。…とはいえ、有償版のMatheticaを使うのであれば、高機能なMathematicaノートブックというフロントエンドを使った方が良いような気がします。というわけで、明日からはまた無料Mathematica PlayerとIronRubyで何ができるかを調べてみることにします。