Computational physics
3.2. 二階の常微分方程式
3.2. 二階の常微分方程式¶ 二階のODEを解くには、二元連立一階微分方程式に置き換えてやればいい。具体例でみてみよう。 (例題) $\ddot{x} + \dot{x} + x = [...]
Computational physics
3.2. 二階の常微分方程式¶ 二階のODEを解くには、二元連立一階微分方程式に置き換えてやればいい。具体例でみてみよう。 (例題) $\ddot{x} + \dot{x} + x = [...]
すでにMatplotlibを使ったFigure作成を紹介したが、plotlyというモジュールを用いると、グリグリいじることのできるインターラクティブな美しい図を描画することができる。現在のところ、AnacondaではデフォルトでインストールされていないモジュールでJupyterLab 1.1.4ではAnaconda Navigatorからもインストールできなくなったようなので、自分でインストールする必要がある。インストールした後でrebuildに失敗するとJupyterLab自体が起動しなくなったりするので、これ以降はpipによるモジュールのインストールに関する知識がそこそこあって、自分で問題解決できる中級者向けに説明する。初心者でもチャレンジしたい人は試してみるとよい。
数値計算ではないが、数式の変形や簡略化をpythonにさせたい場合は、SymPyというモジュールを使うと便利である。商用の数式処理ソフトにMathematicaというものがあるが、これと似たことをpythonにやらせることができる。SymPyを使うときは、symbols(複数形のsがついていることに注意)というfunctionを使って、変数を明示的に宣言しないといけいない。なお、SymPyでは複素数はI(大文字のi)で表し、jではない。
class, function, 属性など基本的なpythonの使い方を習得したので、これまでの復習を兼ねて簡単な画像処理をしてみよう。matplotlibには画像データを読み込む関数image.imreadも用意されている。下記の画像はリンクフリーのサイトからダウンロードした。「白地図 japan05.jpg」で検索すると出てくる。
オブジェクト指向は現代のプログラミングにおいて欠かすことできない概念で、世の中で使われているほとんどのプログラミング言語はオブジェクト指向といっても過言ではない。例外的にC言語はオブジェクト指向ではないがCにオブジェクト指向を追加したものがC++である。数値計算のコードを一人で書く場合には、オブジェクト指向の対となる概念である「手続き型指向」で書くこともできるが、大規模なコードや複数の人で分担してコードを書く場合には、オブジェクト指向のご利益は絶大だ。せっかくpythonを勉強しているのに「オブジェクト指向がわからない」のはちょっと恥ずかしいので、本講義でもオブジェクト指向プログラミングについて少し説明する。より高度な内容については適宜専門書を読むことをお勧めする。
数学や物理でfunction(関数)といえば、sinとかexpのような初等関数をイメージすると思うが、情報処理の分野では、「ある入力に対して、何か出力してくれる手続きのまとまり」という意味でも使われる。この”function”という概念は、どのプログラミング言語でも極めて重要な概念である。どの言語でも基本的なfunctionは組み込まれているし(これをbuilt-in function、組み込み関数という)、module内で誰かが作ったfunctionを使うこともできる。同様に、自分で新たなfunctionを定義することもできる。なお、情報処理の分野では入力のことを一般に引数(ひきすう, argument)と呼び、出力のこと戻り値(return)と呼ぶ。
どの言語でも条件を分岐するにはif文が使われる。pythonではforループと同じように、if文の最後に:をつけ、改行してインデントを入れて条件を書く。実行文にインデントを入れないとforループと同様、文法エラーになる
繰り返し似たような作業を実行させるときには、forループを使う。書式は微妙に違うがC/C++やJava、その他の言語でも頻繁に使う構文だ。ただNumPyを上手に用いるとforループを使わなくても同じことができる場合が多く、実際のところforループを使わないでNumPyを利用した方が圧倒的に処理速度が速いので、NumPyに慣れてきたらなるべくforループを使わないように頭を働かせることをお勧めする。