snovaのブログ

プログラミングとか、日常のこととか、アウトプットしたほうがよいと聞いたので

Pythonでざっくりと数値解析の基礎をしてみる 序論



【スポンサーリンク】



昔、勉強した記憶があるのですが、忘れていたので、久しぶりにしてみました。
方程式の計算をコンピュータで解く(近似解ですが)ことができたのに、感動した記憶があります。

目的

数値解析(numerical analysis)とは、

自然科学や工学に現れる数学的問題を、コンピューターを使い、数値計算によって解くこと。コトバンクより

具体的な内容は、数値的に非線形方程式や微分方程式を解く、数値微分積分固有値計算、最適化などです。
これらは多くのシミュレーションの根幹となっている重要な技術です。
言い換えると、数値解析での内容を応用することで、大規模な物理シミュレーションを解くことができます。

ただ、C言語Fortranで書かれたプログラムを載せている参考書が多く、プログラミング初心者には厳しかった記憶があります。
最近は、MatlabPythonなどで書かれたプログラムを載せているものもありますので、今回はPythonを使って挑戦してみました。

なお、この記事の内容は、大学工学部の学部生相当が学ぶレベルを想定しています。

なぜPython

用途によって意見が分かれると思いますが、無料であること、C言語などに比べ作業効率が高いことから、Pythonを選ぶ人が多いです。
また、Numpyをはじめとする多くのライブラリを自由に使うことできることもメリットです。
これらのことから科学技術計算や機械学習でも広く使われています。

目次

だいたいの教科書には以下の内容が載っているようです。
- 方程式の解法(二分法、ニュートン法)
- 連立方程式の解法(LU分解法、ヤコビ法)
- 固有値計算
- 最小二乗法とスプライン補間
- 数値積分(台形公式、シンプソン公式)
- 数値微分(オイラー法、ルンゲクッタ法)
- フーリエ変換
- モンテカルロ法(モンテカルロ積分焼きなまし法)
- 誤差

次回から、実際に組んだプログラムを更新していきます。

参考文献

2018/09/29追記 非線形方程式の解法についての記事をアップしました。 snova301.hatenablog.com