(* 
      data for multiple point curve programs *) 
P = {{0, 0}, {1, 1}, {2, 0.5}, {3, 0}, {4, -0.5}, {5, 0.5}, {6, 
          0}, {7, 1}, {8, 1}, {9, 0}}

Show[Graphics[Line[P]], Axes -> True]

M = 
        1/2 {{-1, 3, -3, 1}, {2, -5, 4, -1}, {-1, 0, 1, 
              0}, {0, 2, 0, 0}};
Clear[
      u];U = {u^3, u^2, u, 
        1};

For[i = 2; plist = {}, i ≤ Length[P] - 2, i = i + 1, 
      For[u = 0, u ≤ 1.0, u = u + 0.1, 
        plist = Append[plist, 
            U . M . {P[[i - 1]], P[[i]], P[[i + 1]], 
                P[[i + 2]]}]]]

g1 = 
      Graphics[{PointSize[0.025], Thickness[0.01], 
          Line[plist]}]
For[i = 1; clist = {PointSize[0.035]}, i ≤ Length[P], 
      i = i + 1, 
      clist = Append[clist, Point[P[[i]]]]]
g2  =  Graphics[clist]

Show[{g1, g2}, Axes -> Automatic]