hirax.net::Keywords::「エクセルでシミュレーション」のブログ



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評価項目を見事に上手く兼ね備えているのである。

安い・旨い・早い






2009-05-30[n年前へ]

エクセルのマルチスレッド機能 

 Microsoft Excel 2007 を使っていると、前のバージョンとは違い、マルチスレッドの設定ができることに気がついたのです。そこで、試しに、以前遊んだ「エクセルでシミュレーション」シリーズのワークシートを使い、CPU数=1にした時とCPU数=2にした時の速度比較を行ってみました。「10×10ほどの小さな空間分割でポワソン方程式を差分法で解く」というワークシートで比較をしてみたのですが、計算時間にはまったく違いがみられませんでした。

 考えてみると、このワークシートの場合、セル間が循環参照されていて、単純に「独立に複数スレッドで(領域分割して)計算をする」というようなことはできそうにありません。これでは、マルチスレッド計算の効果が表れないのも、当然といえば当然です。

 そこで、次に、先ほどのワークシートを独立した2つの「10×10の空間」の電界計算をするものに変えてみました。といっても、つまりは、コピー&ペーストして、2つの領域を作ってみただけです。今度は(マルチスレッド機能のCPU使用数の違いで)計算時間に差が出るかと思いきや、・・・CPUの数によらず、やはりどちらも35秒ほどで、マルチスレッドの効果は現れませんでした。

 「エクセルに深入りしたらおしまい」「エクセルは時間泥棒」と常々思っているのですが、「エクセルのマルチスレッド処理の動きがどのようになっているか」を調べたくてたまらないのです。もちろん、そんなことを始めたりしたら「時間がなくなる一方」になってしまうわけですが・・・。

エクセルのマルチスレッド機能






2009-12-10[n年前へ]

エクセルでシミュレーション Vol.8 二次元非定常熱伝導問題を解こう 

 表計算ソフト(スプレッドシート)プログラムであるMIcrosoft Excelを使い、(VBAはもちろん関数も使わず)ただセル間の加減乗除演算のみで、二次元非定常熱伝導問題を解きで遊んでみることにしてみました。伝熱方程式を差分化し、二次元の非定常解析を行ってみる、というものです。二次元といっても、比較的薄い円形ベルト(シート)上のものが回転するというモデルで、ベルト(シート)の厚みが(ベルト内の熱拡散に対して)十分に薄いという仮定の下での近似を行った、と考えれば、(そういう条件下の)三次元非定常熱伝導問題を解いているとも言えるシミュレーション計算モデルです。

 計算領域は右のようなものになり、2本のローラにより回転駆動させている「下から5点のヒータで温められている茶色のベルト」という計算するモデルです。その概略を大雑把に描いてみたのが、上図になります。

 というわけで、下の動画が、「ベルトが回転し動き」「途中にあるヒーターでベルトを温め」「ベルトの平面内では熱伝導が生じ」「周りの空気とベルトの境界から熱が放熱され」・・・といった2.2秒の間に生じることをすべて計算し・結果刻々と表示するシートで非定常伝熱計算を行っているようすです。(熱伝導率等はテキトーな値です)

ちなみに、このシートは、毎年行われている「スプレッドシートを用いた電子写真シミュレーション実習」テキストの「有限差分法による定着プロセスの熱伝導計算(非定常問題)」で使う教材用シート(関連テキスト )にもとづいています。

 動画の上の部分が、10×20の領域に差分化されたメッシュの温度分布を数値で示しており、動画の下部部分には温度分布をグラフで示しています。このグラフを眺めていれば、20℃の室温下で5点のヒータにより温度を上げられていく(回転する)ベルトが、次第に温度分布を持ちながらやがて定常的な温度分布になっていくさまを見てとることができます。

 この計算シートは、熱伝導方程式

をCFL条件(Courant-Friedrichs-Lewy Condition)下で陽的に差分化し、エクセルの反復計算を用いることで、解いています。しかも、メッシュ間の計算は、ヤコビ法を用いた計算を行っています。

 「メッシュ間の計算は、ヤコビ法を用いた計算を行っている」と、ひとことで書きましたが、これは実は凄いことです。なぜかというと、エクセルは(セル間の循環参照がある場合に用いる)反復(収束)計算時には、表の左上をスタート地点として「Zの法則 」の順序にしたがって(つまり、左上→右、そして一個下の行をまた左→右という順番で)逐次的に解くということをします。つまり、何も考えずにただ自分のセルの周囲との演算を行うと、「あるセルの計算を行うときには、自分の上と左のセルはすでに値が更新され新しい値が入っているが、右と下のセルはまだ古い値が入っている」という状態になります。つまり、ガウス・ザイデル法で計算されることになります(ヤコビ法は全セルの古い値を用いて計算を行った後に、全セルの値を新しい計算結果で置き換えますが、ガウス・ザイデル法は各メッシュ(セル・格子点)の計算を行ったら、その計算結果を、次のメッシュの計算時に即時に反映させて計算を行います)。

 定常問題を解くならガウスザイデル法で収束するまで反復計算を行うので構いませんが、非定常問題を解くのにガウスザイデル法を用いてしまうと、正確ではない間違った温度傾斜が生じてしまいます。それは、少し困ります(しかし、現在出版されている”表計算+差分化 熱伝導”書籍は、多くがガウスザイデル法を用いています)。

 というわけで、この計算シートではグラフの下に(動画の)上のメッシュ部分をコピーするだけのセルがあり、上のメッシュ部分は「自分の周囲に相当する下のメッシュを用いてメッシュ間の計算を行う」という仕組みになっています。こうするとなぜ、ガウスザイデル法でなく、ヤコビ法の計算になるかは、「エクセルの反復計算時のセル間の計算順序」を念頭に置いて考えてみると、「なるほど!」と納得できると思います。「道具を理解し使いこなす」ということの意味を、心から実感させられます。

 だから、この二次元非定常熱伝導問題を解くエクセル・シートは、とても「単純明快な計算がされているだけ」なのですが、実に巧妙に考え抜かれた上で作られた「素晴らしき一品」です。しかも、セルを少しづつ書き変えていくことで、かなり実用的な計算もできるのです。このシートを見たときには、本当に驚かされました。

 「どんな風に書きかえると何がわかるか」とか「さらにこんなこともできる」といったことは、明日にでも書いてみようと思います。(というわけで、この続きとして、温度が時間を追って上昇していく機能も付けてみました

エクセルでシミュレーション 二次元非定常熱伝導問題を解いてみようエクセルでシミュレーション Vol.8 二次元非定常熱伝導問題を解こう






2009-12-11[n年前へ]

エクセルでシミュレーション Vol.9 二次元非定常熱伝導問題の温度変化グラフも作ってみよう 

 この記事は、「エクセルでシミュレーション Vol.8 二次元非定常熱伝導問題を解こう」の続きです。前回の記事では、比較的薄い円形ベルトが回転するモデルで、ベルトの厚みがベルト内の熱拡散に対して十分に薄いという仮定の下での近似を行ったと考えると)三次元非定常熱伝導問題を解いているとも言えなくない・・・というような二次元非定常熱伝導問題を解く、エクセルの表計算シートを作り眺めてみました。もちろん、VBAはもちろん関数も使わず、ただセル間の加減乗除演算のみで、熱伝導方程式を差分化したものです。

 今日は、計算領域の任意の部分の温度変化をグラフにする部分を前回のエクセルシートに追加してみようと思います。つまり、ベルト状に温度センサでも貼り付けたら、時々刻々と一体どんな温度が測定されるのかをシミュレーション計算時に表示させたい、というわけです。

 このような需要は非常に多くあると思いますが、一体それをどのようにすれば作ることができるでしょうか?エクセルのシート上は、非定常問題を解いているので、その瞬間その瞬間の温度分布しかデータが残っていないように思われ、スタート時からの温度変化をグラフにするのは難しいように思えてしまいます。

 しかし、「ガウスザイデル法でなく、ヤコビ法を用いて反復計算を行うために使ったテクニック」、すなわち、

 エクセルは(セル間の循環参照がある場合に用いる)反復(収束)計算時には、表の左上をスタート地点として「Zの法則 」の順序にしたがって(つまり、左上→右、そして一個下の行をまた左→右という順番で)逐次的に解くという計算順序になります。
ということを利用すると、「計算領域の任意の部分の温度変化をグラフにする」ということが、いとも簡単に実現できてしまうのです。種明かしは後回しにして、まずはそのようなことをしているエクセルシート動画を下に張り付けてみます。動画の上部分は前回と同じく「回転するベルトを平面上の等高線色付きグラフとして表示したものです。そして、その下にあるのが、「等高線色付きグラフ右横部にある灰色円部分」の温度変化を横軸:時間・縦軸:温度で時系列グラフにしたものです。

 下の折れ線グラフを見れば、「等高線色付きグラフ右横部にある灰色円部分」の温度が時間を追って上昇していくようすをよく理解することができるのではないでしょうか。

 種明かしはこうです。エクセルのシートのずっと下方(下の行のセルに)"=温度変化を知りたいセル"という式を入れます。ここでいう温度変化を知りたいセルというのは、たとえば、X24といったセルを示す番号です。ですから、実際に(一番下のセルに)入れるのは、"=X24"といったものになります。

 そして、そのセルの上にあるセルをクリックし、=と入力した上で、その下のセルをクリックし"Enter"を押します。つまり、一個下の(さきほど"=X24"という式を入力した)セルを参照するようにするのです。そして、そのセルを選択した上で、上の方までズルズルズル~とコピーしてしまいます。

 エクセルの(セル間の循環参照がある場合に用いる)反復(収束)計算時の計算順序を考えてみれば、今「ズルズルズル~とコピー」を行った列には、「古い計算結果が上、一番下が最新の計算結果」という順序のデータが格納されていくことになります。(上から下に計算が逐次行われていることを考えると)計算ステップごとに、一個値が上に移動していくので、結果としてそのように時系列的なデータを保持できる、というわけです(結局のところ、ヤコビ法を用いるために、バッファエリアを下に設けたのと全く同じパターンです)。

 あとは、計算スタート時点からの(シミュレーション上の)経過時間なども同じように作り、散布折れ線図でも挿入すると、「上記のような「任意の部分の温度モニター機能付きの疑似三次元非定常熱伝導問題を解くエクセルシートのできあがり」となるわけです。もちろん、温度モニターは(上段で行ったことを他のセルに対してもしてやるだけで)いくつでも設置することができます。実に単純・簡単な(けれど巧妙な)実装ですがとても便利な機能です。

 さて、ベルトの温度モニター機能も付きましたので、今度はセンシングしたベルトの温度を用いて、ヒーターの温度を(まずは簡単なPID制御でも使って)制御しベルトの温度分布を適正に調節する機能例でも、簡単に実装し(ハードウェアをいじっている)気分にでも浸ってみることにしましょうか。



■Powered by yagm.net