2009-10-01[n年前へ]
■IronRuby+Mathematica Playerでグラフィック表示(試行錯誤中)
IronRuby+Mathematica Playerの組み合わせで、数式処理を行い・さらにその結果をグラフィック表示することに挑戦してみた。まずは、
@kernel.Compute(@inputBox.Text) if @kernel.Graphics.Length>0 @pictureBox.image=@kernel.Graphics.first endの部分をそのままにして、コマンドとしてグラフ描画のコマンドを入力し、Mathematica Player相手に実行してみた。すると、エラーダイアログが出て落ちてしまう。どうやら、Mathematica Playerでは"Compute"させることができないようだ。
そこで、今度は該当部分を次のように変えて動かしてみる。
@pictureBox.image= kernelLink.EvaluateToImage( @inputBox.text,500,500)すると、今度は落ちはしないが「入力文字列の形式が正しくありません」というエラーが出る。有償版Mathematica相手なら、このコードでも正常に動作し、グラフ表示がなされている。どうやら、ここでも有償版MathematicaとMathematica Playerでは動作が異なるようだ。
念のため、
loop= MathLinkFactory.CreateLoopbackLink() loop.PutFunction("ListPlot", 1) loop.PutFunction("List", 2) loop.Put(4) loop.Put(0) loop.EndPacket() e=loop.GetExpr() loop.Close() @pictureBox.image= kernelLink.EvaluateToImage(e,500,500)といったように、Exprクラスでコマンドを渡してやってみても、やはり同じように「入力文字列の形式が正しくありません」というエラーが出てしまう。(上の記述がわかりにくい方は右の書籍「Mathematicaプログラミング 」がお勧めです。Mathematicaの「基本」が一番わかりやすい本です)
それでは、グラフィックのインタラクティブ表示は(とりあえず)あきらめて、まずはグラフィック表示結果をファイル出力させてみる、という方向転換をすることにした。そこで、こんなコードを書いた。
include System require 'Wolfram.NETLink' include Wolfram::NETLink kernelLink=MathLinkFactory.CreateKernelLink() kernelLink.WaitAndDiscardAnswer() result=kernelLink.EvaluateToOutputForm( "g=Plot[SIn[x],{x,0,5}]", 0) result=kernelLink.EvaluateToOutputForm( 'Export["test.gif"g]',0) puts result kernelLink.closeすると、今度は、グラフィック作成まではできているのだが、その後のファイル出力関数=Export関数が未定義であるような動きになった。
式・数値入力と数式処理ができれば、とりあえずは十分使えるのだが、グラフィック表示までできると・・・と思ってしまう。というわけで、もう少し試行錯誤が続きそうだ。