Discrete waves

The plan is to solve F=ma for a bunch
of masses connected by springs

n = 15; mass = Table[1., {i, n}]; stif = Table[1., {i, n}]; nt = 200;

The following code is just a finite difference 
to the time derivative appearing in Newtons second
law of motion.  The details are unimportant, it's simply a way of handling the time derivatives.

x = Table[0., {i, nt}, {j, n}]; y = Table[0., {i, nt}, {j, n}]; x[[1, 2]] = 1.; dt = .25; Do[
      Do[x[[2, i]] = 
          x[[1, i]]; 
        y[[2, i]] = 
          dt (-(
                      stif[[i + 1]] + 
                        stif[[i]]) 
                  x[[1, i]] + 
                stif[[i]] 
                  x[[1, i - 1]] + 
                stif[[i + 1]] 
                  x[[1, i + 1]]); 
        , {i, 2, n - 1}]; 
      x[[k, n]] = 0; 
      x[[k, 1]] = 0; 
      Do[x[[k + 1, i]] = 
          dt y[[k, i]] + 
            x[[k - 1, i]]; 
        y[[k + 1, i]] = 
          dt (-(stif[[i + 1]] + 
                          stif[[i]])
                         x[[k, i
                      ]] + 
                  stif[[i]] 
                    x[[k, i - 1]] + 
                  stif[[i + 1]] 
                    x[[k, i + 1]]) + 
            y[[k - 1, i]]; 
        , {i, 2, n - 1}]; 
      x[[k, n]] = 0; 
      x[[k, 1]] = 0; 
      , {k, 2, nt - 1}];

Now plot all the snapshots (or change nt to something
else to plot some subset)

Do[
      ListPlot[x[[i]], 
        PlotJoined -> True, PlotRange -> {{1, n}, {-1, 1}}]; 
      , {i, 1, nt - 2}];