Matt,
Some clues to your problem:
1) Try to get hold of the r.mapcalc document by Jim Westervelt,
which gives two r.mapcalc-scripts for calculating slope and
aspect maps using Horn's and Frank's method; the Horn-script
does a good job when you have detailed elevation data
2) Try s.surf.tps for the interpolation; r.surf.idw doesn't do a
very good job when it comes to smoothing, and it appears to me
that your data isn't very smooth if you get steps
3) Nevertheless, if you have only minor changes in your elevation
data you will always get steps. For example: if your elevation
changes from say 10 to 9 and the surroundings cells all have
values of 10 up-slope and 9 down-slope, there will always be a
contour-line like zone with an (unrealistic) slope-value that
will be equal to the ratio of 1 elevation-unit and the pixel-size
I have had this problem with elevation data from a flood-plain,
where elevation-steps are in meters; with a resolution
of 10x10 meters, you will get a slope-value of 10% (equal to a
elevation change of 10 meters in 100 meters) in an area which is
almost flat, or has slope of at most 0.5 to 1%. There's only one
solution to this, as GRASS doesn't support floating-point data:
multiply your original data with 100 or 1000 and do the interpolation
again. You'll have to find a way to get rid of the exaggeration when
you want a real slope-map afterwards, but I suppose r.mapcalc could do
the job.
Good luck!
Philip Verhagen
Stichting RAAP
Amsterdam