# Continuity


{{< include ../_common_code.qmd >}}

This section uses these add-on packages:


```{julia}
using CalculusWithJulia
using Plots
plotly()
using SymPy
```


---

::: {#fig-mobius-strip-biennale}
![](figures/korean-mobius.jpg){width=40%}

A Möbius strip by Koo Jeong A
:::


The definition Google finds for *continuous* is *forming an unbroken whole; without interruption*.


The concept in calculus, as transferred to functions, is similar. Roughly speaking, a continuous function is one whose graph could be drawn without having to lift (or interrupt) the pencil drawing it.


Consider the two graphs show in @fig-two-plots-one-continuous-one-not-almost-always-equal.

::: {#fig-two-plots-one-continuous-one-not-almost-always-equal}
```{julia}
#| hold: true
#| echo: false
plt1 = plot([-1,0], [-1,-1],  color=:black, legend=false, linewidth=5)
plot!(plt1, [0, 1], [ 1, 1], color=:black, linewidth=5)
plt1
#| hold: true
#| echo: false
plt2 = plot([-1,-.1, .1, 1], [-1,-1, 1, 1], color=:black, legend=false, linewidth=5)

plot(plt1, plt2)
```

Plot of two functions that are equal at most of their points
:::

Though similar at some level---they agree at nearly every value of $x$--- the first has a "jump" from $-1$ to $1$ instead of the transition in the second one. The first is not continuous at $0$---a break is needed to draw it---where as the second is continuous.


A formal definition of continuity was historically a bit harder to develop. At [first](http://en.wikipedia.org/wiki/Intermediate_value_theorem) the concept was that for any $y$ between any two values in the range for $f(x)$, the function should take on the value $y$ for some $x$. Clearly this could distinguish the two graphs above, as one takes no values in $(-1,1)$, whereas the other---the continuous one---takes on all values in that range.


However, [Cauchy](http://en.wikipedia.org/wiki/Cours_d%27Analyse) defined continuity by $f(x + \alpha) - f(x)$ being small whenever $\alpha$ was small. This basically rules out "jumps" and proves more useful as a tool to describe continuity.


The [modern](http://en.wikipedia.org/wiki/Continuous_function#History) definition simply pushes the details to the definition of the limit:

::: {.definition title="Definition of continuity at a point"}

A function $f(x)$ is continuous at $x=c$ if $\lim_{x \rightarrow c}f(x) = f(c)$.

:::


The definition says three things:

* the limit exists at $c$;

* the function is defined at $c$ ($c$ is in the domain of $f$); and

* the value of the limit is the same as $f(c)$.


The definition speaks to continuity at a point, we can extend it to continuity over an interval $(a,b)$ by saying:

::: {.definition title="Definition of continuity over an open interval"}

A function $f(x)$ is continuous over $(a,b)$ if at each point $c$ with $a < c < b$, $f(x)$ is continuous at $c$.

:::


Finally, as with limits, it can be convenient to speak of *right* continuity and *left* continuity at a point, where the limit in the definition is replaced by a right or left limit, as appropriate.

In particular:

::: {.definition title="Definition of continuity over a close interval"}

A function is *continuous* over $[a,b]$ if it is continuous on $(a,b)$, left continuous at $b$ and right continuous at $a$.

:::


:::{.callout-warning}
## Warning
The limit in the definition of continuity is the basic limit and not an extended sense where infinities are accounted for.

:::

##### Examples of continuity


Most familiar functions are continuous everywhere.


  * For example, a monomial function $f(x) = ax^n$ for non-negative, integer $n$ will be continuous. This is because the limit exists everywhere, the domain of $f$ is all $x$ and there are no jumps.
  * Similarly, the building-block trigonometric functions $\sin(x)$, $\cos(x)$ are continuous everywhere.
  * So are the exponential functions $f(x) = a^x, a > 0$.
  * The hyperbolic sine ($(e^x - e^{-x})/2$) and cosine ($(e^x + e^{-x})/2$) are continuous everywhere, as $e^x$ is.
  * The hyperbolic tangent is, as $\cosh(x) > 0$ for all $x$.


Some familiar functions are *mostly* continuous but not everywhere.


  * For example, $f(x) = \sqrt{x}$ is continuous on $(0,\infty)$ and right continuous at $0$, but it is not defined for negative $x$, so can't possibly be continuous there.
  * Similarly, $f(x) = \log(x)$ is continuous on $(0,\infty)$, but it is not defined at $x=0$, so is not right continuous at $0$.
  * The tangent function $\tan(x) = \sin(x)/\cos(x)$ is continuous everywhere *except* the points $x$ with $\cos(x) = 0$ ($\pi/2 + k\pi, k$ an integer).
  * The hyperbolic co-tangent is not continuous at $x=0$---when $\sinh$ is $0$,
  * The semicircle $f(x) = \sqrt{1 - x^2}$ is *continuous* on $(-1, 1)$. It is not continuous at $-1$ and $1$, though it is right continuous at $-1$ and left continuous at $1$. (It is continuous on $[-1,1]$.)


##### Examples of discontinuity


There are various reasons why a function may not be continuous.


* The function $f(x) = \sin(x)/x$ has a limit at $0$ but is not defined at $0$, so is not continuous at $0$. The function can be redefined to make it continuous.

* The function $f(x) = 1/x$ is continuous everywhere *except* $x=0$ where *no* limit exists.

* A rational function $f(x) = p(x)/q(x)$ will be continuous everywhere except where $q(x)=0$. (The function $f$ may still have a limit where $q$ is $0$, should factors cancel, but $f$ won't be defined at such values.)

* The function


$$
f(x) = \begin{cases}
         -1 &~ x < 0 \\
          0 &~ x = 0 \\
          1 &~ x > 0
\end{cases}
$$

is implemented by `Julia`'s `sign` function. It has a value at $0$, but no limit at $0$, so is not continuous at $0$. Furthermore, the left and right limits exist at $0$ but are not equal to $f(0)$ so the function is not left or right continuous at $0$. It is continuous everywhere except at $x=0$.


* Similarly, the function defined by the graph in @fig-line-with-removable-discontinity-at-0 is not continuous at $x=0$. It has a limit of $0$ at $0$, a function value $f(0) =1/2$, but the limit and the function value are not equal.


::: {#fig-line-with-removable-discontinity-at-0}
```{julia}
#| hold: true
#| echo: false
plot([-1,-.01], [-1,-.01], legend=false, color=:black)
plot!([.01, 1], [.01, 1], color=:black)
scatter!([0], [1/2], markersize=5, markershape=:circle)
ts = range(0, 2pi, 100)
C = Shape(0.02 * sin.(ts), 0.03 * cos.(ts))
plot!(C, fill=(:white,1), line=(:black, 1))
```

Function with a removable discontinuity
:::


* The `floor` function, which rounds down to the nearest integer, is also not continuous at the integers, but is right continuous at the integers, as, for example, $\lim_{x \rightarrow 0+} f(x) = f(0)$. The graph in @fig-floor-function-with-left-right-limits-indicated emphasizes the right continuity by placing a filled marker for the value of the function when there is a jump and an open marker where the function is not that value.

::: {#fig-floor-function-with-left-right-limits-indicated}
```{julia}
#| echo: false
plt = let
    empty_style = (xticks=-4:4, yticks=-4:4,
                    framestyle=:origin,
                    legend=false)
	axis_style = (arrow=true, side=:head, line=(:gray, 1))
	text_style = (10,)
	fn_style =  (;line=(:black, 3))
	fn2_style =  (;line=(:red, 4))
	mark_style = (;line=(:gray, 1, :dot))
	domain_style = (;fill=(:orange, 0.35), line=nothing)
	range_style = (; fill=(:blue, 0.35), line=nothing)

	ts = range(0, 2pi, 100)
	xys = sincos.(ts)
	xys = [.1 .* xy for xy in xys]

	plot(; empty_style..., aspect_ratio=:equal)
	plot!([-4.25,4.25], [0,0]; axis_style...)
	plot!([0,0], [-4.25, 4.25]; axis_style...)

	for k in -4:4
		P,Q = (k,k),(k+1,k)
		plot!([P,Q], line=(:black,1))
		S = Shape([k .+ xy for xy in xys])
		plot!(S; fill=(:black,))
		S = Shape([(k+1,k) .+ xy for xy in xys])
		plot!(S; fill=(:white,), line=(:black,1))
	end


	current()
end
plt
```

```{julia}
#| echo: false
plotly()
nothing
```
The `floor` function
:::

* The function $f(x) = 1/x^2$ is not continuous at $x=0$: $f(x)$ is not defined at $x=0$ and $f(x)$ has no limit at $x=
0$ (in the usual sense).

* On the Wikipedia page for [continuity](https://en.wikipedia.org/wiki/Continuous_function) the example of Dirichlet's function is given:


$$
f(x) =
\begin{cases}
0 &~ \text{if } x \text{ is irrational,}\\
1 &~ \text{if } x \text{ is rational.}
\end{cases}
$$

The limit for any $c$ is discontinuous, as any interval about $c$ will contain *both* rational and irrational numbers so the function will not take values in a small neighborhood around any potential $L$.


##### Example


Let a function be defined by cases:


$$
f(x) = \begin{cases}
3x^2 + c &~ x \geq 0,\\
2x-3 &~ x < 0.
\end{cases}
$$

What value of $c$ will make $f(x)$ a continuous function?


We note that for $x < 0$ and for $x > 0$ the function is defined by a simple polynomial, so is continuous. At $x=0$ to be continuous we need a limit to exist *and* be equal to $f(0)$, which is $c$. A limit exists if the left and right limits are equal. This means we need to solve for $c$ to make the left and right limits equal. We do this next (with a bit of overkill in this case):


```{julia}
@syms x c
ex1 = 3x^2 + c
ex2 = 2x-3
del = limit(ex1, x=>0, dir="+") - limit(ex2, x=>0, dir="-")
```

We need to solve for $c$ to make `del` zero:


```{julia}
solve(del ~ 0, c)
```

This gives the value of $c$.


This is a bit fussier than need be. As the left and right pieces (say, $f_l$ and $f_r$) as both are polynomials are continuous everywhere, so would have left and right limits given through evaluation. Solving for `c` as follows is enough:

```{julia}
solve(ex1(x=>0) ~ ex2(x=>0), c)
```

##### Example

Identifying from its graph that a function is discontinuous or not can be complicated by the graphing algorithm which simply connects adjacent points with a line segment allowing the eye to fill in the dot-to-dot graphic as  a curve. The default plot in @fig-plot-of-floor-function-minus5-halves-to-5-halves-shows-artifacts-of-plotting of the `floor` function shows a potential issue.

::: {#fig-plot-of-floor-function-minus5-halves-to-5-halves-shows-artifacts-of-plotting}
```{julia}
plot(floor, -5/2, 5/2; legend=false)
```
The `floor` function plotted without taking care of the discontinuties may appear "continuous"
:::

The "risers" on the steps are an artifact of the basic dot-to-dot algorithm, which assumes continuity between adjacent points (we were more careful in our earlier plot of this function in @fig-floor-function-with-left-right-limits-indicated).

The following simple function just plots a bunch of points, leaving the eye to fill in the line, though so many points are chosen this doesn't require much effort for simple cases. This function also plots a point on the $x$- and $y$-axes (emphasized by the argument `framestyle=:origin`) for each point graphed to emphasize the range of $y$ values for the specified $x$ values. @fig-pixel-plot-function-kinda-silly-but-just-points-loads shows the `floor` function plotted this way.

```{julia}
function pixel_plot(f, a, b; kwargs...)

    xs = range(a, b, 801) # lots of points
    ys = f.(xs)
    zs = zero.(xs)

    p = plot(;framestyle=:origin, legend=false, kwargs...)

    scatter!(p, xs, ys; marker=(:square, :black, 1))      # f(x)
    scatter!(p, xs, zs; marker=(:square, :blue,  2, 0.03)) # domain, [a,b]
    scatter!(p, zs, ys; marker=(:square, :red,   3, 0.25))  # range

    p
end
```

::: {#fig-pixel-plot-function-kinda-silly-but-just-points-loads}
```{julia}
pixel_plot(floor, -5/2, 5/2)
```
Plot of `floor` function over $[-5/2, 5/2]$ generated by plotting many points rather than using the dot-to-dot method
:::

The broken up range suggests a fundamentally discontinuous function. In the next section we will state this differently---that a continuous function *will* have an unbroken range when restricted to some interval $[a,b]$.

For one more example, @fig-pixel-plot-sin-sign-big-differences shows the difference between `sin` and `sign`, as functions:

::: {#fig-pixel-plot-sin-sign-big-differences}
```{julia}
p1 = pixel_plot(sin,  -pi, pi; title="sin")
p2 = pixel_plot(sign, -pi, pi; title="sign")
plot(p1, p2)
```
Plot of both `sin` and `sign` functions

:::
The continuous `sin` function has an unbroken range, $[-1,1]$; the discountinous `sign` function has a broken range consisting of ${-1, 0, 1}$.

## Rules for continuity


As we've seen, functions can be combined in several ways. How do these relate with continuity?

::: {.relationship title="Rules of continuity"}
Suppose $f(x)$ and $g(x)$ are both continuous on $I$. Then:

* The linear combination $h(x) = a f(x) + b g(x)$ is continuous on $I$ for any real numbers $a$ and $b$;

* The product $h(x) = f(x) \cdot g(x)$ is continuous on $I$; and

* The quotient $h(x) = f(x) / g(x)$ is continuous at all points $c$ in $I$ **where** $g(c) \neq 0$.

* The composition $h(x) = f(g(x))$ is continuous at $x=c$ *if*  $g(x)$ is continuous at $c$ *and* $f(x)$ is continuous at $g(c)$.

Continuity is preserved for all of the basic operations except when dividing by $0$.
:::


##### Examples


* Since a monomial $f(x) = ax^n$ ($n$ a non-negative integer) is continuous, by the first rule, any polynomial will be continuous.

* Since both $f(x) = e^x$ and $g(x)=\sin(x)$ are continuous everywhere, so will be $h(x) = e^x \cdot \sin(x)$.

* Since $f(x) = e^x$ is continuous everywhere and $g(x) = -x$ is continuous everywhere, the composition $h(x) = e^{-x}$ will be continuous everywhere.

* Since $f(x) = x$ is continuous everywhere, the function $h(x) = 1/x$---a ratio of continuous functions---will be continuous everywhere *except* possibly at $x=0$ (where it is not continuous).

* The function $h(x) = e^{x\ln(x)}$ will be continuous on $(0,\infty)$, the same domain that $g(x) = x\ln(x)$ is continuous. This function (which simplifies to $x^x$ when $x>0$) has a right limit at $0$ (of $1$), but is not right continuous, as $h(0)$ is not defined. (In `Julia`, the function `h(x) = exp(x*log(x))` is not defined at `0` **but** the function `h(x) = x^x` is defined at `0.0` to be `1.0`.)


## Questions


###### Question


Let $f(x) = \sin(x)$ and $g(x) = \cos(x)$. Which of these is not continuous everywhere?


$$
f+g,~ f-g,~ f\cdot g,~ f\circ g,~ f/g
$$

```{julia}
#| hold: true
#| echo: false
choices = ["``f+g``", "``f-g``", "``f\\cdot g``", "``f\\circ g``", "``f/g``"]
answ = length(choices)
radioq(choices, answ)
```

###### Question


Let $f(x) = \sin(x)$, $g(x) = \sqrt{x}$.


When will $f\circ g$ be continuous?


```{julia}
#| hold: true
#| echo: false
choices = [L"For all $x$", L"For all $x > 0$", L"For all $x$ where $\sin(x) > 0$"]
answ = 2
radioq(choices, answ, keep_order=true)
```

When will $g \circ f$ be continuous?


```{julia}
#| hold: true
#| echo: false
choices = [L"For all $x$", L"For all $x > 0$", L"For all $x$ where $\sin(x) > 0$"]
answ = 3
radioq(choices, answ, keep_order=true)
```

###### Question


The composition $f\circ g$ will be continuous everywhere provided:


```{julia}
#| hold: true
#| echo: false
choices = [
L"The function $g$ is continuous everywhere",
L"The function $f$ is continuous everywhere",
L"The function $g$ is continuous everywhere and $f$ is continuous on the range of $g$",
L"The function $f$ is continuous everywhere and $g$ is continuous on the range of $f$"]
answ = 3
radioq(choices, answ, keep_order=true)
```

###### Question


At which values is $f(x) = 1/\sqrt{x-2}$ not continuous?


```{julia}
#| hold: true
#| echo: false
choices=[
L"When $x > 2$",
L"When $x \geq 2$",
L"When $x \leq 2$",
L"For $x \geq 0$"]
answ = 3
radioq(choices, answ)
```

###### Question


A value $x=c$ is a *removable singularity* for $f(x)$ if $f(x)$ is not continuous at $c$ but will be if $f(c)$ is redefined to be $\lim_{x \rightarrow c} f(x)$.


The function $f(x) = (x^2 - 4)/(x-2)$ has a removable singularity at $x=2$. What value would we redefine $f(2)$ to be, to make $f$ a continuous function?


```{julia}
#| hold: true
#| echo: false
f(x) = (x^2 -4)/(x-2);
numericq(f(2.00001), .001)
```

###### Question


The highly oscillatory function


$$
f(x) = x^2 (\cos(1/x) - 1)
$$

has a removable singularity at $x=0$. What value would we redefine $f(0)$ to be, to make $f$ a continuous function?


```{julia}
#| hold: true
#| echo: false
numericq(0, .001)
```

###### Question


Let $f(x)$ be defined by


$$
f(x) = \begin{cases}
c + \sin(2x - \pi/2) &~ x > 0\\
3x - 4               &~ x \leq 0.
\end{cases}
$$

What value of $c$ will make $f(x)$ continuous?


```{julia}
#| hold: true
#| echo: false
val = (3*0 - 4) - (sin(2*0 - pi/2))
numericq(val)
```

###### Question


Suppose $f(x)$, $g(x)$, and $h(x)$ are continuous functions on $(a,b)$. If $a < c < b$, are you sure that $\lim_{x \rightarrow c} f(g(x))$ is $f(g(c))$?


```{julia}
#| hold: true
#| echo: false
choices = [L"No, as $g(c)$ may not be in the interval $(a,b)$",
"Yes, composition of continuous functions results in a continuous function, so the limit is just the function value."
]
answ=1
radioq(choices, answ)
```

###### Question


Consider the function $f(x)$ given by the following graph


```{julia}
#| hold: true
#| echo: false
let
	xs = range(0, stop=2, length=50)

	plot(xs, [sqrt(1 - (x-1)^2) for x in xs];
		 line=(:black,1),
		 legend=false, xlims=(-0.1,4.1))
	plot!([2,3], [1,0]; line=(:black,1))
	plot!([3,4],[1,0]; line=(:black,1))

	scatter!([(0,0)], markersize=5, markercolor=:black)
	scatter!([(2,0)], markersize=5, markercolor=:white)
	scatter!([(2, 1)], markersize=5; markercolor=:black)
	scatter!([(3,0)], markersize=5; markercolor=:black)
	scatter!([(3,1)], markersize=5; markercolor=:white)
	scatter!([(4,0)], markersize=5; markercolor=:black)
end
```

The function $f(x)$ is continuous at $x=1$?


```{julia}
#| hold: true
#| echo: false
yesnoq(true)
```

The function $f(x)$ is continuous at $x=2$?


```{julia}
#| hold: true
#| echo: false
yesnoq(false)
```

The function $f(x)$ is right continuous at $x=3$?


```{julia}
#| hold: true
#| echo: false
yesnoq(false)
```

The function $f(x)$ is left continuous at $x=4$?


```{julia}
#| hold: true
#| echo: false
yesnoq(true)
```

###### Question


Let $f(x)$ and $g(x)$ be continuous functions. Their graphs over $[0,1]$ are given by:


```{julia}
#| hold: true
#| echo: false
xs = range(0, 1, length=251)
plot(xs, [sin.(2pi*xs) cos.(2pi*xs)], layout=2, title=["f" "g"], legend=false)
```

What is $\lim_{x \rightarrow 0.25} f(g(x))$?


```{julia}
#| hold: true
#| echo: false
val = sin(2pi * cos(2pi * 1/4))
numericq(val)
```

What is $\lim_{x \rightarrow 0.25} g(f(x))$?


```{julia}
#| hold: true
#| echo: false
val = cos(2pi * sin(2pi * 1/4))
numericq(val)
```

What is $\lim_{x \rightarrow 0.5} f(g(x))$?


```{julia}
#| hold: true
#| echo: false
choices = ["Can't tell",
"``-1.0``",
"``0.0``"
]
answ = 1
radioq(choices, answ)
```


###### Question


A parametric equation is specified by a parameterization $(f(t), g(t)), a \leq t \leq b$. The parameterization will be continuous if and only if each function is continuous.


Suppose $k_x$ and $k_y$ are positive integers and $a, b$ are positive numbers, will the [Lissajous](https://en.wikipedia.org/wiki/Parametric_equation#Lissajous_Curve) curve given by $(a\cos(k_x t), b\sin(k_y t))$ be continuous?


```{julia}
#| hold: true
#| echo: false
yesnoq(true)
```

Here is a sample graph for $a=1, b=2, k_x=3, k_y=4$:


```{julia}
#| hold: true
a,b = 1, 2
k_x, k_y = 3, 4
plot(t -> a * cos(k_x *t), t-> b * sin(k_y * t), 0, 4pi)
```
