hirax.net::Keywords::「ポワソン方程式」のブログ



2008-07-18[n年前へ]

エクセルでシミュレーション Vol.1 [静電界準備 編] 

 「表計算プログラムでシミュレーションをする」というのは、物理などにそれほど詳しくない人が、複雑な数式で記述された世界を感覚的を大雑把に・感覚的に理解するのに、とても向いています。もちろん、そこには、かなり単純であることなどの前提条件がいくつもあります。けれど、自分のコンピュータで、マウスを動かしキーボードを少し叩くだけで、物理シミュレーションができたりすると何だか少し嬉しくなりますし、その計算過程を通して、「自然なこの世界」を「自然に」納得できる、というのは(私たちのような勉強世界からの REST OF US にとっては)とても素晴らしいと思います。

 ところで、現在では”表計算プログラム=マイクロソフトのエクセル(Microsoft Excel)”だと考える人も多いことでしょう。だから、上に書いたことを言い換えれば、「エクセルでシミュレーションをする」のは、とても楽しい勉強になるということになります。

 自分自身でエクセルでシミュレーションをすることもたまにあります。また、「エクセルで物理現象のシミュレーションをする」という趣旨の講習会にも、何回も関わってきました。ふと、そういった場で得たことを一回整理してみようと思いました。そこで、一番初めの今日は、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」をしてみました。

 まず、静電場を記述するポワソン方程式をテーラ級数展開することで離散化し、差分方程式に変えてみます。2次元世界を離散化するということは、エクセルの表がそうであるように「世界(画面)をセルで分割する」ということです。


 この離散化された後の差分方程式は、つまり「セル間の計算(関係)式」ですから、「2次元静電場を記述するポワソン方程式を、(エクセルの)セル間の計算式で解く」ことができることになります。

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



 また、2種類の境界条件(電位を指定するディリクレ条件/電界を指定するノイマン条件)をどのようにエクセル上で処理するか、というのが下の部分になります。

 こういったセルの値が「(そのセル自身を含む)セル間の関係式」で表わされるような計算式を解くためには、エクセルの設定で「反復計算を行う」という設定を有効にしておく必要があります。エクセルのバージョンによってその設定メニュー場所は違いますが、たとえば、下の画面はExcel 2003の設定ダイアログの例です。

 以上で、「静電界を記述するポワソン方程式をエクセルで計算するための前準備(事前確認)」が終わりましたから、次は実際に「身近な静電界」をエクセルでシミュレーション計算してみたいと思います。

ポワソン方程式の離散化2次元電界を表計算で解くエクセルの反復計算・手動計算のダイアログ設定






2008-07-19[n年前へ]

エクセルでシミュレーション Vol.2 [静電界計算の動画 編] 

 エクセルでシミュレーション Vol.1 [静電界準備 編]で、(ポワソン方程式で表わされる)静電場の計算をエクセルでする準備作業ができたので、実際にエクセルで静電界計算をしてみました。どのような状態を計算してみたかというと、「夏の空に帯電した雲が生じた時の、地面から空へ向かう空間の断面の電場」の状態です。地面をグラウンド=0Vとして、空に電荷を帯びた雲が浮かんでいる状態を計算してみました。エクセルを使って、その計算シミュレーションをゼロから作り上げ、結果を描き終わるまでの8分弱の動画が下のものになります。また、mpeg形式の動画ファイル(65MB)もここに置いておきます




 夏の雷雲は負の電荷を帯びていることが多い、といいます。上のシミュレーション条件では、(動画を見ればわかるように、式後半に正電荷を入れましたから)雲の部分に正電荷を帯びさせましたが、そこは正負をひっくり返せば良いだけです。夏の日、暑い午後、都会や田舎の空に雷雲が見えてきたら、そのときの電場シミュレーションを(突然の落雷による停電に気をつけながら)PCのエクセル上でしてみるのも、気分転換になるかもしれません。




計算結果






2008-07-20[n年前へ]

エクセルでシミュレーション Vol.3 [夏の午後の雷雲の下 編] 

 エクセルでシミュレーション Vol.2 [静電界計算の動画 編]で、「地面と空に浮かぶ雷雲」を含む世界の静電場計算を行うエクセルシートを作ってみました(あくまで2次元ですが)。そこで、前回とは少しだけ違う”いかにも夏らしい”2つの例を計算してみました。

 まず最初の計算は、地面の上に人が立っている状態です。空を見上げると、頭の上には雷雲が広がっていて、いかにも不安を感じている状態です。



 計算結果を見ればわかるように、人体部分に電界が集中していて、すぐにもカミナリに打たれてしまいそうなことがわかります。

 これは怖すぎる……というわけで、人の少し横に避雷針を立ててみたのが、次の例になります。高さのスケールが少し変に見えますが、そこら辺は適当に無視しておいて下さい。とにかく、人の少し横に避雷針を立ててみたわけです。



 すると、今度は避雷針の先には強い電界が集中していますが、人がいる部分ではほとんど電位変化がないことがわかります。ということは、カミナリに打たれる心配もなく(といっても近くに落ちるカミナリはやはり怖いですけれど)安心していられる……ということがわかるわけです。


 そういえば、もう夏ですね。日差しを強く感じる暑い午後に空を見上げると、いつも白い積乱雲が見えます。暑い夏を楽しみつつも、夏バテにはお気をつけください。


夏の雷雲の下の人夏の雷雲の下の人(避雷針付き)






2009-07-14[n年前へ]

「エクセルで電界シミュレーション」と「ウィンドウ半透明化マクロ」 

 「各種方程式を差分化する方法を学び、実際に表計算ソフトで電界シミュレーションと伝熱シミュレーションをできるようになろう」という講習会を手伝う準備をした。準備のひとつに、受講者の実習作業を前もってやってみる、というのがある。すると、どの部分がわかりにくいとか・難しいとかいったことがわかる。

 表計算ソフトで電界シミュレーションをする時に、「わかりにくい」と感じる部分のひとつが、複合誘電体の電界計算だ。差分化の仕方と、その差分化されたものを表計算ソフトへどのように実装するかにもよるが、今行っている実習では複合誘電体の電界計算部分に、わかりにくい部分がある。

 その実習では、ポワソン方程式を解くために、エクセルの3つのワークシートを使う。電位を計算するシート・空間の各領域における誘電率分布を入力するシート・空間の各領域における電荷分布を入力シート、という具合である。そして、わかりにくいのが、「電位分布シート」と、「誘電率分布シート」「電荷分布シート」、のセルの空間的な意味が少し異なる、ということだ。「電位分布シート」の各セルが空間上に一定長刻みで作られた各格子「点」を意味するなら、「誘電率分布シート」「電荷分布シート」では、各セルは格子で囲われた各領域を示すのである。各セルの意味合いが異なる結果、空間的な位置は、「電位分布シート」に対して「誘電率分布シート」「電荷分布シート」のセルは「半セル分」ずれることになる。そのズレが一番最初はわかりづらいのである。

 そこで、「Excel Hacks 第2版― プロが教える究極のテクニック140選」に載っていた「エクセルのVBAマクロからWindows APIを使い、エクセルのウィンドウを半透明化するテクニック」を使い、「電位分布シート」を開いたエクセルウィンドウを半透明化し、「誘電率分布シート」などと重ねて眺めてみることができるようにしてみた。それが、右上の画像と下の動画である。ひとつのファイルをふたつのエクセル(アプリケーション)から開いた状態で、「電位分布シート」を開いているエクセルでマクロを実行すると、「電位分布シート」の下に「誘電率分布シート」が透けて見える。そして、シート間の位置関係を正しく示すようにウィンドウを並べてやれば、各セルが示す「」場所のズレを体感できるだろう、というわけである。

 下の動画の場合は、「誘電率分布シート」には赤罫線がひいてあり、「電位分布シート」には青罫線をひいてある。そして、それらが半セルずれていることが体感できるようにしてみた。

 ちなみに、エクセルの半透明化マクロは、Windows API上の関数を定義した後に、

mywnd=FindWindow("XLMAIN", 
                 Application.Caption)
oStyle=GetWindowLong(mywnd,GWL_EXSTYLE)
SetWindowLong mywnd,GWL_EXSTYLE,
          oStyle Or WS_EX_LAYERED
SetLayeredWindowAttributes mywnd,0,
          (255*60)/100,LWA_ALPHA
という風にしてやることで、エクセルのアプリケーション・ウィンドウを半透明化させている。もしも、半透明化を戻したければ、
mywnd=FindWindow("XLMAIN",
         Application.Caption)
SetWindowLong mywnd,GWL_EXSTYLE,oStyle
というコードを実行すれば良い。それほど使う状況があるとは思いづらい"Excel Hack"だが、VBAマクロからWindows APIを叩けば、Excelからでも「どんなことでもできる」と思わせるサンプルとして、結構面白い。

エクセルVBAでウィンドウ半透明化








■Powered by yagm.net