CoCalc Shared FilesSpring 2019 Differential Geometry / Enneper-curvatures.ipynb
Author: Theron Hitchman
Views : 30
Description: Computation of the curvatures of Enneper's Minimal Surface

# Enneper's Minimal Surface and its Curvatures

Let's consider a torus, parametrized as a surface of revolution and compute its different curvatures.

In [1]:
u,v = var('u v')
x(u,v) = ( u-u^3/3+u*v^2, v - v^3/3 +v*u^2, u^2 - v^2 )


## First Step, all the partial derivatives we'll need.

For all of our computations, we'll want the $u$ and $v$ partial derivatives of $x(u,v)$ of order 1 and 2. So we compute them and store them in some variables.

In [2]:
xu = x.diff(u)
xv = x.diff(v)
xuu = x.diff(u,2)
xuv = xu.diff(v)
xvv = x.diff(v,2)

show(xuv) # just as a check

$\left( u, v \right) \ {\mapsto} \ \left(2 \, v,\,2 \, u,\,0\right)$

## First Fundamental Form

In [3]:
E = xu.dot_product(xu).simplify_full()
F = xu.dot_product(xv).simplify_full()
G = xv.dot_product(xv).simplify_full()

I = matrix(SR, 2,2, [E,F, F, G])
show(I) # as a check

$\left(\begin{array}{rr} u^{4} + v^{4} + 2 \, {\left(u^{2} + 1\right)} v^{2} + 2 \, u^{2} + 1 & 0 \\ 0 & u^{4} + v^{4} + 2 \, {\left(u^{2} + 1\right)} v^{2} + 2 \, u^{2} + 1 \end{array}\right)$

## The Normal Vector

In [4]:
q = xu.cross_product(xv)
show(size)  # this should equal sqrt(EG-F^2), let's check

$u^{4} + v^{4} + 2 \, {\left(u^{2} + 1\right)} v^{2} + 2 \, u^{2} + 1$
In [5]:
show(sqrt(E*G-F^2).canonicalize_radical()) # here is sqrt(EG-F^2)

$u^{4} + v^{4} + 2 \, {\left(u^{2} + 1\right)} v^{2} + 2 \, u^{2} + 1$
In [6]:
n = (q(u,v)/size).simplify_full()
show(n) # the unit normal vector

$\left(-\frac{2 \, u}{u^{2} + v^{2} + 1},\,\frac{2 \, v}{u^{2} + v^{2} + 1},\,-\frac{u^{2} + v^{2} - 1}{u^{2} + v^{2} + 1}\right)$
In [7]:
norm(n).simplify_full() # another check, just because things get brittle and I get worried.

1

## The Second Fundamental Form

Now we have enough data to compute the second fundamental form. We don't have script letters here, so I'm gonna cheat.

In [8]:
ell = n.dot_product(xuu)
em = n.dot_product(xuv)
en = n.dot_product(xvv)

II = matrix(SR, 2,2, [ell, em, em, en]).simplify_full()
show(II)

$\left(\begin{array}{rr} 2 & 0 \\ 0 & -2 \end{array}\right)$

## The Shape Operator

In [16]:
Product = I.inverse()*II
show(S)

$\left(\begin{array}{rr} \frac{2}{u^{4} + v^{4} + 2 \, {\left(u^{2} + 1\right)} v^{2} + 2 \, u^{2} + 1} & 0 \\ 0 & -\frac{2}{u^{4} + v^{4} + 2 \, {\left(u^{2} + 1\right)} v^{2} + 2 \, u^{2} + 1} \end{array}\right)$
In [18]:
# An aside... computers are bad at algebra, generally speaking. That crazy denominator is just
((u^2+v^2+1)^2).expand()

u^4 + 2*u^2*v^2 + v^4 + 2*u^2 + 2*v^2 + 1

## Finally, curvatures

The Gaussian curvature is the determinant of the shape operator:

In [10]:
K = det(S)
show(K)

$-\frac{4}{{\left(u^{4} + v^{4} + 2 \, {\left(u^{2} + 1\right)} v^{2} + 2 \, u^{2} + 1\right)}^{2}}$

The mean curvature is half the trace of the shape operator:

In [11]:
H = (1/2)*S.trace()
show(H)

$0$

...and the principal curvatures are the eigenvaules of the shape operator. In this case, the matrix is diagonal, so these are easy to read off. But generally, one could use this command:

In [12]:
S.eigenvalues()

[-2/(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 1), 2/(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 1)]

and if for some reason that command won't work for you, you can always do it by hand:

In [13]:
p = S.characteristic_polynomial()
show(p)

$x^{2} - \frac{4}{{\left(u^{4} + 2 \, u^{2} v^{2} + v^{4} + 2 \, u^{2} + 2 \, v^{2} + 1\right)}^{2}}$
In [14]:
p.roots()

[(-2*sqrt((u^4 + 2*u^2*v^2 + v^4 + 2*u^2 + 2*v^2 + 1)^(-2)), 1), (2*sqrt((u^4 + 2*u^2*v^2 + v^4 + 2*u^2 + 2*v^2 + 1)^(-2)), 1)]
In [15]:
[elt[0].simplify_full().canonicalize_radical() for elt in p.roots()]

[-2/(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 1), 2/(u^4 + v^4 + 2*(u^2 + 1)*v^2 + 2*u^2 + 1)]
In [34]:
cm = colormaps.autumn
def my_color(u,v): return float((4 + K.subs(u=u,v=v))/4)
Surface = parametric_plot3d(x(u,v), (u,-2,2),(v,-2,2) , color=(my_color,cm))

In [35]:
show(Surface, aspect_ratio=[1,1,1])

In [ ]: