Partial derivatives in action on terrain surfaces
2026-02-26
You should know
What a digital elevation model is and how slope measures change from one place to another.
You will learn
How terrain steepness and direction are calculated, what a gradient means, and why water and gravity tend to follow steepest descent.
Why this matters
This chapter turns stored elevation into motion and process. It is a key bridge from map data to hydrology, erosion, and landform analysis.
If this gets hard, focus on…
The physical picture: the gradient points uphill fastest, and steepest descent points downhill fastest. Hold onto that picture first.
Ask a backcountry skier where the avalanche risk is concentrated on a particular slope and they will immediately name the aspect — north-facing or south-facing, shallow or steep. They are, without knowing it, estimating the gradient vector. The orientation of erosion rills, the direction of hillslope seepage, the angle at which a cut slope was designed — all these encode the same two quantities: the rate of elevation change with horizontal distance, and the compass direction in which that rate is greatest.
The gradient is the multivariable calculus tool that turns a terrain surface into a set of directional instructions. Computed from a digital elevation model using finite differences — a simple arithmetic operation applied to a 3×3 window of elevation values — it gives you simultaneously how steep any cell is and which way it faces. Slope is the gradient’s magnitude. Aspect is its direction. Water flows opposite to the gradient, toward the lowest available neighbour. These three derived quantities underpin almost everything in terrain analysis: flow routing, viewshed calculation, solar irradiance mapping, mass movement susceptibility. This model shows how to compute them from first principles.
Given a digital elevation model, how do we calculate: 1. Slope — how steep is the terrain? 2. Aspect — which direction does the slope face? 3. Flow direction — which way would water flow?
All three questions have the same answer: compute the gradient.
The gradient is a vector pointing in the direction of steepest ascent, with magnitude equal to the rate of ascent. Water flows opposite the gradient (downhill). Slope is the gradient’s magnitude. Aspect is the gradient’s direction.
The mathematical question: How do we compute the gradient from a grid of elevation values?
For a continuous surface z = f(x, y), the partial derivatives measure how elevation changes when you move in one direction:
\frac{\partial z}{\partial x} = \text{rate of change in the east-west direction}
\frac{\partial z}{\partial y} = \text{rate of change in the north-south direction}
Example: If \frac{\partial z}{\partial x} = 0.05 (dimensionless, or m/m), then elevation increases by 0.05 meters for every meter you move eastward.
The gradient combines both partial derivatives into a vector:
\nabla z = \left(\frac{\partial z}{\partial x}, \frac{\partial z}{\partial y}\right)
Properties: - Direction: Points in the direction of steepest ascent - Magnitude: Rate of ascent in that direction (steepest slope)
Slope (steepness):
S = |\nabla z| = \sqrt{\left(\frac{\partial z}{\partial x}\right)^2 + \left(\frac{\partial z}{\partial y}\right)^2}
Units: dimensionless (rise/run) or degrees/percent
Aspect (direction the slope faces):
\theta = \arctan2\left(\frac{\partial z}{\partial y}, \frac{\partial z}{\partial x}\right)
Measured clockwise from north (geographic convention): - 0° = north - 90° = east - 180° = south - 270° = west
A DEM gives us discrete elevation values z_{i,j}. We don’t have a formula for z(x, y), so we can’t compute derivatives analytically.
Solution: Approximate derivatives using finite differences — the discrete analog of derivatives.
Central difference (most accurate for interior cells):
\frac{\partial z}{\partial x} \approx \frac{z_{i, j+1} - z_{i, j-1}}{2 \Delta x}
\frac{\partial z}{\partial y} \approx \frac{z_{i+1, j} - z_{i-1, j}}{2 \Delta y}
Where \Delta x and \Delta y are the cell sizes (often equal: \Delta x = \Delta y = d).
Interpretation: The derivative in the x-direction is approximated by the elevation difference between the cells to the east and west, divided by the distance between them.
For cell (i, j), the central difference uses a 3×3 window:
z[i-1,j-1] z[i-1,j] z[i-1,j+1]
z[i,j-1] z[i,j] z[i,j+1]
z[i+1,j-1] z[i+1,j] z[i+1,j+1]
Horn’s method (commonly used in GIS software) weights diagonal neighbors:
\frac{\partial z}{\partial x} = \frac{(z_{i-1,j+1} + 2z_{i,j+1} + z_{i+1,j+1}) - (z_{i-1,j-1} + 2z_{i,j-1} + z_{i+1,j-1})}{8 \Delta x}
\frac{\partial z}{\partial y} = \frac{(z_{i+1,j-1} + 2z_{i+1,j} + z_{i+1,j+1}) - (z_{i-1,j-1} + 2z_{i-1,j} + z_{i-1,j+1})}{8 \Delta y}
This is a weighted average that reduces noise.
Once you have \frac{\partial z}{\partial x} and \frac{\partial z}{\partial y}:
Slope (in radians):
S_{\text{rad}} = \arctan\left(\sqrt{\left(\frac{\partial z}{\partial x}\right)^2 + \left(\frac{\partial z}{\partial y}\right)^2}\right)
Slope (in degrees):
S_{\text{deg}} = S_{\text{rad}} \times \frac{180}{\pi}
Slope (as percent):
S_{\%} = \sqrt{\left(\frac{\partial z}{\partial x}\right)^2 + \left(\frac{\partial z}{\partial y}\right)^2} \times 100
Aspect (in degrees from north):
A = 90° - \arctan2\left(\frac{\partial z}{\partial y}, \frac{\partial z}{\partial x}\right) \times \frac{180}{\pi}
(Adjust to ensure 0^\circ \leq A < 360^\circ)
Problem: A 3×3 DEM with cell size d = 10 m:
100 105 110
102 107 112
105 110 115
Calculate slope and aspect at the center cell (i=1, j=1) using central differences.
Cell values: - z_{0,0} = 100, z_{0,1} = 105, z_{0,2} = 110 - z_{1,0} = 102, z_{1,1} = 107, z_{1,2} = 112 - z_{2,0} = 105, z_{2,1} = 110, z_{2,2} = 115
Partial derivative in x (east-west):
\frac{\partial z}{\partial x} = \frac{z_{1,2} - z_{1,0}}{2 \Delta x} = \frac{112 - 102}{2 \times 10} = \frac{10}{20} = 0.5
Partial derivative in y (north-south):
\frac{\partial z}{\partial y} = \frac{z_{2,1} - z_{0,1}}{2 \Delta y} = \frac{110 - 105}{2 \times 10} = \frac{5}{20} = 0.25
Slope magnitude:
S = \sqrt{(0.5)^2 + (0.25)^2} = \sqrt{0.25 + 0.0625} = \sqrt{0.3125} \approx 0.559
Slope in degrees:
S_{\text{deg}} = \arctan(0.559) \times \frac{180}{\pi} \approx 29.2°
Aspect:
\theta_{\text{raw}} = \arctan2(0.25, 0.5) \times \frac{180}{\pi} \approx 26.6°
Convert to geographic aspect (clockwise from north):
A = 90° - 26.6° = 63.4°
The slope is 29.2° steep and faces 63.4° (ENE — slightly east of northeast).
Below is an interactive model computing slope and aspect from a synthetic DEM.
<label>
Terrain type:
<select id="terrain-gradient-select">
<option value="plane">Tilted plane</option>
<option value="cone">Cone</option>
<option value="ridge">Ridge</option>
<option value="valley">Valley</option>
<option value="saddle">Saddle</option>
</select>
</label>
<label>
Grid resolution:
<input type="range" id="res-gradient-slider" min="20" max="60" step="10" value="40">
<span id="res-gradient-value">40</span> cells
</label>
<label>
Display:
<select id="display-select">
<option value="slope">Slope (degrees)</option>
<option value="aspect">Aspect (degrees from N)</option>
<option value="vectors">Gradient vectors</option>
</select>
</label>
Try this: - Plane: Uniform slope and aspect (constant gradient everywhere) - Cone: Slope increases toward the peak; aspect radiates outward - Ridge: High slope along the ridge flanks; aspect points away from the ridgeline - Valley: Aspect points toward the valley axis - Saddle: Aspect flips 180° across the saddle point
Key insight: The gradient captures both the magnitude (slope steepness) and direction (aspect) of the terrain’s tilt at every point.
Rise/run (dimensionless): \frac{\Delta z}{\Delta x} = 0.1 means 0.1 m rise per 1 m horizontal distance.
Degrees: \arctan(0.1) \approx 5.7°
Percent: 0.1 \times 100 = 10\%
Conversion: - Gentle: <5° or <9% - Moderate: 5–15° or 9–27% - Steep: 15–30° or 27–58% - Very steep: >30° or >58%
Aspect determines insolation (solar radiation received): - Equator-facing slopes (south in N. Hemisphere, north in S. Hemisphere): maximum energy - Pole-facing slopes: minimum energy - East/west slopes: intermediate
This creates microclimates — different vegetation, soil moisture, snow persistence.
Water flows downhill — opposite the gradient direction.
If \nabla z = (0.5, 0.25) (pointing ENE uphill), then flow direction is (-0.5, -0.25) (pointing WSW downhill).
Next model (Model 9) will use this to route water across a DEM.
Cells on the edge of a DEM have no neighbors beyond the boundary. Central differences require neighbors on both sides.
Solutions: - Mark edge cells as “no data” - Use forward/backward differences at edges (less accurate) - Extend the DEM artificially (mirror, clamp values)
Real DEMs contain measurement errors. Small errors can produce large swings in slope when differencing nearby cells.
Solutions: - Smooth the DEM first (e.g., Gaussian filter) - Use weighted finite differences (Horn’s method) - Increase cell size (aggregate to coarser resolution)
If \Delta x \neq \Delta y (non-square cells), use separate cell sizes in the x and y derivatives.
If using geographic coordinates (lat/lon), the distance per degree varies with latitude. Convert to a projected coordinate system first.
If \frac{\partial z}{\partial x} = \frac{\partial z}{\partial y} = 0, the gradient is zero: - Slope is 0° - Aspect is undefined (no preferred direction)
GIS software often assigns flat areas an aspect of -1 or 360°.
The gradient \nabla z assigns a vector to every point in the plane. This is a vector field.
Visualization: At each grid point, draw an arrow: - Direction: Points uphill (steepest ascent) - Length: Proportional to slope magnitude
Properties: - Gradient vectors are perpendicular to contour lines (level curves of constant elevation) - Water flows along streamlines — curves tangent to the negative gradient
This geometric view connects calculus, vector analysis, and physical flow.
For z = f(x, y):
\frac{\partial z}{\partial x} = \frac{\partial f}{\partial x} = f_x
Read as: “the partial derivative of z with respect to x.”
Treat y as a constant, differentiate with respect to x:
Example: z = x^2 + 3xy + y^2
\frac{\partial z}{\partial x} = 2x + 3y
\frac{\partial z}{\partial y} = 3x + 2y
\frac{\partial z}{\partial x} is the slope of the surface in the x-direction (holding y constant).
Imagine slicing the surface with a vertical plane parallel to the x-axis — the cross-section is a curve, and \frac{\partial z}{\partial x} is its slope.
Chapters need different interaction than articles. The useful questions here are usually “is there an error?”, “where did I get stuck?”, or “what should I read next?”
Use this when a derivation, definition, or worked example loses you.
Send a stuck point →