コンピュータ演習

(地球環境防災)学科2年後期の授業。

Jupyter Notebook 環境で,最近は主に Python (SymPy, SciPy, NumPy) を使っての演習。弘大 JupyterHub を利用して,Web ブラウザさえあれば学内のみならず自宅からでも,日本国内であればどこからでも Jupyter Notebook が使える環境を最大限に活用。

また,学科の専門上,Fortran の需要も一定の割合であると思われるので,Visual Studio Code をエディタとして使う例も準備してみた(けど特にアップデートしていない)。授業内容は全てWeb コンテンツとして準備。

ほぼ Python に移行しているけど,以前準備した旧コンテンツは以下に(別サイトなのでアップデートしていません):

はじめての Maxima プログラミング
はじめての Python プログラミング

はじめての Fortran プログラミング vscode 版
  ・参考:はじめての Fortran プログラミング Jupyter Notebook 版
はじめての gnuplot プログラミング
SymPy による数式処理とグラフ作成
Maxima-Jupyter による数式処理とグラフ作成
gnuplot によるグラフ作成 – 弘前大学 Home Sweet Home

このセクションの構成

はじめての Python プログラミング

あちらの「はじめての Python プログラミング」に若干の補足説明を追加したもの。

Python でコンピュータ演習

「Maxima でコンピュータ演習」の内容を Python で。

SymPy は Python で記号計算(symbolic computation)・計算機代数(computer algebra)・(以前は数式処理などとも呼ばれた)を行うライブラリです。ここでは,計算機代数システム Maxima を使ったページ「Maxima でコンピュータ演習」の内容を SymPy を使ってやってみます。

また,Matplotlib を使ったアニメーション作成についても解説します。

Python で数値解析

あちらの「Python で数値解析」のページでは,SymPy に解析的な方法,SciPy による数値解析法,それに自前で数値解析的コードを書く方法とごった煮になっているので,整理して別々のページにまとめてみた。

単振り子の運動方程式を数値的に解く準備

単振り子の振幅と周期の関係を数値的に調べる。振幅が「十分に小さい」時には単振動になり,単振り子の周期は振幅に依存しないことが知られている。これを

振り子の等時性

という。

では,振幅が大きい場合(「十分に小さい」という近似が成り立たない場合),単振り子の周期は振幅にどのように依存するか。

単振り子のエネルギー保存則から周期を求める準備

単振り子の運動方程式から得られるエネルギー保存則から,数値積分によって周期を求めるための準備。

高さ h からの斜方投射の最大到達距離を求める準備

地面から高さ $h$ の地点から空気抵抗なしの斜方投射を行うと,水平方向の到達距離が最大となるのは打ち上げ角度(仰角)が $45^{\circ}$ のときではない。何度のときかを求めるための準備。

空気抵抗がある場合の斜方投射を調べる準備

鉛直下向きの一様重力場中で,ある初速度をもって物体を空中に投げ出す。これを業界用語で「斜方投射」(Wikipedia 英語版タイトルでは Projectile motion)という。

空気抵抗が無視できる場合には,斜方投射された物体は放物線を描いて運動し,初速度一定の条件で水平な地上面から投射角 $\theta$ で投射された物体の水平到達距離が最大となるのは,$\theta = 45$° であることが知られている。

では,空気抵抗がある場合はどうなるか?

空気抵抗がある場合,初速度一定の条件で投射された物体の水平到達距離が最大となる投射角 $\theta$ を調べるために,まずは準備。

万有引力の運動方程式を数値的に解く準備

万有引力の2体問題(は結局1体問題に帰着するんだけど)の運動方程式を数値的に解く前の下ごしらえ。闇雲な初期条件からはじめるのではなく,そもそも数値計算しなくても楕円になることはわかっているのだから,ルンゲ・クッタ法なりを使って数値的に解く前に,それなりの下ごしらえをしておこう。

  • 参考:ニュートン力学における万有引力の2体問題

楕円軌道上の時刻ごとの位置を数値的に求める準備

万有引力の運動方程式を解くと楕円軌道になることはわかっているのだが,楕円軌道は $r(\phi)$ で表され,時間 $t$ の陽関数としては表せていないので,$\phi$ を $t$ の関数として数値的に求めるための下ごしらえ。

参考:Maxima 編アーカイブ

かつては Maxima を使って授業をしていたが,徐々に Maxima から Python (+ SymPy 等) へ移行している。参考までに,Maxima を使ったページをここに移動してまとめておく。