Value a function approaches as input approaches a point. Foundation of calculus.
Self-serve tutorial - low prerequisites, straightforward concepts.
Calculus begins when you stop asking “what is the value at x?” and start asking “what happens as x gets close to a?” Limits formalize that idea: they capture the trend of a function near a point, even when the function is messy, undefined, or unhelpful exactly at that point.
A limit lim_{x → a} f(x) = L means: by taking x sufficiently close to a (not necessarily equal), you can make f(x) as close to L as you want. Limits depend on values near a, not the value at a. One-sided limits and “infinite limits” handle edges and blow-ups.
When you evaluate a function f(x), you plug in a number x and get an output. That works well when the function behaves nicely everywhere. But many important questions are about behavior near a point, not at the point:
The common pattern: we care about what happens as the input approaches something.
We write
lim_{x → a} f(x) = L
and read it as:
“As x approaches a, f(x) approaches L.”
This means the outputs f(x) can be made arbitrarily close to L by choosing x sufficiently close to a.
Two key ideas are hidden in this sentence:
1) x approaches a does not mean x = a. In fact, x might never equal a.
2) The limit depends on f(x) values near a, not on what happens at a.
Because you know the distance formula, it helps to translate “approaches” into distance:
So limits connect two distances:
Limits are often confused with:
Imagine a function with a hole at x = 2, but the curve around it sits near y = 5. You might have f(2) undefined (a hole), yet
lim_{x → 2} f(x) = 5.
That is not a contradiction: limits ignore the single point x = 2 and care about points arbitrarily close to 2.
You don’t need full formalism yet, but the core idea is worth stating:
lim_{x → a} f(x) = L means:
For every ε > 0, there exists δ > 0 such that if 0 < |x − a| < δ, then |f(x) − L| < ε.
Interpretation:
Even if you never write ε–δ proofs, this definition explains the “arbitrarily close” nature of limits.
A limit is a behavioral claim. But in practice, you want to compute limits efficiently. The big strategy is:
1) Try direct substitution.
2) If substitution fails (often because of 0/0), simplify the function without changing its behavior near a.
3) If it still fails, use alternative viewpoints (graphs, tables, special limit facts, or more advanced tools later).
If f is “well-behaved” at a (no division by 0, no discontinuity), then the limit usually equals the function value:
lim_{x → a} f(x) = f(a).
Example pattern:
This is not the definition of a limit; it’s a consequence for continuous functions (a concept you’ll unlock soon).
A common situation:
lim_{x → a} \frac{g(x)}{h(x)}
where g(a) = 0 and h(a) = 0. Direct substitution gives 0/0, which is indeterminate: it does not mean the limit is 0, undefined, or anything by itself.
The point is: near x = a, the expression might simplify.
Suppose
f(x) = \frac{x² − 4}{x − 2}.
At x = 2, both numerator and denominator are 0. But:
x² − 4 = (x − 2)(x + 2)
So for x ≠ 2,
\frac{x² − 4}{x − 2} = \frac{(x − 2)(x + 2)}{x − 2} = x + 2.
Now the behavior near 2 is the same as the simpler function x + 2 (except at the single point x = 2).
So:
lim_{x → 2} \frac{x² − 4}{x − 2}
= lim_{x → 2} (x + 2)
= 4.
Notice what happened: we never needed f(2). In fact, the original expression is undefined at x = 2, yet the limit exists.
If you see something like:
\frac{√(x + c) − √(a + c)}{x − a}
direct substitution often yields 0/0. A standard move is to multiply by the conjugate.
Example structure:
(√u − √v)(√u + √v) = u − v.
That difference of squares is what removes the radical.
Consider a function:
f(x) =
Then:
lim_{x → 2} f(x) = lim_{x → 2} (3x + 1) = 7.
Even though f(2) = 100, the limit is 7 because all x values near 2 (but not equal to 2) use 3x + 1.
This is one of the most important limit intuitions: a single point does not control a limit.
| Situation at x = a | What substitution gives | Typical tool | What it means |
|---|---|---|---|
| f(a) defined, no “weirdness” | a number | Substitute | Limit usually equals that number |
| Division with h(a) = 0, g(a) ≠ 0 | ±∞ or undefined | One-sided check | Limit might diverge or not exist |
| 0/0 | indeterminate | factor/cancel, rationalize | Simplify to reveal near behavior |
| Jump or mismatch from left/right | two different numbers | compute one-sided limits | two-sided limit does not exist |
Sometimes “approach a” is ambiguous because the function behaves differently from the left and from the right. To capture that, we define:
The two-sided limit exists only if both one-sided limits exist and are equal:
If lim_{x → a⁻} f(x) = L and lim_{x → a⁺} f(x) = L,
then lim_{x → a} f(x) = L.
If they differ, the limit does not exist.
Define:
f(x) =
Then:
lim_{x → 0⁻} f(x) = 0
lim_{x → 0⁺} f(x) = 1
Since 0 ≠ 1,
lim_{x → 0} f(x) does not exist.
This is not about being “undefined”; f(0) exists (it’s 1). The limit fails because there is no single output value the function approaches from both sides.
Some functions grow without bound as x approaches a point. We express this with ±∞:
lim_{x → a} f(x) = ∞
This does not mean the limit is a real number. It means f(x) becomes arbitrarily large.
Example:
f(x) = 1/x².
As x → 0, 1/x² → ∞ from both sides (because x² is always positive).
So:
lim_{x → 0} 1/x² = ∞.
But with f(x) = 1/x:
lim_{x → 0⁻} 1/x = −∞
lim_{x → 0⁺} 1/x = ∞
The one-sided behaviors disagree, so:
lim_{x → 0} 1/x does not exist.
Sometimes you approach a boundary point of the domain (like x → 0⁺ for √x), or you study end behavior:
lim_{x → ∞} f(x), lim_{x → −∞} f(x).
These are still limits: “x grows without bound” is another form of “input approaches a target” (the target is not a finite number).
Example:
lim_{x → ∞} \frac{1}{x} = 0.
Interpretation: you can make 1/x as close to 0 as you want by taking x sufficiently large.
When asked about lim_{x → a} f(x):
1) Check if both sides are relevant (is the function defined near a on both sides?).
2) Compute lim_{x → a⁻} f(x) and lim_{x → a⁺} f(x).
3) If they match to a finite L, the limit is L.
4) If they both go to ∞ (or both to −∞), describe it as an infinite limit.
5) If they disagree, the limit does not exist.
This checklist prevents a common error: assuming “a limit exists unless something is undefined.”
A derivative is defined using a limit. The slope of the secant line between x = a and x = a + h is:
m_secant = \frac{f(a + h) − f(a)}{h}.
The instantaneous slope (tangent slope) is what this approaches as h → 0:
f′(a) = lim_{h → 0} \frac{f(a + h) − f(a)}{h}.
Notice the same theme: we can’t just plug in h = 0 because that gives 0/0. Limits tell us what the expression approaches.
A function is continuous at a (informally) if the graph doesn’t tear there. Formally, one key condition is:
lim_{x → a} f(x) = f(a).
So continuity is not separate from limits; it’s built from them.
In algorithm analysis, we care about growth as n → ∞. Limits formalize “dominates” comparisons. A classic comparison is:
lim_{n → ∞} \frac{n}{n²} = lim_{n → ∞} \frac{1}{n} = 0.
Interpretation: n grows much more slowly than n²; in asymptotic terms, n is negligible compared to n².
Even if Big O has its own formal definition, limit intuition is a huge help for understanding it.
In probability, you’ll meet statements like:
As n → ∞, the sample mean \bar{X}_n approaches the expected value μ.
That is a limit/convergence claim: a sequence of random quantities gets arbitrarily close to μ with high probability (formal versions use probability language, but the “approach” idea is the same).
Limits are how math turns “zooming in” (local behavior near a point) into reliable statements. Many advanced concepts are just refinements of this:
If you understand limits as controlled approach, you’ll recognize the same pattern everywhere.
Compute lim_{x → 3} (x² − 9)/(x − 3).
Direct substitution gives (3² − 9)/(3 − 3) = 0/0, which is indeterminate.
Factor the numerator:
x² − 9 = (x − 3)(x + 3).
Rewrite for x ≠ 3:
(x² − 9)/(x − 3) = (x − 3)(x + 3)/(x − 3) = x + 3.
Now take the limit of the simplified expression:
lim_{x → 3} (x + 3) = 6.
Insight: The original expression is undefined at x = 3, but the limit still exists because limits depend on values arbitrarily near 3. Canceling reveals the nearby behavior.
Let f(x) = { x + 2 if x < 1; 4 − x if x ≥ 1 }. Find lim_{x → 1} f(x) and f(1).
Compute the left-hand limit:
lim_{x → 1⁻} f(x) = lim_{x → 1⁻} (x + 2) = 3.
Compute the right-hand limit:
lim_{x → 1⁺} f(x) = lim_{x → 1⁺} (4 − x) = 3.
Since both one-sided limits exist and are equal, the two-sided limit exists:
lim_{x → 1} f(x) = 3.
Now compute the function value at 1. Because x = 1 uses the second rule:
f(1) = 4 − 1 = 3.
Insight: Two-sided limits are agreements between the left and right behaviors. Piecewise definitions often make this explicit and easy to check.
Compute lim_{x → 0} (√(x + 9) − 3)/x.
Direct substitution gives (√9 − 3)/0 = 0/0, indeterminate.
Multiply numerator and denominator by the conjugate:
(√(x + 9) − 3)/x · (√(x + 9) + 3)/(√(x + 9) + 3).
Simplify the numerator using difference of squares:
(√(x + 9) − 3)(√(x + 9) + 3) = (x + 9) − 9 = x.
Now the expression becomes:
x / ( x(√(x + 9) + 3) ) = 1/(√(x + 9) + 3), for x ≠ 0.
Take the limit:
lim_{x → 0} 1/(√(x + 9) + 3) = 1/(3 + 3) = 1/6.
Insight: Rationalizing converts a root difference into a linear factor that cancels with x, revealing a stable nearby value.
lim_{x → a} f(x) = L means f(x) can be made arbitrarily close to L by taking x sufficiently close to a (not necessarily equal).
Limits depend on values near a; changing f(a) alone does not change the limit.
Direct substitution works when the function behaves nicely at a, but 0/0 signals you should simplify first.
Factor-and-cancel and rationalizing are standard algebraic tools to evaluate limits that appear indeterminate.
One-sided limits lim_{x → a⁻} and lim_{x → a⁺} must agree for the two-sided limit to exist.
Infinite limits (→ ∞ or → −∞) describe unbounded growth near a; they are not real-number limits.
Limits underpin derivatives (h → 0), continuity (limit equals value), asymptotics (n → ∞), and convergence ideas in probability.
Treating 0/0 as an answer instead of an indeterminate form that requires simplification.
Assuming lim_{x → a} f(x) = f(a) even when f(a) is undefined or the function has a jump.
Forgetting to check left-hand and right-hand limits before claiming a two-sided limit exists.
Thinking an infinite limit (∞) is a normal number rather than a statement of unbounded growth.
Compute lim_{x → 5} (x² − 25)/(x − 5).
Hint: Factor x² − 25 as a difference of squares, then cancel (x − 5).
x² − 25 = (x − 5)(x + 5). For x ≠ 5,
(x² − 25)/(x − 5) = x + 5.
So lim_{x → 5} (x² − 25)/(x − 5) = 10.
Let f(x) = { 2x if x < 2; x + 1 if x ≥ 2 }. Does lim_{x → 2} f(x) exist? If so, find it.
Hint: Compute lim_{x → 2⁻} and lim_{x → 2⁺} separately.
Left-hand: lim_{x → 2⁻} 2x = 4.
Right-hand: lim_{x → 2⁺} (x + 1) = 3.
Since 4 ≠ 3, lim_{x → 2} f(x) does not exist.
Compute lim_{x → 0} (√(1 + x) − 1)/x.
Hint: Multiply by the conjugate √(1 + x) + 1 to eliminate the square root in the numerator.
(√(1 + x) − 1)/x · (√(1 + x) + 1)/(√(1 + x) + 1)
= ((1 + x) − 1) / ( x(√(1 + x) + 1) )
= x / ( x(√(1 + x) + 1) )
= 1/(√(1 + x) + 1), for x ≠ 0.
Taking x → 0 gives 1/(1 + 1) = 1/2.
Next nodes you can unlock with this: