2008-06-28[n年前へ]
■「Mathematica開発者のウルフラム」と「ファインマン」
今週頭に「数式処理アプリケーションのMathematicaが最初にリリースされてから、今日で20年たちました」と、開発者Stephen WolframからMathematicaユーザにメールが送られてきた。スティーブン・ウルフラムが28才の時の1988年の6月23日にMathematica 1.0 が出荷されたのである。
For twenty years we've pursued our long-term vision for Mathematica.
Mathematicaは結局のところ、パターンマッチングを延々と行うプログラムである。データベースに登録されているパターン・規則にもどづいて、与えられた数式を置換していくことにより、Mathematicaは解(や所望の結果)を得る。
ところで、「ファインマン物理学」で有名なR.P.ファインマンはカリフォルニア工科大学で1983年から1985年までの間、計算機科学の講義(ファインマン計算機科学)をしている。その頃の学生がスティーブン・ウルフラムである。
ファインマンは「科学とは何か」の中で、「数学とはパターンにすぎない」「数学とはパターンを探すことだ」と端的に短く書き表している。この言葉を思い起こしながら、(おそらくそんな言葉を聞いていただろう)彼の学生でもあったウルフラムが「パターンマッチングによる数式処理アプリケーション」を商品化し市場に広まらせたのだ、と考えてみると何だか「面白い繋がり」を感じる。そんな繋がりを思い浮かべながら、Mathematicaの20年を集めたスクラップブック を眺めてみると、きっと楽しいと思う。
I'm looking forward to the next 20 years and hope that you'll continue to follow Mathematica on this exciting journey.
-- Stephen Wolfram
2009-05-19[n年前へ]
■思想は変わらない「Wolfram|Alpha」
Wolfram Researchが作った「新しい検索エンジン」だという、Wolfram|Alphaを使ってみた。結局のところ、これは”まさに”Mathematicaである。「Mathematica開発者のウルフラム」と「ファインマン」でも書いたように、これは
データベースに登録されているパターン・規則にもどづいて、パターンマッチングを延々と行い、また、データベースに登録されている値(とユーザが与えた値初期値)を用いて変換を続け、最終的に変換できなくなった時点で、それが「所望の結果」になっているというものだ。結局のところ、「問題を解く」というの多くはそういうこと、そいう”パターン”が多いのかもしれない。
それにしても、Solve[x^2-3x==1,x]と検索してみると、その答えを教えてくれる。それと同じように、"earthquakes near the Akashi-Kaikyō bridge"と検索すると、明石海峡大橋近くの地震に関する情報を教えてくれる。使ってみると、なかなかに楽しい。データベース、検索時に使う「関数(変換・作業を定義したもの)」「言葉」をユーザが追加していけたら、もっともっと面白そうだ。
そうすれば、ユーザの力で拡張させることができる・発展することができる「新しい検索エンジン」ができるに違いない。
2011-02-04[n年前へ]
■Wolfram|Alphaの機能をRubyから使う
Wolfram ResearchのWolfram|Alphaは、「科学・工学系の問いに答える」ことが得意な検索エンジンです。Wolframが長年開発して来た(データベース内の規則に沿ってパターンマッチングを繰り返すことでで)数式処理を実現するMathematicaと重なるところも多い、そんな検索エンジンです。
Wolfram|Alphaの機能は、開発者登録すれば、(2000クエリー/月という、少なく限られた処理数ですが)WEB APIとして試し・使ってみることができます。先日、WEB APIのVer.2.0版が公開されたので、試しに使ってみることにしました。
- Java
- Python
- Ruby
- Perl
- PHP
- .NET
- Mathematica
手順は、およそ、こんな具合です。まずは、 開発用APIコードを登録します。そして、各言語用ライブラリのダウンロードページから直接ライブラリをダウンロードするか、あるいは、gitから、
git clone git://github.com/ianwhite/wac.gitという具合に、Ruby用ライブラリをダウンロードします。このライブラリ"wac"は、処理の過程で"nokogiri"と"active support"を使うので、
sudo gem update --system sudo gems install nokogiri sudo gem install activesupportといった感じで、先にインストールをしておきます。(新しい)"active_support"ではなく、(古い)"activesupport"をインストールするのは、(後述する)delegateのエラー回避を簡易に行うためです。
そして、wac.rbの冒頭を
#require 'active_support' require 'activesupport'と書き換えます。つまり、古いActive Supportを読み込むように指定してやるのです。そのようにしてやらないと、"NoMethodError: undefined method `delegate' for…といったエラーメッセージに出くわすことになります。
後は、たとえばirbで、
irb >> require 'wac' >> Wac.appid = "ここにAPIコード" >> r = Wac.fetch 'solve[x^2+3==0,x]'とすると、
Result: x = ±(i sqrt(3)) ±(1.73205 i)という風に答えてくれますし、あるいは、
>> r = Wac.fetch 'obama birthday'と聞けば、
Result: Friday, August 4, 1961と、教えてくれるのです。
Mathematicaのパワーを使うことができるのは、とても魅力的です。「あなたのアイデア」+「Mathematicaのパワー」=「無限の可能性」という方程式を解いてみるのは、とても楽しいことに違いありません。コンピュータのデータベース・記憶力と、ヒトが持つ柔らかな発想を組み合わせれば、最強の何かを生み出すことができるはずです。