# Area between two curves


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

This section uses these add-on packages:


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


---


The definite integral gives the "signed" area between the function $f(x)$ and the $x$-axis over $[a,b]$. Conceptually, this is the area between two curves, $f(x)$ and $g(x)=0$. More generally, this integral:


$$
\int_a^b (f(x) - g(x)) dx
$$

can be interpreted as the "signed" area between $f(x)$ and $g(x)$ over $[a,b]$. If on this interval $[a,b]$ it is true that $f(x) \geq g(x)$, then this would just be the area, as seen in this figure. The rectangle in the figure has area: $(f(x_i)-g(x_i)) \cdot (x_{i+1}-x_i)$ for some $x_i, x_{i+1}$ suggestive of a term in a left Riemann sum of the integral of $f(x) - g(x)$:


```{julia}
#| hold: true
#| echo: false
#| label: fig-area-between-f-g
#| fig-cap: "Area between two functions"
f1(x) = x^2
g1(x) = sqrt(x)
a,b = 1/4, 3/4

xs = range(a, stop=b, length=250)
ss = vcat(xs, reverse(xs))
ts = vcat(f1.(xs), g1.(reverse(xs)))

plot(f1, 0, 1, legend=false)
plot!(g1)
plot!(ss, ts, fill=(0, :forestgreen, 0.25))
plot!(xs, f1.(xs), linewidth=5, color=:royalblue)
plot!(xs, g1.(xs), linewidth=5, color=:royalblue)


plot!(xs, f1.(xs), legend=false, linewidth=5, color=:blue)
plot!(xs, g1.(xs), linewidth=5, color=:blue)
u,v = .4, .5
plot!([u,v,v,u,u], [f1(u), f1(u), g1(u), g1(u), f1(u)], color=:black, linewidth=3)
```

In @fig-area-between-f-g we have $f(x) = \sqrt{x}$, $g(x)= x^2$ and $[a,b] = [1/4, 3/4]$. The shaded area is then found by:


$$
\int_{1/4}^{3/4} (x^{1/2} - x^2) dx = (\frac{x^{3/2}}{3/2} - \frac{x^3}{3})\big|_{1/4}^{3/4} = \frac{\sqrt{3}}{4} -\frac{7}{32}.
$$

#### Examples


Find the area bounded by the line $y=2x$ and the curve $y=2 - x^2$.


We can plot to see the area in question:


```{julia}
f(x) = 2 - x^2
g(x) = 2x
plot(f, -3,3)
plot!(g)
```

For this problem we need to identify $a$ and $b$. These are found numerically through:


```{julia}
h(x) = f(x) - g(x)
a,b = find_zeros(h, -3, 3)
```

The answer then can be found numerically:


```{julia}
first(quadgk(h, a, b))
```

##### Example


Find the integral between $f(x) = \sin(x)$ and $g(x)=\cos(x)$ over $[0,2\pi]$ where $f(x) \geq g(x)$.


A plot shows the areas:


```{julia}
f(x) = sin(x)
g(x) = cos(x)
plot(f, 0, 2pi)
plot!(g)
```

There is a single interval when $f \geq g$ and this can be found algebraically using basic trigonometry, or numerically:


```{julia}
a, b = find_zeros(x -> f(x) - g(x), 0, 2pi)  # pi/4, 5pi/4
quadgk(x -> f(x) - g(x), a, b)[1]
```

##### Example


Find the area between $x^n$ and $x^{n+1}$ over $[0,1]$ for $n=1,2,\dots$.


We have on this interval $x^n \geq x^{n+1}$, so the integral can be found symbolically through:


```{julia}
@syms x::positive n::positive
ex = integrate(x^n - x^(n+1), (x, 0, 1))
together(ex)
```

Based on this answer, what is the value of this


$$
\frac{1}{2\cdot 3} + \frac{1}{3\cdot 4} + \frac{1}{4\cdot 5} + \cdots?
$$

This should be no surprise, given how the areas computed carve up the area under the line $y=x^1$ over $[0,1]$, so the answer should be $1/2$.


```{julia}
p = plot(x, 0, 1, legend=false)
[plot!(p, x^n, 0, 1) for n in 2:20]
p
```

We can check using the `summation` function of `SymPy` which is similar in usage to `integrate`:


```{julia}
summation(1/(n+1)/(n+2), (n, 1, oo))
```

##### Example


Verify [Archimedes'](http://en.wikipedia.org/wiki/The_Quadrature_of_the_Parabola) finding that the area of the parabolic segment is $4/3$rds that of the triangle joining $a$, $(a+b)/2$ and $b$. @fig-area-between-f-g clearly shows the bigger parabolic segment area.


```{julia}
#| hold: true
#| echo: false
#| label: fig-archimedes-triangle
#| fig-cap: "Area of parabolic segment and triangle"
f(x) = 2 - x^2
a,b = -1, 1/2
c = (a + b)/2
xs = range(-sqrt(2), stop=sqrt(2), length=50)
rxs = range(a, stop=b, length=50)
rys = map(f, rxs)

plot(f, a, b, legend=false,
     line=(3, :royalblue),
     axis=([], false)
     )
plot!([a,b], [f(a),f(b)], line=(3, :royalblue))
xs = [a,c,b,a]
triangle = Shape(xs, f.(xs))
plot!(triangle, fill=(:forestgreen, 3, 0.25))

```

For concreteness, let $f(x) = 2-x^2$ and $[a,b] = [-1, 1/2]$, as in the figure. Then the area of the triangle can be computed through:


```{julia}
f(x) = 2 - x^2
a, b = -1, 1/2
𝐜 = (a + b)/2

sac, sab, scb = secant(f, a, 𝐜), secant(f, a, b), secant(f, 𝐜, b)
f1(x) = min(sac(x), scb(x))
f2(x) = sab(x)

A1 = quadgk(x -> f1(x) - f2(x), a, b)[1]
```

As we needed three secant lines, we used the `secant` function from `CalculusWithJulia` to create functions representing each. Once that was done, we used the `min` function to facilitate integrating over the top bounding curve, alternatively, we could break the integral over $[a,c]$ and $[c,b]$.


The area of the parabolic segment is more straightforward.


```{julia}
A2 = quadgk(x -> f(x) - f2(x), a, b)[1]
```

Finally, if Archimedes was right, this relationship should bring about $0$ (or something within round-off error):


```{julia}
A1 * 4/3 - A2
```

##### Example


Find the area bounded by $y=x^4$ and $y=e^x$ when $x^4 \geq e^x$ and $x > 0$.


A graph  over $[0,10]$ shows clearly the largest zero, for afterwards the exponential dominates the power.


```{julia}
h1(x) = x^4
h2(x) = exp(x)
plot(h1, 0, 10)
plot!(h2)
```

There must be another zero, though it is hard to see from the graph over $[0,10]$, as $0^4=0$ and $e^0=1$, so the polynomial must cross below the exponential to the left of $5$. (Otherwise, plotting over $[0,2]$ will clearly reveal the other zero.) We now find these intersection points numerically and then integrate:


```{julia}
#| hold: true
a,b = find_zeros(x -> h1(x) - h2(x), 0, 10)
quadgk(x -> h1(x) - h2(x), a, b)[1]
```

##### Examples


The area between $y=\sin(x)$ and $y=m\cdot x$ between $0$ and the first positive intersection depends on $m$ (where $0 \leq m \leq 1$. The extremes are when $m=0$, the area is $2$ and when $m=1$ (the line is tangent at $x=0$), the area is $0$. What is it for other values of $m$? The picture for $m=1/2$ is:


```{julia}
m = 1/2
plot(sin, 0, pi)
plot!(x -> m*x)
```

For a given $m$, the area is found after computing $b$, the intersection point. We express this as a function of $m$ for later reuse:


```{julia}
intersection_point(m) = maximum(find_zeros(x -> sin(x) - m*x, 0, pi))
a1 = 0
b1 = intersection_point(m)
quadgk(x -> sin(x) - m*x, a1, b1)[1]
```

In general, the area then as a function of `m` is found by substituting `intersection_point(m)` for `b`:


```{julia}
area(m) = quadgk(x -> sin(x) - m*x, 0, intersection_point(m))[1]
```

A plot shows the relationship:


```{julia}
plot(area, 0, 1)
```

While here, let's also answer the question of which $m$ gives an area of $1$, or one-half the total? This can be done as follows:


```{julia}
find_zero(m -> area(m) - 1, (0, 1))
```

(Which is a nice combination of using `find_zeros`, `quadgk` and `find_zero` to answer a problem.)


##### Example

In an early 2023 article appearing in the [New York Times](https://www.nytimes.com/2023/02/02/opinion/covid-pandemic-deaths.html) a discussion on *excess* deaths was presented. @fig-excess-deaths shows two curves from which the number of excess deaths can be computed.

::: {#fig-excess-deaths}
![Excess deaths](./figures/excess-deaths.png)

Illustration of excess deaths. Figure from a Feb. 2023 New York Times article
:::


Consider the curve marked *Actual deaths*. The number of deaths per year is the sum over each day of the number of deaths per each day. Approximating this number with a curve and setting 1 day equal to 1 unit, the number of deaths is basically $\int_0^{365} d(t) dt$. This curve is *usually*, say, $u(t)$, so the expected number of deaths would be $\int_0^{365} u(t) dt$. The difference, $\int_0^{365} (d(t) - u(t))dt$ is interpreted as the number of *excess deaths*. This methodology has been used to estimate the true number of deaths attributable to the COVID-19 pandemic.


##### Example


Find the area bounded by the $x$ axis, the line $x-1$ and the function $\log(x+1)$.


A plot shows us the basic area:


```{julia}
j1(x) = log(x+1)
j2(x) = x - 1
plot(j1, 0, 3)
plot!(j2)
plot!(zero)
```

The value for "$b$" is found from the intersection point of  $\log(x+1)$ and $x-1$, which is near $2$:


```{julia}
ja = 0
jb = find_zero(x -> j1(x) - j2(x), 2)
```

We see that the lower part of the area has a condition: if $x < 1$ then use $0$, otherwise use $g(x)$. We can handle this many different ways:


  * break the integral into two pieces and add:


```{julia}
quadgk(x -> j1(x) - zero(x), ja, 1)[1] + quadgk(x -> j1(x) - j2(x), 1, jb)[1]
```

  * make a new function for the bottom bound:


```{julia}
j3(x) = x < 1 ? 0.0 : j2(x)
quadgk(x -> j1(x) - j3(x), ja, jb)[1]
```

  * Turn the picture on its side and integrate in the $y$ variable. To do this, we need to solve for inverse functions:


```{julia}
#| hold: true
a1=j1(ja)
b1=j1(jb)
f1(y)=y+1                # y=x-1, so x=y+1
g1(y)=exp(y)-1           # y=log(x+1) so e^y = x + 1, x = e^y - 1
quadgk(y -> f1(y) - g1(y), a1, b1)[1]
```

:::{.callout-note}
## Note
When doing problems by hand this latter style can often reduce the complications, but when approaching the task numerically, the first two styles are generally easier, though computationally more expensive.

:::

##### Example

Consider two overlapping circles, one with smaller radius. How much area is in the larger circle that is not in the smaller? The question came up on the `Julia` [discourse](https://discourse.julialang.org/t/is-there-package-or-method-to-calculate-certain-area-in-julia-symbolically-with-sympy/99751) discussion board. A solution, modified from an answer of `@rocco_sprmnt21`, follows.

Without losing too-much generality, we can consider the smaller circle to have radius $a$, the larger circle to have radius $b$ and centered at $(0,c)$.
We assume some overlap -- $a \ge c-b$, but not too much -- $c-b \ge 0$ or $0 \le c-b \le a$.

```{julia}
@syms x::real y::real a::positive b::positive c::positive
c₁ = x^2 + y^2 - a^2
c₂ = x^2 + (y-c)^2 - b^2
y₀ = first(solve(c₁ ~ c₂ , y))
x₀ = sqrt(a - y₀^2) # point of intersection
```

Plotting with $a=1, b=3/2, c=2$ we have:

```{julia}
let 𝑎 = 1, 𝑏=3/2, 𝑐=2

    @assert 0 ≤ 𝑐 - 𝑏 ≤ 𝑎

    y = N(y₀(a => 𝑎, b => 𝑏, c => 𝑐))
    x = sqrt(𝑎^2 - y^2)

    p = plot(; legend=false, aspect_ratio=:equal)

    plot!(x -> 𝑐 + sqrt(𝑏^2 - x^2), -𝑏, 𝑏; color=:black)
    plot!(x -> 𝑐 - sqrt(𝑏^2 - x^2), -𝑏, -x; color=:black)
    plot!(x -> 𝑐 - sqrt(𝑏^2 - x^2),  x,  𝑏; color=:black)

    plot!(x ->  sqrt(𝑎^2 - x^2), -x,  x; color=:black)
    plot!(x ->  sqrt(𝑎^2 - x^2), -𝑎, -x; color=:blue)
    plot!(x ->  sqrt(𝑎^2 - x^2),  x,  𝑎; color=:blue)
    plot!(x -> -sqrt(𝑎^2 - x^2), -𝑎,  𝑎; color=:blue)

    scatter!([-x, x], [y, y])

    plot!([0, 𝑏], [𝑐, 𝑐]; linestyle=:dash)
    annotate!([(0, 𝑐, text("(0, c)", 8, :left)),
               (𝑏, 𝑐, text("(b, c)", 8, :left)),
               (x, y, text("(x₀, y₀)", 8, :left))])

    plot!([0, 0], [𝑎, 𝑐 + 𝑏]; color=:green)
    plot!([x, x], [y, 𝑐 + sqrt(𝑏^2 - x^2)]; color=:green)
    p
end
```

With this orientation, we can see by symmetry that the area is twice the integral from $[0,x_0]$ and from $[x_0, b]$ **provided** $0 \le c- b \le a$:

```{julia}
a1 = integrate(c + sqrt(b^2 - x^2) - (sqrt(a^2 - x^2)), (x, 0, x₀))
a2 = integrate(c + sqrt(b^2 - x^2) - (c - sqrt(b^2 - x^2)), (x, x₀, b))
A = 2(a1 + a2)
```

And for the $a=1, b=3/2, c=2$:

```{julia}
A(a => 1, b => 3//2, c => 2)
```

As a check, when the two circles just touch, or $a = c-b$, we should get the same as the area of a circle with radius $b$ or $b^2 \cdot \pi$:

```{julia}
A(c=>3, a=>1, b=>2)
```


#### Integrating in different directions


The last example suggested integrating in the $y$ variable. This could have more explanation.


It has been noted that different symmetries can aid in computing integrals through their interpretation as areas. For example, if $f(x)$ is odd, then $\int_{-b}^b f(x)dx=0$ and if $f(x)$ is even, $\int_{-b}^b f(x) dx = 2\int_0^b f(x) dx$.


Another symmetry of the $x-y$ plane is the reflection through the line $y=x$. This has the effect of taking the graph of $f(x)$ to the graph of $f^{-1}(x)$ and vice versa. Here is an example with $f(x) = x^3$ over $[-1,1]$.


```{julia}
#| hold: true
f(x) = x^3
xs = range(-1, stop=1, length=50)
ys = f.(xs)
plot(ys, xs)
```

By switching the order of the `xs` and `ys` we "flip" the graph through the line $x=y$.


We can use this symmetry to our advantage. Suppose instead of being given an equation $y=f(x)$, we are given it in "inverse" style: $x = f(y)$, for example suppose we have $x = y^3$. We can plot this as above via:


```{julia}
#| hold: true
ys = range(-1, stop=1, length=50)
xs = [y^3 for y in ys]
plot(xs, ys)
```

Suppose we wanted the area in the first quadrant between this graph, the $y$ axis and the line $y=1$. What to do? With the problem "flipped" through the $y=x$ line, this would just be $\int_0^1 x^3dx$. Rather than mentally flipping the picture to integrate, instead we can just integrate in the $y$ variable. That is, the area is  $\int_0^1 y^3 dy$. The mental picture for Riemann sums would be have the approximating rectangles laying flat and as a function of $y$, are given a length of $y^3$ and height of "$dy$".


---


```{julia}
#| hold: true
#| echo: false
f(x) = x^(1/3)
f⁻¹(x) = x^3
plot(f, 0, 1, label="f", linewidth=5, color=:blue, aspect_ratio=:equal)
plot!([0,1,1],[0,0,1], linewidth=1, linestyle=:dash, label="")
x₀ = 2/3
Δ = 1/16
col = RGBA(0,0,1,0.25)
function box(x,y,Δₓ, Δ, color=col)
	plot!([x,x+Δₓ, x+Δₓ, x, x], [y,y,y+Δ,y+Δ,y], color=:black, label="")
	plot!(x:Δₓ:(x+Δₓ), u->y, fillto = u->y+Δ, color=col, label="")
end
box(x₀, 0, Δ, f(x₀), col)
box(x₀+Δ, 0, Δ, f(x₀+Δ), col)
box(x₀+2Δ, 0, Δ, f(x₀+2Δ), col)
colᵣ = RGBA(1,0,0,0.25)
box(f⁻¹(x₀-0Δ), x₀-1Δ, 1 - f⁻¹(x₀-0Δ), Δ, colᵣ)
box(f⁻¹(x₀-1Δ), x₀-2Δ, 1 - f⁻¹(x₀-1Δ), Δ, colᵣ)
box(f⁻¹(x₀-2Δ), x₀-3Δ, 1 - f⁻¹(x₀-2Δ), Δ, colᵣ)
```

The figure above suggests that the area under $f(x)$ over $[a,b]$ could be represented as the area between the curves $f^{-1}(y)$ and $x=b$ from $[f(a), f(b)]$.


---


For a less trivial problem, consider the area between $x = y^2$ and $x = 2-y$ in the first quadrant.


```{julia}
#| hold: true
ys = range(0, stop=2, length=50)
xs = [y^2 for y in ys]
plot(xs, ys)
xs = [2-y for y in ys]
plot!(xs, ys)
plot!(zero)
```

We see the bounded area could be described in the "$x$" variable in terms of two integrals, but in the $y$ variable in terms of the difference of two functions with the limits of integration running from $y=0$ to $y=1$. So, this area may be found as follows:


```{julia}
#| hold: true
f(y) = 2-y
g(y) = y^2
a, b = 0, 1
quadgk(y -> f(y) - g(y), a, b)[1]
```

## The area enclosed in a simple polygon

A simple polygon is comprised of several non-intersecting line segments, save for the last segment ends where the first begins. These have an orientation, which we take to be counterclockwise. Polygons, as was seen when computing areas related to Archimedes efforts, can be partitioned into simple geometric shapes, for which known areas apply.

### The trapezoid formula

In this example, we see how trapezoids can be used to find the interior area encolosed by a simply polygon, avoiding integration.

The trapezoid formula to compute the area of a simple polygon is

$$
A = - \sum_{i=1}^n \frac{y_{i+1} + y_i}{2} \cdot (x_{i+1} - x_i).
$$

Where the polygon is described by points $(x_1,y_1), (x_2,y_2), \cdots, (x_n, y_n), (x_{n+1}, y_{n+1})$ *with* $(x_1,y_1) = (x_{n+1}, y_{n+1})$.

Each term describes the area of a trapezoid, possibly signed.

This figure illustrates for a simple case:

```{julia}
using Plots
xs = [1, 3, 4, 2, 1]  # n = 4 to give 5=n+1 values
ys = [1, 1, 2, 3, 1]
p = plot(xs, ys; line=(3, :black), ylims=(0,4), legend=false)
scatter!(p, xs,  ys; marker=(7, :circle))
```

Going further, we draw the four trapezoids using different colors depending on the sign of the `xs[i+1] - xs[i]` terms:

```{julia}
for i in 1:4
    col = xs[i+1] - xs[i] > 0 ? :yellow : :blue
    S = Shape([(xs[i],0), (xs[i+1],0), (xs[i+1],ys[i+1]), (xs[i], ys[i])])
    plot!(p, S, fill=(col, 0.25))
end
p
```

The yellow trapezoids appear to be colored grey, as they completely overlap with parts of the blue trapezoids and blue and yellow make grey with lights. As the signs of the differences of the $x$ values is different, these areas add to $0$ in the sum, leaving just the area of the interior when the sum is computed.

For this particular figure, the enclosed area is

```{julia}
- sum((ys[i+1] + ys[i]) / 2 * (xs[i+1] - xs[i]) for i in 1:length(xs)-1)
```

### The triangle formula

Similarly, we can create triangles to partition the polygon. The *signed* area of a triangle with vertices $(0,0), (x_i, y_i), (x_{i+1}, y_{i+1})$ can be computed by $\frac{1}{2} \cdot (x_i \cdot y_{i+1} - x_{i+1}\cdot  y_i)$. (A formula that can be derived from a related one for the area of a parallelogram.

Visualizing, as before, we have the shape and the triangles after centering around the origin:

```{julia}
S = Shape(xs, ys)
c = Plots.center(S) # find centroid of the polygon
xs, ys = xs .- c[1], ys .- c[2]

p = plot(xs, ys; line=(3, :black),  legend=false)
scatter!(p, xs,  ys; marker=(7, :circle))
for i in 1:4
    col = xs[i]*ys[i+1] - xs[i+1]*ys[i] > 0 ? :yellow : :blue
    S = Shape([(0,0), (xs[i],ys[i]), (xs[i+1],ys[i+1])])
    plot!(p, S, fill=(col, 0.25))
end
p
```

Here the triangles are all yellow, as each has a positive area to contribute to the following sum:

```{julia}
(1/2) * sum(xs[i]*ys[i+1] - xs[i+1]*ys[i] for i in 1:4)
```


## Questions


###### Question


Find the area enclosed by the curves $y=2-x^2$ and $y=x^2 - 3$.


```{julia}
#| hold: true
#| echo: false
f(x) = 2 - x^2
g(x) = x^2 - 3
a,b = find_zeros(x -> f(x) - g(x), -10, 10)
val, _ = quadgk(x -> f(x) - g(x), a, b)
numericq(val)
```

###### Question


Find the area between $f(x) = \cos(x)$, $g(x) = x$ and the $y$ axis.


```{julia}
#| hold: true
#| echo: false
f(x) = cos(x)
g(x) = x
a = 0
b = find_zero(x -> f(x) - g(x), 1)
val, _ = quadgk(x -> f(x) - g(x), a, b)
numericq(val)
```

###### Question


Find the area between the line $y=1/2(x+1)$ and half circle $y=\sqrt{1 - x^2}$.


```{julia}
#| hold: true
#| echo: false
f(x) = sqrt(1 - x^2)
g(x) = 1/2 * (x + 1)
a,b = find_zeros(x -> f(x) - g(x), -1, 1)
val, _ = quadgk(x -> f(x) - g(x), a, b)
numericq(val)
```

###### Question


Find the area in the first quadrant between the lines $y=x$, $y=1$, and the curve $y=x^2 / 4$.


```{julia}
#| hold: true
#| echo: false
f(x) = x
g(x) = 1.0
h(x) = min(f(x), g(x))
j(x) = x^2 / 4
a,b = find_zeros(x -> h(x) - j(x), 0, 3)
val, _ = quadgk(x -> h(x) - j(x), a, b)
numericq(val)
```

###### Question


Find the area between $y=x^2$ and $y=-x^4$ for $\lvert x \rvert \leq 1$.


```{julia}
#| hold: true
#| echo: false
f(x) = x^2
g(x) = -x^4
a,b = -1, 1
val, _ = quadgk(x -> f(x) - g(x), a, b)
numericq(val)
```

###### Question


Let `f(x) = 1/(sqrt(pi)*gamma(1/2)) * (1 + x^2)^(-1)` and `g(x) = 1/sqrt(2*pi) * exp(-x^2/2)`. These graphs intersect in two points. Find the area bounded by them.


```{julia}
#| hold: true
#| echo: false
import SpecialFunctions: gamma
f(x) = 1/(sqrt(pi)*gamma(1/2)) * (1 + x^2)^(-1)
g(x) = 1/sqrt(2*pi) * exp(-x^2/2)
a,b =  find_zeros(x -> g(x) - f(x), -3, 3)
val, _ = quadgk(x -> g(x) - f(x), a, b)
numericq(val)
```

(Where `gamma(1/2)` is a call to the [gamma](http://en.wikipedia.org/wiki/Gamma_function) function.)


###### Question


Find the area in the first quadrant bounded by the graph of $x = (y-1)^2$, $x=3-y$ and $x=2\sqrt{y}$. (Hint: integrate in the $y$ variable.)


```{julia}
#| hold: true
#| echo: false
f(y) = (y-1)^2
g(y) = 3 - y
h(y) = 2sqrt(y)
f1(y) = max(f(y), zero(y))
g1(y) = min(g(y), h(y))
a, b = find_zeros(y -> g1(y) - f1(y), [0,2])
val, _ = quadgk(y -> g1(y) - f1(y), a, b)
numericq(val)
```

###### Question


Find the total area bounded by the lines $x=0$, $x=2$ and the curves $y=x^2$ and $y=x$. This would be $\int_a^b \lvert f(x) - g(x) \rvert dx$.


```{julia}
#| hold: true
#| echo: false
f(x) = x^2
g(x) = x
a, b = 0, 2
val, _ = quadgk(x -> abs(f(x) - g(x)), a, b)
numericq(val)
```

###### Question


Look at the sculpture [Le Tamanoir](https://www.google.com/search?q=Le+Tamanoir+by+Calder.&num=50&tbm=isch&tbo=u&source=univ&sa=X&ved=0ahUKEwiy8eO2tqzVAhVMPz4KHXmgBpgQsAQILQ&biw=1556&bih=878) by Calder. A large scale work. How much does it weigh? Approximately?


Let's try to answer that with an educated guess. The right most figure looks to be about 1/5th the total amount. So if we estimate that piece and multiply by 5 we get a good guess. That part looks like an area of metal bounded by two quadratic polynomials. If we compute that area in square inches, then multiply by an assumed thickness of one inch, we have the cubic volume. The density of galvanized steel is 7850 kg/$m^3$ which we convert into pounds/in$^3$ via:


```{julia}
7850 * 2.2 * (1/39.3)^3
```

The two parabolas, after rotating, might look like the following (with $x$ in inches):


$$
f(x) = x^2/70, \quad g(x) = 35 + x^2/140
$$

Put this altogether to give an estimated weight in pounds.


```{julia}
#| hold: true
#| echo: false
f(x) = x^2/70
g(x) = 35 + x^2/140
a,b = find_zeros(x -> f(x) - g(x), -100, 100)
ar, _ = quadgk(x -> abs(f(x) - g(x)), a, b)
val = 5 * ar * 7850 * 2.2 * (1/39.3)^3
numericq(val)
```

Is the guess that the entire sculpture is more than two tons?


```{julia}
#| hold: true
#| echo: false
choices=["Less than two tons", "More than two tons"]
answ = 2
radioq(choices, answ, keep_order=true)
```

:::{.callout-note}
## Note
We used area to estimate weight in this example, but Galileo used weight to estimate area. It is [mentioned](https://www.maa.org/sites/default/files/pdf/cmj_ftp/CMJ/January%202010/3%20Articles/3%20Martin/08-170.pdf) by Martin that in order to estimate the area enclosed by one arch of a cycloid, Galileo cut the arch from some material and compared the weight to the weight of the generating circle. He concluded the area is close to $3$ times that of the circle, a conjecture proved by Roberval in 1634.

:::

###### Question


Formulas from the business world say that revenue is the integral of *marginal revenue* or the additional money from  selling 1 more unit. (This is basically the derivative of profit). Cost is the integral of *marginal cost*, or the cost to produce 1 more. Suppose we have


$$
\text{mr}(x) = 2 + \frac{e^{-x/10}}{1 + e^{-x/10}}, \quad
\text{mc}(x) = 1 + \frac{1}{2} \cdot \frac{e^{-x/5}}{1 + e^{-x/5}}.
$$

Find the profit to produce 100 units: $P = \int_0^{100} (\text{mr}(x) - \text{mc}(x)) dx$.


```{julia}
#| hold: true
#| echo: false
mr(x) = 2 + exp((-x/10)) / (1 + exp(-x/10))
mc(x) = 1 + (1/2) * exp(-x/5) / (1 + exp(-x/5))
a, b = 0, 100
val, _ = quadgk(x -> mr(x) - mc(x), 0, 100)
numericq(val)
```

###### Question


Can `SymPy` do what Archimedes did?


Consider the following code which sets up the area of an inscribed triangle, `A1`, and the area of a parabolic segment, `A2` for a general parabola:


```{julia}
#| hold: true
@syms x::real A::real B::real C::real a::real b::real
c = (a + b) / 2
f(x) = A*x^2 + B*x + C
Secant(f, a, b) = f(a) + (f(b)-f(a))/(b-a) * (x - a)
A1 = integrate(Secant(f, a, c) - Secant(f,a,b), (x,a,c)) + integrate(Secant(f,c,b)-Secant(f,a,b), (x, c, b))
A2 = integrate(f(x) - Secant(f,a,b), (x, a, b))
out = 4//3 * A1 - A2
```

Does `SymPy` get the correct output, $0$, after calling `simplify`?


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

###### Question


In [Martin](https://www.maa.org/sites/default/files/pdf/cmj_ftp/CMJ/January%202010/3%20Articles/3%20Martin/08-170.pdf) a fascinating history of the cycloid can be read.


```{julia}
#| hold: true
#| echo: false
imgfile="figures/cycloid-companion-curve.png"
caption = """
Figure from Martin  showing the companion curve to the cycloid. As the generating circle rolls, from ``A`` to ``C``, the original point of contact, ``D``, traces out an arch of the cycloid. The companion curve is that found by congruent line segments. In the figure, when ``D`` was at point ``P`` the line segment ``PQ`` is congruent to ``EF`` (on the original position of the generating circle).
"""
# ImageFile(:integrals, imgfile, caption)
nothing
```

![Figure from Martin  showing the companion curve to the cycloid. As the generating circle rolls, from ``A`` to ``C``, the original point of contact, ``D``, traces out an arch of the cycloid. The companion curve is that found by congruent line segments. In the figure, when ``D`` was at point ``P`` the line segment ``PQ`` is congruent to ``EF`` (on the original position of the generating circle).](./figures/cycloid-companion-curve.png)


In particular, it can be read that Roberval proved that the area between the cycloid and its companion curve is half the area of the generating circle. Roberval didn't know integration, so finding the area between two curves required other tricks. One is called "Cavalieri's principle." From the figure above, which of the following would you guess this principle to be:


```{julia}
#| hold: true
#| echo: false
choices = ["""
If two regions bounded by parallel lines are such that any parallel between them cuts each region in segments of equal length, then the regions have equal area.
""",
           """
The area of the cycloid is nearly the area of a semi-ellipse with known values, so one can approximate the area of the cycloid with formula for the area of an ellipse
"""]
radioq(choices, 1)
```

Suppose the generating circle has radius $1$, so the area shown is $\pi/2$. The companion curve is then  $1-\cos(\theta)$ (a fact not used by Roberval). The area *under* this curve is then


```{julia}
#| hold: true
@syms theta
integrate(1 - cos(theta), (theta, 0, SymPy.PI))
```

That means the area under **one-half** arch of the cycloid is


```{julia}
#| hold: true
#| echo: false
choices = ["``\\pi``",
           "``(3/2)\\cdot \\pi``",
           "``2\\pi``"
           ]
radioq(choices, 2, keep_order=true)
```

Doubling the answer above gives a value that Galileo had struggled with for many years.


```{julia}
#| hold: true
#| echo: false
imgfile="figures/companion-curve-bisects-rectangle.png"
caption = """
Roberval, avoiding a trigonometric integral, instead used symmetry to show that the area under the companion curve was half the area of the rectangle, which in this figure is `2pi`.
"""
# ImageFile(:integrals, imgfile, caption)
nothing
```

![Roberval, avoiding a trignoometric integral, instead used symmetry to show that the area under the companion curve was half the area of the rectangle, which in this figure is $2\pi$.
](./figures/companion-curve-bisects-rectangle.png)


###### Question

```{julia}
#| echo: false
#| label: fig-cavalieri-example
#| fig-cap: "Cavalieri example"
let
squareplus(x, b=2) = x/2 + sqrt(x^2 + b)/2
TeLU(x) = x * tanh(exp(x))
Δ(x) = squareplus(x) - TeLU(x)

a,b = -3, 3
xs = range(a, b, 10)

c = 3
Shift(f,c) = x -> c + f(x)
p = plot(Shift(squareplus, c), a, b;
         legend=false,
         line=(3, :royalblue),
         axis=([], false))
plot!(Shift(TeLU, c),
      line=(3, :royalblue)
      )


plot!(Δ, line=(3, :forestgreen))
plot!(zero, line=(3, :forestgreen))

n = 20
xs = range(a, b, n+1)
for i in 1:n
    S = Shape([xs[i],xs[i]],
              [0, Δ(xs[i])])
    plot!(Plots.translate(S, 0, TeLU(xs[i]) + c), fill=(:royalblue, 0.25))
    plot!(S, fill=(:forestgreen, 0.25))
end
    p
end
```

@fig-cavalieri-example shows on same scale the graphs of $f(x)$ and $g(x)$ and the graphs of $f(x) - g(x)$ and $0$ (the lower figure). Twenty lines were drawn with height $f(x) - g(x)$ on the lower figure and these were translated to the upper figure by an amount $g(x)$. All to illustrate that any parallel line in the $y$ direction intersects the two figures with the same length.

What does this imply:

```{julia}
#| hold: true
#| echo: false
choices = ["The two enclosed areas should be equal",
           "The two enclosed areas are clearly different, as they do not overap"]
radioq(choices, 1)
```

