| サイトマップ | |
||
国立大学法人富山大学 学術研究部理学系 秋山 正和 准教授 |
教育としては主に、数学科の学生に対しての授業やゼミを行っています。簡単なプログラミングを教えたり、計算結果を可視化する方法を扱ったりしますが、その際MathematicaやC言語を使っています。
研究は、生物の形作りの仕組みを数理的に表現するモデルを作り、コンピュータを使って解くことで本質に迫ろうとしています。
生物以外では、金属や氷を代表とするような結晶構造がどのような仕組みでできているのかをシミュレーターを作りながら研究しています。
授業の教材を作る場面でよく利用しています。例えば物理の力学の問題で、物体がある曲面上を滑るような運動を考えます。支配方程式の導出は板書で行い、さらに簡単な例であれば手計算で解くことにもチャレンジします、しかしそれだけでは学生にイメージが伝わらないことがあります。このような時、Mathematicaを使います。
図1は、曲面上を運動する質点の位置を計算し、可視化も同時に行うプログラムで作成されたものです。曲面上の任意の位置を初期値として与え、その後にどのような運動が計算されるかを見ることで、方程式の持つ意味を直感的に理解できます。
次にN個の質点が紐でつながっているような振り子の運動を考えます。このような運動の支配方程式を手計算で求めるのは大変に多くの計算が必要です。ところが、Mathematicaに対して、この運動を記述するために重要な関数(ラグランジアン)を定義することで、支配方程式自体を自動的に計算することができます。
図2はN=2のケースであり、手計算でも何とか、支配方程式を導出できますが、N=5のケースではそれは数千行となります(図3の動画参照)。このような計算は、微分を記号的に計算可能なMathematica特有の機能かと思います。
|
他にも反応拡散方程式を自動的に解いてくれるソルバー(九州大学の三浦岳先生が作成されています)、常微分方程式のパラメータを自動的に探索してくれるプログラム、主成分分析のプログラム、大規模数値計算をするためのメッシュ生成のためのプログラムなどを作っていますが、これらは研究やデータ分析でも使用しています。
二十数年前ですが、私が高校生の頃にVersion3を使ったのがきっかけです。数学の教科書に載っているすべての関数を手計算で微分し、増減を調べたりして描くのが好きな少年でしたが、その検算のためによく使っていました。
厳密性ではないでしょうか。例えば、整数の問題では、Mathematicaは計算メモリの許す限り、厳密な評価を行うことができます。近似計算でも、有効桁数や精度を指定できるので、浮動小数点のどこまでが確かな桁なのかを知ることができます。このようなことは、単純なC言語/Pythonでは難しい計算です。 また、私は特定の用途に使用可能な分析ツールをMathematicaでプログラミングし、共同研究者に差し上げたりします。この際、C言語/Pythonですと、アプリの設定、コンパイラなど環境構築をしなければいけないのですが、MathematicaはどんなPCでも同じように動作するため、設定が楽ですね。これが良いところではないでしょうか。
計算速度改善と、反応拡散方程式への対応です。Mathematicaはインタープリタであるため、とってもとっても遅いです。もちろん、ある程度は関数であるCompile機能を使えば速くなりますが、そうであったとしても、C言語と比較すれば少なくとも100倍は遅いです。反応拡散方程式も九州大学の三浦先生が構築された方法で、一部の問題はMathematicaでも計算することができますが、それでもメッシュサイズは非常に小さく、第一線の研究レベルで使えるものではありません。夢ではありますが、Mathematica関数として反応拡散方程式を高速に計算できるようになったらいいですね。
本事例作成に関し、秋山先生のご協力に感謝いたします。
(インタビュー:2024 年2 月)
※所属・役職は取材当時のものです。