hirax.net::inside out::2009年10月01日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年9月 を読む << 2009年10月 を読む >> 2009年11月 を読む

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関数が未定義であるような動きになった。

 式・数値入力と数式処理ができれば、とりあえずは十分使えるのだが、グラフィック表示までできると・・・と思ってしまう。というわけで、もう少し試行錯誤が続きそうだ。