Rui,
The problem is that Derivative is a noisy operation. I improved things by making the numbers use infinite precision and converted them to 30 digits of precision before interpolation. Try Experimenting with this:
Manipulate[Nx = 2^pow; u0 = 0; uN = 5; du = (uN - u0)/Nx;
ugrid = du Range[0, Nx];
C0 = Exp[-(# - Lx/2)^2/2] & /@ ugrid;
exact[x] = D[Exp[-(x - Lx/2)^2/2], {x, der}];
C0Poly =
Interpolation[N[Transpose[{ugrid, C0}], 30],
InterpolationOrder -> 10];
exact[x] = D[Exp[-(x - Lx/2)^2/2], {x, der}];
Plot[{Derivative[der][C0Poly][x], exact[x]}, {x, 0, Lx},
PlotRange -> All,
ImageSize -> Large], {{pow, 9,
Dynamic["Points: " <> ToString[2^pow]]}, 4, 15,
1}, {{der, 9, Dynamic["Deriv: " <> ToString[der]]}, 1, 12, 1},
ContinuousAction -> False, LabelStyle -> "Text"]
It will show you that the number of points matters and actually fewer points will be smoother. For some reason (which I have not yet figured out) the derivative is better if you use a power of two in the number of points. The number of intervals must interact with the method of interpolation. I hope this helps.
Regards,
Neil