B. 練習問題

各自やってみよう。 全員に [8] くらいまでやってもらいたい。

何かを参考にしても、人に尋ねても良い。自分自身が納得して、 似たような問題が解けるようになることが大事。

ときどき「どこまで出来ました?」尋ねます。


最後の [11], [12] はそのうち時間を取ってやるかも。


いつでも気軽に (メールでも可) 質問・相談してください。

[1].
自然数 $ n$ を入力されたとき、 $ 1+2+\cdots+n$ を計算して、 その結果を表示するプログラムを書け2
[2].
実数 $ a$ , 自然数 $ n$ を入力されたとき、 $ a^n$ を計算して、その結果を表示するプログラムを書け 3
[3].
自然数 $ k$ , $ n$ を入力されたとき、 $ 1^k$ , $ 2^k$ , $ \cdots$ , $ n^k$ を表示するプログラムを書け 4
[4].
$ a_1=1$ , $ a_{n+1}=3a_n+2$ ($ n\ge 1$ ) で定まる数列の最初の $ 100$ 項を 計算して表示するプログラムを書け ($ n$ が大きいときは近似値で構わない -- 何桁くらい正しいでしょう? 正確に計算するにはどうしたら良いでしょう?)。
[5].
$ a_0=1$ , $ a_1=1$ , $ a_{n+2}=a_{n+1}+a_{n}$ ($ n\ge 0$ ) で定まる 数列 (フィボナッチ数列) $ \{a_n\}$ に対して、 $ n=1,2,\dots,100$ の順に $ a_n$ $ a_n/a_{n-1}$ を計算して表示せよ。 ($ n$ が大きいときは近似値で構わない …)
[番外] $ a_n/a_{n-1}$ の極限は何か? (簡単な数学の問題)
[6].
$ n$ を与えられたとき

$\displaystyle S_1(n):=\sum_{k=1}^n\frac{1}{k}, \quad
S_2(n):=\sum_{k=1}^n\frac{1}{k^2}
$

を計算するプログラムを書け。 計算結果は double の精度一杯まで表示せよ。
[番外] $ \dsp\lim_{n\to\infty} S_2(n)=\pi^2/6$ であることが知られている。 点 $ (n, \pi^2/6-S_2(n))$ を両側対数目盛でプロットすることによって、 収束の速さを調べよ。
[7].
自然数 $ n$ を入力されたとき、 $ S_n=\dsp\sum_{k=0}^n \frac{1}{k!}
$ を計算して結果を表示するプログラムを 書け ($ 1/k!$ は漸化式で計算するのが簡単)。
[8].
関数 $ f\colon[a,b]\to \mathbb{R}$ のグラフを描くプログラムを書け。 ただし $ f$ を計算する関数をプログラム中に書くものとする。 特に

$\displaystyle f(x):=
\left\{
\begin{array}{ll}
x & \mbox{($0\le x\le 1/2$)}\...
... & \mbox{($1/2\le x\le 1$)}\\
0 & \mbox{(それ以外)}
\end{array} \right.
$

の場合に $ -0.2\leq x\leq 1.2$ の範囲のグラフを描け。
[9].
(ここまでの応用) 与えられた自然数 $ n$ , 実数 $ x$ に対して

$\displaystyle s_n(x):=\sum_{k=1}^n\frac{(-1)^{k+1}}{(2k-1)!} x^{2k-1}
$

を計算する関数を書き、$ n=1$ , $ 2$ , $ 3$ , $ \cdots$ , $ 10$ に対して $ s_n(x)$ ( $ 0\le x\le 2\pi$ ) のグラフを描け (「Taylor 級数のプログラミングには漸化式を」)。
[10].
$ \mathbb{R}^3$ における極座標をデカルト座標 (直交座標) に変換するコードは簡単で、
  x = r * sin(theta) * cos(phi);
  y = r * sin(theta) * sin(phi);
  z = r * cos(theta);

とすれば良い。この逆をする (つまりデカルト座標を極座標に変換する) 関数 d2p() を作って、動くことをチェックせよ5
  d2p(x, y, z, &r, &theta, &phi);

のようにして呼び出せるようにすること。
[11].
常微分方程式の初期値問題を Euler 法、 Runge-Kutta 法などの数値解法で近似的に解けることは重要である。 以下の初期値問題を解くプログラムを作れ。結果を可視化せよ。
(1)
$ x'(t)=x(t)$ , $ x(0)=1$ .
$ x(1)=e$ となるはずだが、計算で得た値と比較せよ。
(2)
$ x''(t)=-g-\gamma x'(t)$ , $ x(0)=H$ , $ x'(0)=0$ . ただし $ g>0$ , $ \gamma\ge 0$ は定数とする。
これは速度に比例する空気抵抗が存在する場合の 自由落下を記述する微分方程式である。 実は (抵抗が速度の自乗に比例する) $ x''(t)=-g-\gamma x'(t)^2$ が 正しいという説もある。
(3)
$ \dsp\dfrac{\D}{\D t}\begin{pmatrix}x  y\end{pmatrix}=
\begin{pmatrix}a & b  c & d \end{pmatrix} \begin{pmatrix}x  y \end{pmatrix}$ , $ x(0)=x_0$ , $ y(0)=y_0$ . ここで $ a$ , $ b$ , $ c$ , $ d$ は与えられた定数である。 さまざまな $ (x_0,y_0)$ に対して解軌道を描け。
[12].
方程式 $ \cos x-x=0$ の実数解を、 二分法または Newton 法で計算するプログラムを作れ。

( $ f(x):=\cos x - x$ は狭義単調減少で、 $ f(0)=1>0$ , $ f(1)=\cos 1-1<0$ であるから、 区間 $ (0,1)$ にただ1つの実数解を持つことが分かる。)

桂田 祐史
2018-10-07