# 4.3: How Derivatives Affect the Shape of a Graph

- Page ID
- 4463

\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

Earlier in this chapter we stated that if a function \(f\) has a local extremum at a point \(c\), then \(c\) must be a critical point of f. However, a function is not guaranteed to have a local extremum at a critical point. For example, \(f(x)=x^3\) has a critical point at \(x=0\) since \(f'(x)=3x^2\) is zero at \(x=0\), but \(f\) does not have a local extremum at \(x=0\). Using the results from the previous section, we are now able to determine whether a critical point of a function actually corresponds to a local extreme value. In this section, we also see how the second derivative provides information about the shape of a graph by describing whether the graph of a function curves upward or curves downward.

## The First Derivative Test

Corollary \(3\) of the Mean Value Theorem showed that if the derivative of a function is positive over an interval \(I\) then the function is increasing over \(I\). On the other hand, if the derivative of the function is negative over an interval \(I\), then the function is decreasing over \(I\) as shown in the following figure.

**Figure \(\PageIndex{1}\):** Both functions are increasing over the interval \((a,b)\). At each point \(x\), the derivative \(f'(x)>0\). Both functions are decreasing over the interval \((a,b)\). At each point \(x\), the derivative \(f'(x)<0.\)

A continuous function \(f\) has a local maximum at point \(c\) if and only if \(f\) switches from increasing to decreasing at point \(c\). Similarly, \(f\) has a local minimum at \(c\) if and only if \(f\) switches from decreasing to increasing at \(c\). If \(f\) is a continuous function over an interval \(I\) containing \(c\) and differentiable over \(I\), except possibly at \(c\), the only way \(f\) can switch from increasing to decreasing (or vice versa) at point \(c\) is if \(f′\) changes sign as \(x\) increases through \(c\). If \(f\) is differentiable at \(c\), the only way that \(f′\). can change sign as \(x\) increases through \(c\) is if \(f′(c)=0\). Therefore, for a function \(f\) that is continuous over an interval \(I\) containing \(c\) and differentiable over \(I\), except possibly at \(c\), the only way \(f\) can switch from increasing to decreasing (or vice versa) is if \(f'(c)=0\) or \(f′(c)\) is undefined. Consequently, to locate local extrema for a function \(f\), we look for points \(c\) in the domain of \(f\) such that \(f'(c)=0\) or \(f′(c)\) is undefined. Recall that such points are called critical points of \(f\).

Note that \(f\) need not have a local extrema at a critical point. The critical points are candidates for local extrema only. In Figure \(\PageIndex{2}\), we show that if a continuous function \(f\) has a local extremum, it must occur at a critical point, but a function may not have a local extremum at a critical point. We show that if \(f\) has a local extremum at a critical point, then the sign of \(f′\) switches as \(x\) increases through that point.

**Figure \(\PageIndex{2}\): **The function \(f\) has four critical points: \(a,b,c\),and \(d\). The function \(f\) has local maxima at \(a\) and \(d\), and a local minimum at \(b\). The function \(f\) does not have a local extremum at \(c\). The sign of \(f'\) changes at all local extrema.

Using Figure \(\PageIndex{2}\), we summarize the main results regarding local extrema.

- If a continuous function \(f\) has a local extremum, it must occur at a critical point \(c\).
- The function has a local extremum at the critical point \(c\) if and only if the derivative \(f′\) switches sign as \(x\) increases through \(c\).
- Therefore, to test whether a function has a local extremum at a critical point \(c\), we must determine the sign of \(f′(x)\) to the left and right of \(c\).

This result is known as the **first derivative test.**

First Derivative Test

Suppose that \(f\) is a continuous function over an interval \(I\) containing a critical point \(c\). If \(f\) is differentiable over \(I\), except possibly at point \(c\), then \(f(c)\) satisfies one of the following descriptions:

- If \(f′\) changes sign from positive when \(x<c\) to negative when \(x>c\), then \(f(c)\) is a local maximum of \(f\).
- If \(f′\) changes sign from negative when \(x<c\) to positive when \(x>c\), then \(f(c)\) is a local minimum of \(f\).
- If \(f'\) has the same sign for \(x<c\) and \(x>c\), then \(f(c)\) is neither a local maximum nor a local minimum of \(f\)

Now let’s look at how to use this strategy to locate all local extrema for particular functions.

Example \(\PageIndex{1}\): Using the First Derivative Test to Find Local Extrema

Use the first derivative test to find the location of all local extrema for \(f(x)=x^3−3x^2−9x−1.\) Use a graphing utility to confirm your results.

**Solution**

Step 1. The derivative is \(f′(x)=3x^2−6x−9.\) To find the critical points, we need to find where \(f′(x)=0.\) Factoring the polynomial, we conclude that the critical points must satisfy

\[3(x^2−2x−3)=3(x−3)(x+1)=0.\]

Therefore, the critical points are x\(=3,−1.\) Now divide the interval \((−∞,∞)\) into the smaller intervals \((−∞,−1),(−1,3)\) and \((3,∞).\)

Step 2. Since \(f'\) is a continuous function, to determine the sign of \(f′(x)\) over each subinterval, it suffices to choose a point over each of the intervals \((−∞,−1),(−1,3)\) and \((3,∞)\) and determine the sign of \(f′\) at each of these points. For example, let’s choose \(x=−2,x=0,\) and \(x=4\) as test points.

Interval |
Test Point |
Sign of \(f′(x)=3(x−3)(x+1)\) at Test Point |
Conclusion |
---|---|---|---|

\((−∞,−1)\) | \(x=−2\) | (+)(−)(−)=+ | \(f\) is increasing. |

\((−1,3)\) | \(x=0\) | (+)(−)(+)=+ | \(f\) is increasing. |

\((3,∞)\) | \(x=4\) | (+)(+)(+)=+ | \(f\) is increasing. |

Step 3. Since \(f′\) switches sign from positive to negative as \(x\) increases through \(1,f\) has a local maximum at \(x=−1\). Since \(f′\) switches sign from negative to positive as \(x\) increases through \(3,f\) has a local minimum at \(x=3\). These analytical results agree with the following graph.

**Figure \(\PageIndex{3}\): **The function f has a maximum at \(x=−1\) and a minimum at \(x=3\)

Exercise \(\PageIndex{1}\)

Use the first derivative test to locate all local extrema for \(f(x)=−x^3+\frac{3}{2}x^2+18x.\)

**Hint**-
Find all critical points of \(f\) and determine the signs of \(f′(x)\) over particular intervals determined by the critical points.

**Answer**-
\(f\) has a local minimum at \(−2\) and a local maximum at \(3\).

Example \(\PageIndex{2}\): Using the First Derivative Test

Use the first derivative test to find the location of all local extrema for \(f(x)=5x^{1/3}−x^{5/3}.\) Use a graphing utility to confirm your results.

**Solution**

Step 1. The derivative is

\[f′(x)=\frac{5}{3}x^{−2/3}−\frac{5}{3}x^{2/3}=\frac{5}{3x^{2/3}}−\frac{5x^{2/3}}{3}=\frac{5−5x^{4/3}}{3x^{2/3}}=\frac{5(1−x^{4/3})}{3x^{2/3}}.\]

The derivative \(f′(x)=0\) when \(1−x^{4/3}=0.\) Therefore, \(f′(x)=0\) at \(x=±1\). The derivative \(f′(x)\) is undefined at \(x=0.\) Therefore, we have three critical points: \(x=0, x=1,\) and \(x=−1\). Consequently, divide the interval \((−∞,∞)\) into the smaller intervals \((−∞,−1),(−1,0),(0,1),\) and \((1,∞)\).

Step 2: Since \(f′\) is continuous over each subinterval, it suffices to choose a test point \(x\) in each of the intervals from step 1 and determine the sign of \(f′\) at each of these points. The points \(x=−2,x=−\frac{1}{2},x=\frac{1}{2},and x=2\) are test points for these intervals.

Interval | Test Point | Sign of \(f′(x)=\frac{5(1−x^{4/3})}{3x^{2/3}}\) at Test Point | Conclusion |
---|---|---|---|

\((−∞,−1)\) | \(x=−2\) | \(\frac{(+)(−)}{+}=−\) | \(f\) is decreasing. |

\((−1,0)\) | \(x=−\frac{1}{2}\) | \(\frac{(+)(+)}{+}=+\) | \(f\) is increasing. |

\((0,1)\) | \(x=\frac{1}{2}\) | \(\frac{(+)(+)}{+}=+\) | \(f\) is increasing. |

\((1,∞)\) | \(x=2\) | \(\frac{(+)(−)}{+}=−\) | \(f\) is decreasing. |

Step 3: Since \(f\) is decreasing over the interval \((−∞,−1)\) and increasing over the interval \((−1,0), f\) has a local minimum at \(x=−1\). Since \(f\) is increasing over the interval \((−1,0)\) and the interval \((0,1)\), f does not have a local extremum at \(x=0\). Since \(f\) is increasing over the interval \((0,1)\) and decreasing over the interval \((1,∞),f\) has a local maximum at \(x=1\). The analytical results agree with the following graph.

**Figure \(\PageIndex{4}\):** The function f has a local minimum at \(x=−1\) and a local maximum at \(x=1\)

Exercise \(\PageIndex{2}\)

Use the first derivative test to find all local extrema for \((x)=\frac{3}{x−1}\).

**Hint**-
The only critical point of \(f\) is \(x=1.\)

**Answer**-
\(f\) has no local extrema because \(f′\) does not change sign at \(x=1\).

## Concavity and Points of Inflection

We now know how to determine where a function is increasing or decreasing. However, there is another issue to consider regarding the shape of the graph of a function. If the graph curves, does it curve upward or curve downward? This notion is called the **concavity** of the function.

Figure \(\PageIndex{4a}\) shows a function \(f\) with a graph that curves upward. As \(x\) increases, the slope of the tangent line increases. Thus, since the derivative increases as \(x\) increases, \(f′\) is an increasing function. We say this function \(f\) is concave up. Figure \(\PageIndex{4b}\) shows a function \(f\) that curves downward. As \(x\) increases, the slope of the tangent line decreases. Since the derivative decreases as \(x\) increases, \(f′\) is a decreasing function. We say this function \(f\) is concave down.

Definition: concavity test

Let \(f\) be a function that is differentiable over an open interval \(I\). If \(f′\) is increasing over \(I\), we say \(f\) is **concave up** over \(I\). If \(f′\) is decreasing over \(I\), we say \(f\) is **concave down **over \(I\).

**Figure \(\PageIndex{5}\):** (a), (c) Since \(f'\) is increasing over the interval \((a,b)\), we say \(f\) is concave up over \((a,b). (b), (d)\) Since \(f'\) is decreasing over the interval \((a,b)\), we say \(f\) is concave down over \((a,b).\)

In general, without having the graph of a function \(f,\) how can we determine its concavity? By definition, a function \(f\) is concave up if \(f′\) is increasing. From Corollary \(3\), we know that if \(f′\) is a differentiable function, then \(f′\) is increasing if its derivative \(f''(x)>0\). Therefore, a function \(f\) that is twice differentiable is concave up when \(f''(x)>0\). Similarly, a function \(f\) is concave down if \(f′\) is decreasing. We know that a differentiable function \(f′\) is decreasing if its derivative \(f''(x)<0\). Therefore, a twice-differentiable function \(f\) is concave down when \(f''(x)<0\). Applying this logic is known as the *concavity test***.**

Test for Concavity

Let \(f\) be a function that is twice differentiable over an interval \(I\).

- If \(f''(x)>0\) for all \(x∈I\), then \(f\) is concave up over \(I\)
- If \(f''(x)<0\) for all \(x∈I,\) then \(f\) is concave down over \(I\).

We conclude that we can determine the concavity of a function \(f\) by looking at the second derivative of \(f\). In addition, we observe that a function \(f\) can switch concavity (Figure \(\PageIndex{6}\)). However, a continuous function can switch concavity only at a point \(x\) if \(f''(x)=0\) or \(f''(x)\) is undefined. Consequently, to determine the intervals where a function \(f\) is concave up and concave down, we look for those values of \(x\) where \(f''(x)=0\) or \(f''(x)\) is undefined. When we have determined these points, we divide the domain of \(f\) into smaller intervals and determine the sign of \(f'\)' over each of these smaller intervals. If \(f''\) changes sign as we pass through a point \(x\), then \(f\) changes concavity. It is important to remember that a function \(f\) may not change concavity at a point \(x\) even if \(f''(x)=0\) or \(f''(x)\) is undefined. If, however, \(f\) does change concavity at a point a and \(f\) is continuous at \(a\), we say the point \((a,f(a))\) is an inflection point of \(f\).

Definition: inflection point

If \(f\) is continuous at \(a\) and \(f\) changes concavity at \(a\), the point \((a,f(a))\) is an** ***inflection point* of \(f\).

**Figure \(\PageIndex{6}\):** Since \(f''(x)>0\) for \(x<a\), the function \(f\) is concave up over the interval \((−∞,a)\). Since \(f''(x)<0\) for \(x>a\), the function \(f\) is concave down over the interval \((a,∞)\). The point \((a,f(a))\) is an inflection point of \(f\).

Example \(\PageIndex{3}\): Testing for Concavity

For the function \(f(x)=x^3−6x^2+9x+30,\) determine all intervals where \(f\) is concave up and all intervals where \(f\) is concave down. List all inflection points for \(f\). Use a graphing utility to confirm your results.

**Solution**

To determine concavity, we need to find the second derivative \(f''(x).\) The first derivative is \(f'(x)=3x^2−12x+9,\) so the second derivative is \(f''(x)=6x−12.\) If the function changes concavity, it occurs either when \(f''(x)=0\) or \(f''(x)\) is undefined. Since \(f''\) is defined for all real numbers \(x\), we need only find where \(f''(x)=0\). Solving the equation \(6x−12=0\), we see that \(x=2\) is the only place where \(f\) could change concavity. We now test points over the intervals \((−∞,2)\) and \((2,∞)\) to determine the concavity of \(f\). The points \(x=0\) and \(x=3\) are test points for these intervals.

Interval | Test Point | Sign of \(f''(x)=6x−12\) at Test Point | Conclusion |
---|---|---|---|

\((−∞,2)\) | \(x=0\) | − | \(f\) is concave down |

\((2,∞)\) | \(x=3\) | + | \(f\) is concave up |

We conclude that \(f\) is concave down over the interval \((−∞,2)\) and concave up over the interval \((2,∞)\). Since \(f\) changes concavity at \(x=2\), the point \((2,f(2))=(2,32)\) is an inflection point. Figure \(\PageIndex{7}\) confirms the analytical results.

**Figure \(\PageIndex{7}\):** The given function has a point of inflection at \((2,32)\) where the graph changes concavity.

Exercise \(\PageIndex{3}\)

For \(f(x)=−x^3+\frac{3}{2}x^2+18x\), find all intervals where \(f\) is concave up and all intervals where \(f\) is concave down.

**Hint**-
Find where \(f''(x)=0\)

**Answer**-
\(f\) is concave up over the interval \((−∞,\frac{1}{2})\) and concave down over the interval \((\frac{1}{2},∞)\)

We now summarize, in Table \(\PageIndex{2}\), the information that the first and second derivatives of a function \(f\) provide about the graph of \(f\), and illustrate this information in Figure \(\PageIndex{8}\).

Sign of \(f'\) |
Sign of \(f''\) |
Is \(f\) increasing or decreasing? |
Concavity |
---|---|---|---|

Positive | Positive | Increasing | Concave up |

Positive | Negative | Increasing | Concave down |

Negative | Positive | Decreasing | Concave up |

Negative | Negative | Decreasing | Concave sown |

**Figure \(\PageIndex{8}\):**Consider a twice-differentiable \(I\) over an open interval \(I\). If \(f'(x)>0\) for all \(x∈I\), the function is increasing over \(I\). If \(f'(x)<0\) for all \(x∈I\), the function is decreasing over \(I\). If \(f''(x)>0\) for all \(x∈I\), the function is concave up. If \(f''(x)<0\) for all \(x∈I\), the function is concave down on \(I\).

## The Second Derivative Test

The first derivative test provides an analytical tool for finding local extrema, but the second derivative can also be used to locate extreme values. Using the second derivative can sometimes be a simpler method than using the first derivative.

We know that if a continuous function has a local extrema, it must occur at a critical point. However, a function need not have a local extrema at a critical point. Here we examine how the **second derivative test **can be used to determine whether a function has a local extremum at a critical point. Let \(f\) be a twice-differentiable function such that \(f′(a)=0\) and \(f''\) is continuous over an open interval \(I\) containing \(a\). Suppose \(f''(a)<0\). Since \(f''\) is continuous over \(I, f''(x)<0\) for all \(x∈I\) (Figure \(\PageIndex{9}\)). Then, by Corollary \(3, f′\) is a decreasing function over \(I\). Since \(f′(a)=0\), we conclude that for all \(x∈I,f′(x)>0\) if \(x<a\) and \(f′(x)<0\) if \(x>a\). Therefore, by the first derivative test, \(f\) has a local maximum at \(x=a\).

On the other hand, suppose there exists a point \(b\) such that \(f′(b)=0\) but \(f''(b)>0\). Since \(f''\) is continuous over an open interval \(I\) containing \(b\), then \(f''(x)>0\) for all \(x∈I\) (Figure \(\PageIndex{9}\)). Then, by Corollary \(3,f′\) is an increasing function over \(I\). Since \(f′(b)=0\), we conclude that for all \(x∈I\), \(f′(x)<0\) if \(x<b\) and \(f′(x)>0\) if \(x>b\). Therefore, by the first derivative test, \(f\) has a local minimum at \(x=b.\)

**Figure \(\PageIndex{9}\):*** Consider a twice-differentiable function \(f\) such that \(f''\) is continuous. Since \(f'(a)=0\) and \(f''(a)<0\), there is an interval \(I\) containing \(a\) such that for all \(x\) in \(I\), \(f\) is increasing if \(x<a\) and \(f\) is decreasing if \(x>a\). As a result, \(f\) has a local maximum at \(x=a\). Since \(f'(b)=0\) and \(f''(b)>0\), there is an interval \(I\) containing \(b\) such that for all \(x\) in \(I\), \(f\) is decreasing if \(x<b\) and \(f\) is increasing if \(x>b\). As a result, \(f\) has a local minimum at \(x=b\).*

Second Derivative Test

Suppose \(f′(c)=0,f''\) is continuous over an interval containing \(c\).

- If \(f''(c)>0\), then \(f\) has a local minimum at \(c\).
- If \(f''(c)<0\), then \(f\) has a local maximum at \(c\).
- If \(f''(c)=0,\) then the test is inconclusive.

Note that for case iii. when \(f''(c)=0\), then \(f\) may have a local maximum, local minimum, or neither at \(c\). For example, the functions \(f(x)=x^3, f(x)=x^4,\) and \(f(x)=−x^4\) all have critical points at \(x=0\). In each case, the second derivative is zero at \(x=0\). However, the function \(f(x)=x^4\) has a local minimum at \(x=0\) whereas the function \(f(x)=−x^4\) has a local maximum at \(x\), and the function \(f(x)=x^3\) does not have a local extremum at \(x=0\).

Let’s now look at how to use the second derivative test to determine whether \(f\) has a local maximum or local minimum at a critical point c where \(f′(c)=0.\)

Example \(\PageIndex{4}\): Using the Second Derivative Test

Use the second derivative to find the location of all local extrema for \(f(x)=x^5−5x^3.\)

**Solution**

apply the second derivative test, we first need to find critical points \(c\) where \(f′(c)=0\). The derivative is \(f′(x)=5x^4−15x^2\). Therefore, \(f′(x)=5x^4−15x^2=5x^2(x^2−3)=0\) when \(x=0,±\sqrt{3}\\).

To determine whether \(f\) has a local extrema at any of these points, we need to evaluate the sign of \(f''\) at these points. The second derivative is

\(f''(x)=20x^3−30x=10x(2x^2−3).\)

In the following table, we evaluate the second derivative at each of the critical points and use the second derivative test to determine whether \(f\) has a local maximum or local minimum at any of these points.

\(x\) | \(f''(x)\) | Conclusion |

\(−\sqrt{3}\) | \(−30\sqrt{3}\) | Local maximum |

\(0\) | \(0\) | Second derivative test is inconclusive |

\(\sqrt{3}\) | \(30\sqrt{3}\) | Local minimum |

By the second derivative test, we conclude that \(f\) has a local maximum at \(x=−\sqrt{3}\) and \(f\) has a local minimum at \(x=\sqrt{3}\). The second derivative test is inconclusive at \(x=0\). To determine whether \(f\) has a local extrema at \(x=0,\) we apply the first derivative test. To evaluate the sign of \(f′(x)=5x^2(x^2−3)\) for \(x∈(−\sqrt{3},0)\) and \(x∈(0,\sqrt{3})\), let \(x=−1\) and \(x=1\) be the two test points. Since \(f′(−1)<0\) and \(f′(1)<0\), we conclude that \(f\) is decreasing on both intervals and, therefore, \(f\) does not have a local extrema at \(x=0\) as shown in the following graph.

**Figure \(\PageIndex{10}\):**The function \(f\) has a local maximum at \(x=−\sqrt{3}\) and a local minimum at \(x=\sqrt{3}\)

Exercise \(\PageIndex{4}\)

Consider the function \(f(x)=x^3−(\frac{3}{2})x^2−18x\). The points \(c=3,−2\) satisfy \(f′(c)=0\). Use the second derivative test to determine whether \(f\) has a local maximum or local minimum at those points.

**Hint**-
\(f''(x)=6x−3\)

**Answer**-
\(f\) has a local maximum at \(−2\) and a local minimum at \(3\).

We have now developed the tools we need to determine where a function is increasing and decreasing, as well as acquired an understanding of the basic shape of the graph. In the next section we discuss what happens to a function as \(→±∞.\) At that point, we have enough tools to provide accurate graphs of a large variety of functions.

## Key Concepts

- If \(c\) is a critical point of \(f\) and \(f′(x)>0\) for \(x<c\) and \(f′(x)<0\) for \(x>c\), then \(f\) has a local maximum at \(c\).
- If \(c\) is a critical point of \(f\) and \(f′(x)<0\) for \(x<c\) and \(f′(x)>0\) for \(x>c,\) then \(f\) has a local minimum at \(c\).
- If \(f''(x)>0\) over an interval \(I\), then \(f\) is concave up over \(I\).
- If \(f''(x)<0\) over an interval \(I\), then \(f\) is concave down over \(I\).
- If \(f′(c)=0\) and \(f''(c)>0\), then \(f\) has a local minimum at \(c\).
- If \(f′(c)=0\) and \(f''(c)<0\), then \(f\) has a local maximum at \(c\).
- If \(f′(c)=0\) and \(f''(c)=0\), then evaluate \(f′(x)\) at a test point \(x\) to the left of \(c\) and a test point \(x\) to the right of \(c\), to determine whether \(f\) has a local extremum at \(c\).

## Glossary

**concave down**- if \(f\) is differentiable over an interval \(I\) and \(f′\) is decreasing over \(I\), then \(f\) is concave down over \(I\)

**concave up**- if \(f\) is differentiable over an interval \(I\) and \(f′\) is increasing over \(I\), then \(f\) is concave up over \(I\)

**concavity**- the upward or downward curve of the graph of a function

**concavity test**- suppose \(f\) is twice differentiable over an interval \(I\); if \(f''>0\) over \(I\), then \(f\) is concave up over \(I\); if \(f''<\) over \(I\), then \(f\) is concave down over \(I\)

**first derivative test**- let \(f\) be a continuous function over an interval \(I\) containing a critical point \(c\) such that \(f\) is differentiable over \(I\) except possibly at \(c\); if \(f′\) changes sign from positive to negative as \(x\) increases through \(c\), then \(f\) has a local maximum at \(c\); if \(f′\) changes sign from negative to positive as \(x\) increases through \(c\), then \(f\) has a local minimum at \(c\); if \(f′\) does not change sign as \(x\) increases through \(c\), then f does not have a local extremum at \(c\)

**inflection point**- if \(f\) is continuous at \(c\) and \(f\) changes concavity at \(c\), the point \((c,f(c))\) is an inflection point of \(f\)

**second derivative test**- suppose \(f′(c)=0\) and \(f'\)' is continuous over an interval containing \(c\); if \(f''(c)>0\), then \(f\) has a local minimum at \(c\); if \(f''(c)<0\), then \(f\) has a local maximum at \(c\); if \(f''(c)=0\), then the test is inconclusive

### Contributors

Gilbert Strang (MIT) and Edwin “Jed” Herman (Harvey Mudd) with many contributing authors. This content by OpenStax is licensed with a CC-BY-SA-NC 4.0 license. Download for free at http://cnx.org.