2008-06-03[n年前へ]
■「GPUを使った物理計算プログラム」と「スクリプト言語」
日経エレクトロニクスを読んでいると、「GPUを使った並列計算で物理シミュレーションを高速化」という記事があった。PC用のグラフィックボードに搭載されている描画処理LSI(GPU)での物理計算の解説記事で、流体などの挙動を粒子群として計算するプロメテック・ソフトウェアの計算ソフトウェアを題材に、GPUで物理計算をする効果や注意点などを解説したものだった。そういえば、つい最近、「NVIDAがGPUベースのレンダリングソフトNVIDIA Gelato Proを無償提供開始」というニュースもあった。
ところで、GPUを使ったシェーダプログラム言語であるGLSL (OpenGL Shading Language)に触れたときに感じた新鮮さは、「GLSLで書かれたプログラムは、実行時にコンパイルされる」ということだった。シェーダのソースコードを書き換えると、そのシェーダを使ったアプリケーション実行すると、その実行時にシェーダプログラムがコンパイルされ動くのである。
その感覚はとても新鮮で、「C言語のようでCでない変なスクリプト言語」をいじっているような面白い感覚を味わった。また、自然に並列計算される具合が、何だか非同期で動くアプリケーションをスクリプト言語で書く感じに似ているのだろうか、と感じたりもした。
JavascriptやRubyや…といったスクリプト言語を使うプログラマが、GPUを使ったプログラムをいじってみると、これが結構ハマったり楽しむことができたりするものかもしれない。
2008-06-06[n年前へ]
2008-06-22[n年前へ]
■ホッケー・パックの飛び方のナゾ
(チューインガムで作った)ラトルバックではないけれど、実際に再現させることは簡単にできるのだけれども、その動きの仕組みを説明しようとすると結構難しいことということが多い。いや、多いどころか、上手く説明できないことばかりが世の中には満ちているように思う。単純に言ってしまえば、「実際に起こる現象を理解・説明する力」というのが不足気味なわけだ。
そんな、「実際に再現させることはできても、その動きの仕組みを説明しようとすると結構難しい」ことの一つが、「ホッケー・パック」の飛び方だと思う。平面の上に置かれた扁平円板を叩くと、それが上に飛んでいく仕組みをきちんと説明しようとすると、これが結構難しい。ゴルフボールのように、ピンや芝生の上に浮いている状態の物体を打つのではなくて、あくまで摩擦抵抗の低い平面の上にある扁平円板を叩くのに、パックが浮かんで飛んでいく減少を定量的に話すのは、なかなかに難しいように思う。
パックがホッケー・スティックのブレードの先で回転することで(決して小さくない)回転モーメントを持ち、その回転モーメントがあることが前提で、スティック・ブレードの下部がホッケー・パック下部を押し、ブレード面を転がり浮かぶようにして、クルクル横に回転しつつ、パックが斜め上に飛んでいく…というような説明はできても、それを数式を書きながら、単純な形で説明してみろと言われたら、言葉に詰まってしまうに違いない。(参考動画)
ヘロヘロと縦回転をしながら情けなくパックが飛んでいってしまうことが多いように、頭の中で計算をしようとしてみても、どうしても「ヘロヘロと縦回転をしながら情けなくパックが飛んでいってしまったりする」のである。現実にも、あるいは、頭の中のシミュレーションでも、鋭くゴール上方隅に決まるようなシュートが打てたら良いのだけれども。
2008-07-18[n年前へ]
■エクセルでシミュレーション Vol.1 [静電界準備 編]
「表計算プログラムでシミュレーションをする」というのは、物理などにそれほど詳しくない人が、複雑な数式で記述された世界を感覚的を大雑把に・感覚的に理解するのに、とても向いています。もちろん、そこには、かなり単純であることなどの前提条件がいくつもあります。けれど、自分のコンピュータで、マウスを動かしキーボードを少し叩くだけで、物理シミュレーションができたりすると何だか少し嬉しくなりますし、その計算過程を通して、「自然なこの世界」を「自然に」納得できる、というのは(私たちのような勉強世界からの REST OF US にとっては)とても素晴らしいと思います。
ところで、現在では”表計算プログラム=マイクロソフトのエクセル(Microsoft Excel)”だと考える人も多いことでしょう。だから、上に書いたことを言い換えれば、「エクセルでシミュレーションをする」のは、とても楽しい勉強になるということになります。
自分自身でエクセルでシミュレーションをすることもたまにあります。また、「エクセルで物理現象のシミュレーションをする」という趣旨の講習会にも、何回も関わってきました。ふと、そういった場で得たことを一回整理してみようと思いました。そこで、一番初めの今日は、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」をしてみました。
まず、静電場を記述するポワソン方程式をテーラ級数展開することで離散化し、差分方程式に変えてみます。2次元世界を離散化するということは、エクセルの表がそうであるように「世界(画面)をセルで分割する」ということです。

上で(x,y座標空間での)差分方程式にしたものを、さらにエクセル(表計算ソフトウェア)で解くときのやり方を図解したものが下の図です。「ある点の電位(φ)は上下左右の電位の平均にその点の(係数がかかった)空間電荷を加えたもの」になっているわけです。

また、2種類の境界条件(電位を指定するディリクレ条件/電界を指定するノイマン条件)をどのようにエクセル上で処理するか、というのが下の部分になります。
こういったセルの値が「(そのセル自身を含む)セル間の関係式」で表わされるような計算式を解くためには、エクセルの設定で「反復計算を行う」という設定を有効にしておく必要があります。エクセルのバージョンによってその設定メニュー場所は違いますが、たとえば、下の画面はExcel 2003の設定ダイアログの例です。
以上で、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」が終わりましたから、次は実際に「身近な静電界」をエクセルでシミュレーション計算してみたいと思います。
2008-07-19[n年前へ]
■エクセルでシミュレーション Vol.2 [静電界計算の動画 編]
エクセルでシミュレーション Vol.1 [静電界準備 編]で、(ポワソン方程式で表わされる)静電場の計算をエクセルでする準備作業ができたので、実際にエクセルで静電界計算をしてみました。どのような状態を計算してみたかというと、「夏の空に帯電した雲が生じた時の、地面から空へ向かう空間の断面の電場」の状態です。地面をグラウンド=0Vとして、空に電荷を帯びた雲が浮かんでいる状態を計算してみました。エクセルを使って、その計算シミュレーションをゼロから作り上げ、結果を描き終わるまでの8分弱の動画が下のものになります。また、mpeg形式の動画ファイル(65MB)もここに置いておきます。
夏の雷雲は負の電荷を帯びていることが多い、といいます。上のシミュレーション条件では、(動画を見ればわかるように、式後半に正電荷を入れましたから)雲の部分に正電荷を帯びさせましたが、そこは正負をひっくり返せば良いだけです。夏の日、暑い午後、都会や田舎の空に雷雲が見えてきたら、そのときの電場シミュレーションを(突然の落雷による停電に気をつけながら)PCのエクセル上でしてみるのも、気分転換になるかもしれません。






