2006-08-07[n年前へ]
■「電子写真技術のシミュレーション」
日本機械学会 情報・知能・精密機器部門企画の講習会「電子写真技術のシミュレーション(リンク先はPDFファイル)」に閑古鳥が止まっているようです。9月4日(月)・9月5日(火)に早稲田大学 大久保キャンパスで開催されるこの講習会、特に二日目の「伝熱解析の講習」は一見の価値があると思います。興味のある方は、二日目だけでもいかがでしょう?そして、できれば、(そのついでに)二日目午後の「オッパイ星人講習」も聴いて頂ければ、とも思いますが…。
2007-04-29[n年前へ]
■「無名関数」と「吾輩は猫である」
夏目漱石の「吾輩は猫である」は、雑誌「ホトトギス」に1905年1月に発表された。最初は、冒頭の章だけで完結する短い読み切り小説だった。
吾輩は猫である。名前はまだ無い。 …吾輩がこの家へ住み込んだ当時は、主人以外のものにははなはだ不人望であった。どこへ行っても跳ね付けられて相手にしてくれ手がなかった。いかに珍重されなかったかは、今日に至るまで名前さえつけてくれないのでもわかる。数学ソフトウェア Mathematica でプログラムのスケッチ(素描)を作りながら、「この「名前はまだ無い・名前をつけてくれない」という言葉が頭の中に浮かんだ。
「吾輩は猫である」を連想したのは、Mathematicaの「純関数」の勉強のための練習題材を書いていたときだ。Mathematica の入門・中級の講習会に参加すると、この純関数とやらが登場した途端に、講師が話す内容を見失ってしまうことが多い。講師の筋道が見えなくなってしまう理由は、純関数の必要性・存在価値といったものが今ひとつわからないままに、純関数がいきなり登場してくるからである。もちろん、「(数値でなく)関数を引数として与える」ということに慣れていない生徒が多いこともあって、いつも、純関数が登場した瞬間に、何かその場が失速したような感覚を受ける。
話の流れ・必然性がなくても、文法をただ暗記することができる人であれば、おそらく何の問題もないのだと思う。あるいは、他のプログラミング言語をよく知っていて、文法の必然性が自然と理解できる人たちであったなら、これもまた問題は起きないのだろうと思う。しかし、私も含めて、入門・中級の講習会に来ているような、そうでない多くの人たちの場合は、純関数が登場した途端に、話についていけなくなることが多いように感じるのである。
Mathematica における純関数 "Pure Function" というのは名前(シンボル)を持たない関数で、ほかの関数への引数などとして、関数の内容を書いた一瞬だけ使われるものだ。もう少し違う呼び方をしてしまえば、つまりそれは「無名関数」だ。「無名」というところが重要で、名前がないから、使ったら最後もう二度と呼ぶ・使うことはできない、ということである。つまりは、「使い捨ての関数」だ。この「関数を使い捨てる」というところで、どうしても引っかかってしまう。値を入力するのであれば、あまり考えることなどせずに、数字キーを2・3回押せばすむ。だから、値に名前(シンボル)と付けずに、使い捨てにすることには慣れている。けれど、関数を書く場合には、(ハッカーでない私たちは)頭も多少使わざるをえない。すると、せっかく考えて・苦労して書いたのだから、名前をつけて、あとで呼んでまた使うことができるようにしたい、などと思ってしまうのである。使い捨ての「無名」ということと、苦労をともなう「関数」ということを、なかなか重ね合わせることができないのである。
そこで、自分なりの「純関数の存在価値・意義」を作ることで、その存在意義を納得したくて、純関数を使った例題を作ってみた。実は、それが前回の Spectrum Color Conversion を動かしているベース部分、「離散化を必要としない連続的なスペクトル演算・表示を扱うためのパッケージ」である。これは、無名関数(純関数)を使うための例題である。このパッケージを使うと、スペクトルを描くのに、
plotSpector[ (128 red[#] + 255 blue[#])& ];というような命令でスペクトルを描くことができる。これは「強度128の赤色と強度255の青色を足したスペクトル」を描けという命令なのだが、この中の
(128 red[#] + 255 blue[#])&という部分が、「強度128の赤色と強度255の青色を足したスペクトル」を表す無名関数だ。あるいは、
rgb=fitSpector[(D65[#]-128 cyan[#])&,red,green,blue]というのは、「シアン色が128載せられた色」を、赤色と青色と緑色で近似しろという命令であるが、この (D65[#] - 128 cyan[#])& というのも、「シアン色が128載せられた色」という無名関数である。こういう書き方をしてみると、スペクトルを示す「関数」ではあるが、見方によっては、スペクトルという「値」のようにも見えると思う。値のように見えることで、スペクトルを示す無名関数を引数として他の関数(命令)に渡すことへのアレルギーを低減してみようとしたのである。そして、(128 red[#] + 255 blue[#])& というようにあまり考えることなく直感的に無名関数を書くことができるようにすることで、その関数を使い捨てることへの違和感を減らそうとしてみた。さらに、こういった内容であれば、下手な名前をつけてしまうよりも、式そのままの方が内容・意味がわかりやすい、ということを実感してみようとしたのである。たとえば、(128 red[#] + 255 blue[#])& であれば、この式自体が「強度128の赤色と強度255の青色を足したスペクトル」という風に話しかけてくるように感じられ、下手に名前をつけてしまうよりは内容が見えることがわかると思う。
こんな例題を作ることで、無名関数アレルギーが低減した、と言いたいところなのだけれど、関数を使い捨てることには、やはりまだ慣れることができそうにない。関数を引数として渡すことは自然に感じられるようになっても、無名関数に名前をつけて、再度その関数を呼んでみたい気持ちはなかなか止められそうにない。名前をつけるより、その関数の中身をそのまま書いた方がわかりやすいとわかっていても、単純な名前をつけてしまいたくなる欲望はなかなか止められそうにない。
その理由を考えてみると、やはり、苦労をともなう「関数」を使い捨ての「無名」にしてしまう、ということに一因がある。そして、もう一つ、名前をつけることで、単純化して安心してしまいたくなる、ということがあるように思う。ほんの何文字かの関数であっても、その内容を自分の頭で考えるよりは、なにがしかの単純な言葉で表現された関数名を聞いて納得したくなることがあるように思う。
「吾輩は猫である」の第一章の最後、つまり、当初の読み切り短編小説「吾輩は猫である」はこのように結ばれる。
吾輩は御馳走も食わないから別段 肥りもしないが、まずまず健康でびっこにもならずにその日その日を暮している。鼠は決して取らない。おさんは未だに嫌いである。名前はまだつけてくれないが、欲をいっても際限がないから生涯この教師の家で無名の猫で終るつもりだ。「吾輩は猫である」を思い浮かべながら、無名関数について考えたせいか、それ以来、無名関数が「吾輩は~」と話しかけてくるような気がするようになった。無名関数を書くと、どこかで世界を眺めながら、「我が輩は青色と緑色を足した色である。名前はまだない」「名前はまだつけてくれないが、欲をいっても際限がないから生涯ここで無名で終るつもりだ」と無名関数が呟いているさまが目に浮かぶようになった。存在意義はあるけれど、無名のままの関数、そんなものを思い浮かべながら作ったのがSpectrum Color Conversion である。
2008-07-18[n年前へ]
■エクセルでシミュレーション Vol.1 [静電界準備 編]
「表計算プログラムでシミュレーションをする」というのは、物理などにそれほど詳しくない人が、複雑な数式で記述された世界を感覚的を大雑把に・感覚的に理解するのに、とても向いています。もちろん、そこには、かなり単純であることなどの前提条件がいくつもあります。けれど、自分のコンピュータで、マウスを動かしキーボードを少し叩くだけで、物理シミュレーションができたりすると何だか少し嬉しくなりますし、その計算過程を通して、「自然なこの世界」を「自然に」納得できる、というのは(私たちのような勉強世界からの REST OF US にとっては)とても素晴らしいと思います。
ところで、現在では”表計算プログラム=マイクロソフトのエクセル(Microsoft Excel)”だと考える人も多いことでしょう。だから、上に書いたことを言い換えれば、「エクセルでシミュレーションをする」のは、とても楽しい勉強になるということになります。
自分自身でエクセルでシミュレーションをすることもたまにあります。また、「エクセルで物理現象のシミュレーションをする」という趣旨の講習会にも、何回も関わってきました。ふと、そういった場で得たことを一回整理してみようと思いました。そこで、一番初めの今日は、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」をしてみました。
まず、静電場を記述するポワソン方程式をテーラ級数展開することで離散化し、差分方程式に変えてみます。2次元世界を離散化するということは、エクセルの表がそうであるように「世界(画面)をセルで分割する」ということです。
上で(x,y座標空間での)差分方程式にしたものを、さらにエクセル(表計算ソフトウェア)で解くときのやり方を図解したものが下の図です。「ある点の電位(φ)は上下左右の電位の平均にその点の(係数がかかった)空間電荷を加えたもの」になっているわけです。
また、2種類の境界条件(電位を指定するディリクレ条件/電界を指定するノイマン条件)をどのようにエクセル上で処理するか、というのが下の部分になります。
こういったセルの値が「(そのセル自身を含む)セル間の関係式」で表わされるような計算式を解くためには、エクセルの設定で「反復計算を行う」という設定を有効にしておく必要があります。エクセルのバージョンによってその設定メニュー場所は違いますが、たとえば、下の画面はExcel 2003の設定ダイアログの例です。
以上で、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」が終わりましたから、次は実際に「身近な静電界」をエクセルでシミュレーション計算してみたいと思います。
2008-08-05[n年前へ]
■エクセルでシミュレーション Vol.6 「夏にフライパンで卵焼き 編」
「表計算ソフトウェアでシミュレーションをする」という講習を見続け、何よりも面白かったのが「非定常の3次元熱計算を簡単に、それでいて、できる限りきちんと計算をやってみよう」という(I氏が講師の)シリーズです。
一次元非定常の熱拡散問題を陰的解法で解く「熱伝導方程式を表計算ソフトで解くサンプル」は多いように思いますが、「非定常の3次元熱計算を表計算ソフトウェアで解く簡単にやるテクニック・サンプル」は、(私は)他では見たことがありません。しかも、このシリーズは本当に簡単で、なおかつ、できる限り精度を保証して解く、というとても稀有な例です。「難しい問題」を「簡単に」「きちんと」「精度を保証して」解く…といったようなものたちは相反することが多いわけですから、そういったものを兼ね備えているというのは、とても珍しいと思うわけです。
下の例は、そのテキストを利用して、陽的解法で安定性条件が成り立つようにして、「夏の朝に、角型フライパンをコンロで加熱した際のフライパン温度分布」を計算した例になります。ある厚みを持ったフライパンが、コンロのガスの炎が当たっている部分が「100度」に(熱)されているような条件の時、フライパンの温度分布が時々刻々と変わっていくようすを計算した結果です。こんな計算をエクセルで数回しておけば、「美味しい卵焼きを作るための最適条件・最適なやり方」を導き出すことだってできるかも、と思わされるのです。エクセル上で、フライパンの厚みや熱伝導度を変え、コンロの炎分布を色々変えてみたりしたならば、究極・至高の卵焼きを作るための最適・必須条件が見つかるかもしれない、と楽しく思えてきたりします。
ところで、この「非定常3次元熱計算」のエクセルシートは、本当に簡単に作ることができるのですが、その一方で、このシートは(簡単なのに)実に巧みに作られています。だからこそ、「難しい問題」を「簡単に」「きちんと」「精度を保証して」解くことができるわけです。
その「巧みさ」を紐解いてみると、これが実に綺麗なパズルのようで、とても面白いのです。・・・というわけで、その「巧みさ」「面白さ」についての感想文は、また後ほど書いてみようと思います。
2008-08-06[n年前へ]
■エクセルでシミュレーション Vol.7 「吉野家の法則 編」
「安い」「早い」「旨い」を兼ね備えたものは売れる、というのが「吉野家の法則」の第1法則である。けれど、それら3つのことは相反することが多いために(「吉野家のジレンマ」)、それら3つのうち最低2つのものがあれば売れることが多い、というのが「吉野家の法則」の第2法則だ。
「表計算でシミュレーション」というお題で、この吉野家の法則の「安い」「早い」「旨い」を考えてみよう。
まずは「安い」である。それを言いかえれば、「簡単に手に入れることができる」ということだ。まず、「表計算でシミュレーション」はこの「安い」という条件を非常に上手く満たしている。
- 表計算ソフトウェア・エクセルを持っている人は多いから、必要な道具を手に入れることが簡単である。
そして、次の「早い」である。これを言い換えてみると、「すぐにできる」ということだ。「表計算でシミュレーション」をする場合には、たとえば、時間的に変わらない(定常な)問題であれば、比較的簡単に計算シートを作ることができる。だから、すぐにできるようなシートを作ることができる範囲内では、「表計算でシミュレーション」というものはとても「早い」のである。ただ、あくまで「比較的簡単に計算シートを作ることができる範囲内では」ということが少し尾を引くのである。
問題は、最後の「旨い」である。これは、多分、2つの意味がある。ひとつは単純に「実利的なメリット」だ。つまり、たとえば「すぐに仕事に使える」というようなことになる。そして、もう一つは「心としてのメリット」である。それは、たとえば「面白い」「意外だ」「へぇ~」といったような感覚を得ることだと思う。
先の「比較的簡単に計算シートを作ることができる範囲内では」という先の制限は、これらふた種類の「旨い」と相反することが多い。それが、「表計算でシミュレーション」における吉野家のジレンマなのである。すぐに仕事で使うためには、「定量的に計算結果が正確である」ようなことが要求される。しかし、そうしようとすると、シートを作るのが面倒だったりして、「早い=すぐにできる」ではなくなりがちになってしまう。
また、「早い=すぐにできる」ようなものは、比較的「当たり前」の計算結果が出てくる。たとえば、等方・等質的な空間でラプラス方程式で解いた静電界計算結果などは、「見た目にいかにも”自然”なもの」になる。それが”自然”なのだから、それでいいではないか、とも思う。しかし、その一方で、それでは意外性も何もなく、「へぇ~」「面白い」という感じを受けないのである。
このように、「安い」「早い」「旨い」という吉野家提供の三つの評価軸から、「表計算でシミュレーション」を眺めてみると、「表計算でシミュレーションをする講習」が持ちがちな悩みが見えてくる。「早い」と「旨い」の兼ね合いの難しさが見えてくる。
昨日の『エクセルでシミュレーション Vol.6 「夏にフライパンで卵焼き 編」』の場合は、腕が良いシェフ(I講師)吉野家の法則の3評価項目を見事に上手く兼ね備えているのである。