中高生向け数値シミュレータ パソリカ
代表者 飯田一輝
内容
福井大学大学院工学研究科
中高生向け数値シミュレータ パソリカ
代表者 飯田一輝 (福井大学大学院工学研究科)
本ソフトウェアは中学・高校生さらに大学生が学校で履修する理科をコンピュータでシミュレーションし、グラフィカルに表示する基本ソフトウェアである。ユーザーである教員が設定ファイルを用意し、本ソフトウェアに読み込ませることで、様々なシミュレーションに対応する。設定ファイルには主に計算式とその表示方法を記述する。
また、本ソフトウェアにはWindows版、Linux版、Mac版があり、非常に多くのOS上で動作する。ソースコードも公開するため、改良・改造や他のOS向けに再コンパイルし直すことも可能である。
また、ここではパソリカの開発のために製作した可視化ライブラリ「mlib」とその応用についても述べる。mlibはパソリカの描画部分を担う独立したクラスライブラリである。mlibを用いることで比較的容易にグラフィカルなシミュレータを製作する事が可能である。実際に代表者が所属する研究室においてmlibを研究に使用していただいた。その結果、好評を得た。
U パソリカの概要
一般的に普及しているパソコンはWindowsだが、近年では大学などの教育機関においてLinuxの採用が多くなっている。また、Mac OSを使用するユーザも多いと考えられる事から、Windows, Linux,
Mac OSに対応するクロスプラットフォームのソフトウェアとする。
クロスプラットフォーム実現のため、ウィンドウシステムには、多くのOSに移植されているX Window Systemを用いる。X Window SystemはLinuxを中心に普及しており、Windows向けの実装Cygwin/Xがフリーで提供されている。また、Mac OS X v10.5 Leopardにはアップルによって実装されたX11.appがあらかじめインストールされている。
中高大での理科教育では様々な現象、法則を取り扱う。これら全てに対応するのは困難であり、実行可能なシミュレーションが限られては汎用性に欠ける。そこで、処理する計算式や表示方法を設定ファイルにまとめ、ソフトウェアはこれに従ってシミュレーションを行うこととした。これにより高い汎用性を得るが、処理速度はやむを得ず低下する。
本ソフトウェアはグラフィカルユーザーインタフェイス(GUI)担当、グラフのプロット担当、数値計算担当の3つから構成されるよう設計した。それぞれは可能な限り独立して開発し、それを組み合わせる事で本ソフトウェアを構成した。
以下のような理由から、開発言語にはC++を用いる。
1.C++のコンパイラの1つであり、本ソフトウェアの開発にも用いているg++、は幅広いOS向けに提供されている
2.大規模なソフトウェアの構築に向く
3.処理速度が速い
設定ファイルを本ソフトウェアに読み込ませると、その設定に従って数値シミュレーションが行われ、結果が表示される。
設定ファイルは大きく「シミュレーション環境設定部」「宣言部」「プロット設定部」にわかれる。
シミュレーション環境設定部では
時間刻み幅 総ステップ数 カメラ位置
を設定する。
宣言部では
定数 ユーザー定義関数 変数とその時間発展方程式
パラメータ(定数のうち、シミュレーション実行中に値を変更できるものをパラメータと呼んでいる)
を設定する。宣言部では方程式を記述する事があるが、方程式の中で
三角関数(サイン、コサイン、タンジェント)
双曲線関数(ハイパボリックサイン、ハイパボリックコサイン、ハイパボリックタンジェント)
三角関数の逆関数(アークサイン、アークコサイン、アークタンジェント)
指数関数、常用対数、自然対数、平方根、絶対値、小数点以下切り捨て
が使用できる。また、すでに宣言した関数を呼び出したり、ほかの変数の値を参照する事も可能である。また、定数としてあらかじめ
重力加速度、自然対数の低、円周率
が宣言されており、方程式内で使用できる。
プロット設定部では各変数をどのようにプロットするかを設定する。プロットの際の色や、描画する位置も設定でき、複数のシミュレーションを同時に実行し、同時に表示することが可能である。
以下に設定ファイルの例をあげる。
ファイル名「lorenz」
SimEnv
dt
0.01
steps
10000
step0
1
camera
0 -1.5 5
EndSimEnv
Declare
prm
p 10
prm
r 28
prm
b 2.6
var
x 1
var
y 1
var
z 1
dev
x
x[step-1]-p*(x[step-1]-y[step-1])*dt
dev
y
y[step-1]+(x[step-1]*(r-z[step-1])-y[step-1])*dt
dev
z
z[step-1]+(x[step-1]*y[step-1]-b*z[step-1])*dt
var
X 0.99999999
var
Y 0.99999999
var
Z 0.99999999
dev
X
X[step-1]-p*(X[step-1]-Y[step-1])*dt
dev
Y
Y[step-1]+(X[step-1]*(r-Z[step-1])-Y[step-1])*dt
dev
Z
Z[step-1]+(X[step-1]*Y[step-1]-b*Z[step-1])*dt
EndDeclare
Plot
line3d
x y z 0 0 0 255 0
line3d
X Y Z 0 0 255 0 0
EndPlot
END
これは大学で学ぶ、カオス理論の「決定論的システムが予想不可能のふるまいをする」という概念を説明するための設定ファイルである。カオスにおいては、初期値の極々わずかな差が、時間とともに指数関数的に増大してしまうため、無限の精度で現象を観測しない限り将来の振る舞いを予測できない。この概念は、「近い状態から始まった物は同じような軌跡を描く」という日常生活の感覚から外れているため、理解が困難であると言われる。
図.1 シミュレーション結果(パソリカの実行画面)
この設定ファイルのシミュレーションの結果を図.1に示す。緑の軌道と赤の軌道は全く同じ方程式を解いた結果であり、初期値の差も0.00000001とごくわずかであるにも関わらず、その軌道は明らかに異なっている。紙面上では静止画だが、実際には、ばらばらの軌道を描くに至る途中経過もアニメーションで表示される。
このようにそのままでは難解な現象・概念・理論などの、視覚を通じた理解を助ける。
本ソフトウェアは当初の目標の通り、Windows、Linux、Mac OSに対応しており、幅広い現場で利用可能である。
OS間の互換性を重視し、X Window Systemの基本的な機能のみを用いて製作した結果、ユーザーインタフェイスに大きな課題が残った。現状では操作は主にキーボードで行うが、マウスを用いた操作の実装が必要である。
また、開発の終盤において非常に多くのバグに見舞われた。致命的なもの、修正に技術的困難があるものについて該当する機能を凍結する事で暫定的に対処している。ソフトウェアの一部を再構築する事も視野に入れた、大規模な修正が必要である。これらの修正を施したのち、インターネットなどを通じて広く公開したい。
最後に、実際の授業での試用や、そこからのフィードバックにより、一層実用的なソフトウェアとしてブラッシュアップしなければならない。
mlibはパソリカのGUIを担当するライブラリである。パソリカの設計方針により、独立したライブラリとして構築されている。mlibを用いる事によりグラフィカルなシミュレータを比較的容易に製作でき、パソリカと同様に研究から教育まで幅広く利用できる。
mlibを用いたシミュレータの例
mlibはC++言語で記述されているが、ベースとなるソースコードも添付し、それに改造を加える事で容易にソフトウェアを製作できるよう工夫した。
またパソリカ同様、Windows、Linux、Mac OSのいずれの上でも動作するソフトウェアを製作できる。
代表者が所属する研究室において、何人かの共同研究者にmlibを使用していただき、以下のような意見を得た。
・サンプルプログラムを参考に直観的にプログラムを作成できた
・面倒な、ウィンドウの生成などを自動で行ってくれるので、プログラムの煩雑さが消えた
・学会発表等でも使える、綺麗な動画を得られるようになった
また以下のような改善を望む声もあった。
・ドキュメントが十分に整備されておらず、機能を十分に活かせない
・C++特有の文法、概念に慣れない
また、初等的なC言語の講義と演習を受講した大学3年生4人に代表者の解説のもとで、使用していただいた。
その結果、全員が合計3時間以下のトレーニングでmlibを用いたグラフィカルなソフトウェアを製作できるようになり、学生たちの評価も高かった。
以上より、総じてmlibへの評価は良好であり、有用性が示唆された。