2009-08-04[n年前へ]
■IronRuby0.9をためしてみた
0.4や0.5のときにちょっとためしてそれっきりだったけど、Win32OLEが動くと聞いてちょっと食指が動く。
で、ためしてみた。しかしかゆいところが未実装、というのが少なからずあり。
2009-08-05[n年前へ]
■速くなった「IronRuby 0.9」で開発が変わる?
本格的なコーディングを開始する前にかんたんなプロトタイプを作成する、という開発者は少なくないはず。プロトタイプよりも前の段階、単なる発想が動作するかどうか試すことが目的の場合は、なおさらのこと余分なコーディングは避けたいところ。
2009-09-27[n年前へ]
■IronRuby 0.9.1で遊ぶ
.NET Framework上で動作するRubyであるIronRubyのバージョン0.9.1が出ていた。Silverlightを使いブラウザ上で動かすことができるようにもなっている。
試しに、ブラウザ上で動くironRuby Tutorialを体験してみると、これがなかなか面白い。与えられた例題をそのまま書き写していくようなチュートリアルだけれども、何だか結構ワクワクしながらRubyの基礎を学ぶことができる。もちろん、例題と関係ないコードを書いてもきとんと実行される(それでは、チュートリアルは進んで行かないが)。自分のPCにダウンロードしたり、インストール作業をしたりせずに試すことができるのは、お手軽でいい。
2009-09-28[n年前へ]
■無料配布のMathematicaカーネルをIronRubyから自由自在に使ってみよう
.NET Framework上で動作するRubyであるIronRubyを使い始めました。使い始めた理由は、(なかなか使う機会がなかった).NETを難しいことを考えずに簡単に使うことができそうだったからです。というわけで、まず一番最初に「無料配布のMathematicaカーネルをIronRubyから自由自在に使う」ということを試してみることにしました。
ウルフラム・リサーチから無料で配布されているMathematica Playerには、最高に高度な数式処理プログラムである Mathematicaのエンジンが完全に内蔵されています。そこで、そのMathematicaのエンジン部であるMathKernel(Mathematica Playerと一緒に配布されている)を.NETを用いて操作し、IronRubyで自由自在に数式処理をしてみることにします。
まずは、Mathematica Playerをダウンロード&インストールします、さらに、Mathematicaを.NETインターフェースから使うことができる.NET/Linkもダウンロード&解凍します。そして、もちろんIronRubyも必要なのでダウンロード&解凍しておきます。最後にあともうひとつ、Examples\Part2\SimpleLinkに入っているWolfram.NETLink.dllを取り出して、次に書くRubyコードと同じディレクトリにでも放り込んでおきます。
あとはRubyのコードを書くだけです。たとえば、こんな具合です。
require 'Wolfram.NETLink' include Wolfram::NETLink kernelLink=MathLinkFactory.CreateKernelLink() kernelLink.WaitAndDiscardAnswer() result=kernelLink.EvaluateToOutputForm( "Solve[a x^2+b x+c==d,x]", 0) puts result kernelLink.closeこのコードを、(IronRubyのbinディレクトリ中にある)ir.exeを使い、ir.exe hoge.rbという具合に実行してみます。すると、まず最初の2行で、"Wolfram.NETLink.dll"を読みこんで、.NET/Linkの機能を使えるようになります。そして、MathLinkFactory.CreateKernelLink()でMathematicaカーネルとの通信を開始し(この時、ダイアログが現れるので、たとえばC:\Program Files\Wolfram Research\Mathematica Player\7.0といったパスにあるはずの、MathKernel.exeを選択します)、EvaluateToOutputFormでコマンド文字列をMathematicaカーネルに送り・評価させ、評価結果を(見やすいOutputFormでフォーマットされた)文字列として受け取ります。最終行では、結果を表示しています。
この例の場合は、
a x^2+b x+c==dという二次方程式を解くようにMathematicaカーネルにコマンドを送っているので、その解がRubyに渡り、おなじみの二次方程式の解が最後に表示されます。
2 2 -b - Sqrt[b - 4 a c + 4 a d] -b + Sqrt[b - 4 a c + 4 a d] {{x -> -----------------------------}, {x -> -----------------------------}} 2 a 2 a
もしも、最小値問題でも解きたければ、
result=kernelLink.EvaluateToOutputForm( "Minimize[2x^2-3x+5,x]", 0)といったコードでも書けば、2x^2-3x+5を最小にするxをMathematicaエンジンが見つけ出し、
31 3 {--, {x -> -}} 8 4という具合に、その結果をIronRubyに渡してくれます。自分で書くと結構大変な数式処理も、世界最高峰のMathematicaエンジンを使うことができると、非常に簡単な作業に変身します。
無料配布のMathematicaカーネルをIronRubyから自由自在に使うことができる、というのはとても便利に思えます。
2009-09-29[n年前へ]
■IronRuby + Mathematica Player で無料数学演習講座
昨日に引き続き、IronRuby + Mathematica Player で色んな数式処理をしてみることにします。まずは、昨日のスクリプトのEvaluateToOutputFormの部分を
result=kernelLink.EvaluateToOutputForm( "NSolve[x^9+x^4+x+5==0,x]", 0)と変えてみます。つまり、9次の代数方程式を数値的に解いてみよう、というわけです。すると、答えはこんな風に返ってきます。
{{x -> -1.22021}, {x -> -0.859627 - 0.712543 I}, {x -> -0.859627 + 0.712543 I},{x -> -0.277212 - 1.208 I}, {x -> -0.277212 + 1.208 I}, {x -> 0.607409 - 1.01612 I}, {x -> 0.607409 + 1.01612 I}, {x -> 1.13953 - 0.477782 I}, {x -> 1.13953 + 0.477782 I}}9次の代数方程式の解が一瞬で(数値的に)求まってしまいます。
また、
result=kernelLink.EvaluateToOutputForm( "Simplify[a x + b x +c x -d]", 0)といった風にすると、"a x + b x +c x -d"を簡約化した答えを返してくれます。たとえば、こんな風です。
-d + (a + b + c) xこの簡約化する作業は間違えてしまうことが多い割に、結構行うことも多い作業だったりするので、Simplifyが使えるのは、とても便利です。
もしも、""Solve[a x^4 + b x^3 +c x^2 -d x + e==0,x]"といったコマンドを投げれば、4次代数方程式の解が帰ってくるわけですが、その解を張り付けるにはこのスペースがあまりに狭すぎるので、貼り付けるのはちょっと止めておくことにしましょう。
あるいは、上の5次方程式で使われている変数に前もって値を代入してやれば、つまり、"a=0;b=0;c=0;d=3;e=1;Solve[a x^4 + b x^3 +c x^2 -d x + e==0,x]"といったコマンドを投げてやれば、
1 {{x -> -}} 3という風にきちんと答えが返ってきます。
result=kernelLink.EvaluateToOutputForm( "a=0;b=0;c=0;d=3;e=1;", 0) result=kernelLink.EvaluateToOutputForm( "Solve[a x^4 + b x^3 +c x^2 -d x + e==0,x]", 0)といったように、複数回に分けてコマンドを投げても大丈夫です。自分で苦労して解かなくて済むと、数学の問題も少し楽しく思えます。
というわけで、Mathematica Playerと.NET/Linkをダウンロードすると、IronRubyなどからMathematicaの機能のかなりの部分を使うことができ、数学の世界を苦労せずに覗いてみることができます。Mathematicaのマニュアルを見ながら、色んな数式処理をさせてみると、きっと面白いと思います。