There are many times in life when it is not enough to know where something is - you need to know where it is going, and how fast. You need to know what its surroundings are. For example, if you are waiting for a bus, it is not enough to see the bus a block away - you need to know whether it is going where you want to go. If you are stuck in traffic, you need to know whether the blockage will clear, and whether a detour would be profitable. If you are lost in the woods, it is not enough to know that you are standing next to a creek - you need to know what creek it is, and where you are relative to its mouth.

The situation for functions is very similar. Very often knowing the value of a function at a point is not nearly enough - we need to know about the behavior of the function near that point. Sometimes a function might not even be defined at a point, but we can work with it as if it were. Consider the simple example function \(f\) given by \(f(x) = (x^2-1)/(x-1)\). We can see immediately that \(f(x)=x+1\) whenever \(x\ne 1\), but \(f\) is not defined at 1. Still, the fact that \(f(1)\) is not defined does not really matter - the function is defined at all the points near 1, and its behavior is very simple. You can imagine a police helicopter tracking a suspect vehicle as it drives down the freeway. When the vehicle goes under an overpass, it is not visible for a moment - its position is technically unknown. Still we know where it was before, we know where it is after it comes out from under the overpass, and nobody gives its disappearance a second thought.

In mathematics we deal with these variations in the behavior of functions in various ways. We can look at the slope of the graphs of functions to get an idea of trends - more about that later. We can also look at the behavior of functions near a certain point instead of simply evaluating the function at that point. In our example from the previous paragraph, we can see that \begin{align*} f(0.9) &= 1.9\\ f(0.99) &= 1.99\\ f(0.999) &= 1.999 \end{align*} and \begin{align*} f(1.1) &= 2.1\\ f(1.01) &= 2.01\\ f(1.001) &= 2.001. \end{align*} Evidently the value of the function is approaching 2 as its argument approaches 1. We say the limit of the function \(f\) as \(x\) approaches one is 2.

Of course, we can also talk about the behavior of \(f\) around any point where it is defined just as easily. For example \begin{align*} f(-0.1) &= 0.9\\ f(-0.01) &= 0.99\\ f(-0.001) &= 0.999. \end{align*} and \begin{align*} f(0.1) &= 1.1\\ f(0.01) &= 1.01\\ f(0.001) &= 1.001. \end{align*} Thus, we conclude that the limit of \(f(x)\) as \(x\) approaches zero is 1. In this case, we also see that \(f(0)=1,\) so the limit coincides with the value of the function when \(x=0\). Indeed, we can carry this idea a little farther. For any point \(x_0\) in the reals, we can see that the limit of \(f(x)\) as \(x\) approaches \(x_0\) is \(x_0+1\). This constitutes a new function, related to \(f\), but not identical. Through the limit, we have defined a new function that somehow describes the behavior of \(f\) while ignoring its particular shortcomings.

For the rest of this chapter we will discuss ways to make these ideas more technically solid, and ways to formalize evaluating these limits.