4.1 比較的簡単なもの

  1. 自然数 $ n$ を入力されたとき、 $ 1+2+\cdots+n$ を計算して、 その結果を表示するプログラムを書け5
  2. 実数 $ a$, 自然数 $ n$ を入力されたとき、 $ a^n$ を計算して、その結果を表示するプログラムを書け 6
  3. 自然数 $ k$, $ n$ を入力されたとき、 $ 1^k$, $ 2^k$, $ \cdots$, $ n^k$ を表示するプログラムを書け 7
  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}$ の極限は何か? (簡単な数学の問題)
    [それでも尋ねてみるか] どの $ n$ まで $ a_{n}$ が正しく計算出来ているか?
  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 \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 & \text{(それ以外)}
\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. $ \R^3$ における極座標をデカルト座標 (直交座標) に変換するコードは簡単で、
      x = r * sin(theta) * cos(phi);
      y = r * sin(theta) * sin(phi);
      z = r * cos(theta);
    

    とすれば良い。この逆をする (つまりデカルト座標を極座標に変換する) 関数 d2p() を作って、動くことをチェックせよ8
      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 \vert x'(t)\vert x'(t)$ が 正しいという説もある。
    (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つの実数解を持つことが分かる。)

桂田 祐史