2016/01/31

数学を生き生きと理解するためのプログラミング


2. 数学を生き生きと理解するためのプログラミング 

コンピュータによる微分方程式のシミュレーションは強力で, その原理は簡単だが, 実際には数々難しい点がある. まず, 上でも書いたとおり数値シミュレーションで求めているのはあくまで近似解である. その近似解がどの程度現実に近いかは(厳密解をシミュレーションで求められない以上), 数学を用いて評価するしかない. それをしないままシミュレーションをすると, 現実と, 定性的にも全くかけ離れた結果(現実の解は発散しないのに, シミュレーションでは発散してしまうなど)を出し, 間違った結論を出してしまうこともあり得る. どのようにしたら, 誤差は許容しつつ, かつ「定性的に望ましい」解が得られるかというのは, 闇雲に分かるものではない. 

また, シミュレーションで現象をモデル化する場合でも, 現実をダイレクトにモデル化することは不可能な場合がほとんどである. 例えば銀河系をシミュレートするのに星一つ一つを質点とみなして計算したのでは, 銀河系一つで数十億個の質点間の引力を計算することになり, とてもできるものではない. このようなとき, どのように現実を近似してもよいか, あるいは支配方程式をどのように書き換えて, より効率的に解を得るかという考察のために数学が重要な役割を果たす. 

これを, コンピュータシミュレーションを学ぶためには数学も学ばなくては「いけない」 (事実その通りではあるのだが)と見ずに, むしろ数学を学ぶご利益を, コンピュータが非常にわかりやすく見せてくれると思うと良いのではないだろうか.
例えばこれから線形代数で, ガウスの消去法に始まり, 行列のランク, 固有値・固有ベクトル, 行列のJordan標準型, という一連のストーリーを学んでいくことだろう. 例えばJordan標準型のその導出は高校の時の「行列の対角化」と似ているが, それよりはるかに厳密で難しく, 結果も複雑である. 難しさの原因は高校の時と違って具体的に与えられた行列に対して大体計算が出きればよい, と言うだけでなく, 「全ての行列が」どのような標準型を持つのかを余すことなく, 完璧に論じようとするからである. そもそも大きな行列を何に使うか分からない状態で, これらをしっかり学ぶ気力を持続するのは中々大変である. 

コンピュータによって行列の固有値や固有ベクトルを求めるのに, 非常に簡単な方法があるのだが, その方法が「うまく行く」事をきちんと確認(証明)しようと思うと, 行列の標準型に関する理解が役に立つ. ここではその詳細が重要なのではなく, 大学で習うような「厳密な」数学が, あるプログラムが「全ての入力に対して」動作することをしっかり議論するのに本質的な役割を 果たすということである.

参考リンク
線形代数の本はいわゆる教科書以外に, 実践重視,イメージ重視など説明に工夫を凝らしたものがいくつもあるので探してみると良い.

出典Motivation to learn computer

0 件のコメント :

コメントを投稿