バネの振動の方程式を差分法近似で解く

Clear[A]; A[n_] := {{1, 1/n}, {-1/n, 1}}; 
    A[2] // MatrixForm

Clear[B]; B[n_, k_] := MatrixPower[A[n], k]; 
    B[4, 10] // MatrixForm

Clear[p]; p[n_, k_] := B[n, k] . {1, 0}; p[4, 10]

\(時間\ t\)=(k/n)に対して,そのときの位置を x[n, k] を上の行列  p[n, k] \(の第一成分で決める . \ 時間と組にして\),\(例えば\ n = 5\ のとき\),\(組\ \((0\/5, x[5, 0])\)\),((1/5), x[5, 1]),((2/5), x[5, 2]),((3/5), x[5, 3]),...,((9/5), x[5, 10])\(\(を折れ線で表せば下のようになる\)\(.\)\)

Clear[t, x, T]; t[n_, k_] := k/n; x[n_, k_] := p[n, k][[1]]; 
    T[n_, m_] := Table[{N[t[n, k]], N[x[n, k]]}, {k, 0, m}]; 
    ListPlot[T[5, 10], 
      PlotJoined -> True, 
PlotStyle -> Hue[0.6], 
      AspectRatio -> Automatic, 
      PlotRange -> {{0, 2}, {-0.5, 1}}, 
      AxesLabel -> {t, x}]

k を大きくして時間 t=(k/n)を経過させるとその位置が下のように順次決まっていく.

Clear[G, G1, g]; 
    G[n_, m_] := 
      ListPlot[T[n, m], 
        PlotJoined -> True, 
PlotStyle -> 
          Hue[0.6], AspectRatio -> Automatic, 
        PlotRange -> {{0, 2}, {-0.5, 1}}]; 
    Do[G[5, k], {k, 1, 10}]

\(微分方程式\ \ y''\  + y\)=0を差分法で解いて解を近似するとは,上の折れ線のようにその位置を順々に決めていくことである.  nを限りなく大きくして考えると折れ線は  cos x   のグラフに近づき,三角関数が登場する.

Clear[G, G1, g]; 
    G[n_, m_] := 
      ListPlot[T[n, m], 
        PlotJoined -> True, 
PlotStyle -> 
          Hue[0.6], AspectRatio -> Automatic, 
        PlotRange -> {{0, 2  π}, {-1.5, 2}}, 
        DisplayFunction -> Identity]; 
    G1 := Plot[Cos[x], {x, 0, 2  π}, PlotStyle -> Hue[0.0], 
        AspectRatio -> Automatic, 
        PlotRange -> {{0, 2  π}, {-1.5, 2}}, 
        DisplayFunction -> Identity]; 
    g[n_] := Do[
        Show[{G[n, k], G1}, DisplayFunction -> $DisplayFunction], {k, 1, 
          7*n, 3}]; g[30]