見出し画像

プログラミングとシミュレーション

複雑な物理現象や自然現象を解明する場合、最初にすることは”現象の規則性を見つけること”です。不規則な現象の場合、その現象を簡単には解明できませんが、あるルールに基づいた規則性があれば、それを数式にすることができます。科学では”モデル”という言葉を使いますが、最初の現象が”物理モデル”で、それを数式化したものが”数学モデル”です。ここまでの作業は手作業です。

現在、多くの物理現象が数学モデル化されています。数学モデルで出てくる数式が微分方程式や偏微分方程式です。一方向にしか物理パラメータが変化しない、いわゆる”一次元モデル”では、微分方程式や偏微分方程式を数学的(解析的)に解くことができます。解析的に解くというのは、物理モデルを計算可能な数式にまで落とし込むことです。ここまで来れば、物理パラメータを少しづつ変えながら、色々な物理現象を”事前に試す”ことができます。これがシミュレーションです。シミュレーションは英語の綴り simulation からもわかるように、シュミレーションではなく、シミュレーションです。

一次元的な物理現象は、解析的に解くことが出来て、シミュレーションも比較的簡単ですが、物理モデル/数学モデルが2次元・3次元となると、特殊な場合を除いて解析的に解くことが出来ません。そこで活躍するのが、数値的なシミュレーションです。解析的に解かれた数式は、多くの場合、滑らかで連続していますが、数値シミュレーションの場合は物理モデル/数学モデルを”飛び飛び”の点で代表させます。これを離散化と言います。

モデルを離散化して数値シミュレーションを行なう代表的な技法には、1)有限要素法、2)有限差分法、3)境界要素法 などがあります。その他にもマイナーな手法は数多く存在します。ここでは個々の手法の解説はしませんが、近年、プログラミング技術の向上とコンピュータの性能向上があって、シミュレーション技術は昔に比べるとかなり向上しました。

数十年前までは、3次元の計算は”大型計算機センター”の大型コンピュータでしか計算できませんでしたが、今なら普通のPCでも計算できてしまいます。また、ゲームの世界で独自の進化を遂げたGPU(グラフィックプロセッサ)などの技術革新もあって、個人でもひと昔前のスーパーコンピュータ並の計算ができるようになりました。ビットコインで有名になった仮想通貨などのマイニングの計算には、GPUを搭載したPCが活躍しています。

シミュレーション技術が進化して、高性能な有償/無償のシミュレーションツールが続々登場しています。そのため、”物理現象”を理解していなくてもシミュレーションすることができます。これは、自動車の内部構造を知らないのに運転できてしまうことと同じです。”物理現象”を理解しないシミュレーションは、私の中では『ナシ寄りのアリ』という位置付けです。全否定するつもりはないのですが、この手のシミュレーション(モドキ)には、危険が伴います。

以前、地中レーダに応用するため、電磁波のシミュレーションをテーマにしたことがあったのですが、練習問題として出した課題の計算結果がトンデモナイものでした。学生さんが「計算が出来ました」と言って持ってきたのは、光速を超えるような電磁波速度でした。私は一目見て計算が失敗していることがわかりましたが、その学生さんは何がオカシイのかピンと来ていないようでした。

シミュレーションを理解するための一番の近道は、自分でプログラムを作ることです。市販のプログラムはお手軽に使えますが、中身がブラックボックスになっていて、勝手に改造することは出来ません。その点、自作したプログラムなら、自分の研究に合うように自由に改良・改造できます。

「青年よ、コードを叩け!」

この記事が気に入ったらサポートをしてみませんか?