- Office: S5.29

- Office hours: Thu 10:00-12:00

- Lecture times and place (begins on
**24 Sep.**): Mon 16:00-18:00**KINGS BLDG K6.63**

- Tutorials (begins on
**5 Oct.**): Fri 11:00-12:00 STRAND S5.20

- References: These are some of the books that I will be drawing from for the lectures

- Simon Donaldson, Riemann Surfaces

- Ernesto Girondo, Gabino González-Diez, Introduction to Compact Riemann Surfaces and Dessins d'Enfants

- Frances Kirwan, Complex algebraic curves

- Simon Donaldson, Riemann Surfaces

This is strictly experimental and

You can either install it on your computer or if you just want to check out how it works, you can use the sagecell given in the bottom of this page.

Feel free to submit code that would go here by e-mail. I'll post it here with an acknowledgment.

- Draw algebraic curves over real numbers (RR). Here is an elliptic curve:

`R.<x,y>=AffineSpace(RR, 2)`

C = Curve([y^2 - x^3 +x], R)

C.plot()

Try different curves. Here are some interesting ones:`y^2-x^4-x^2`

(eight curve),`y^4+x^4-1`

(square),`y^2-x^3-7`

(the Bitcoin curve), (x^2+y^2-1)^3+27*x^2*y^2 (astroid).

Or you can draw a random one (of degree 4 over rationals QQ) as follows:

`P.<x,y> = PolynomialRing(QQ)`

p = P.random_element(degree=4, terms=15)

print p

R.<x,y> = AffineSpace(QQ, 2)

C = Curve(p, R)

C.plot()

You maybe lucky and get a curve like this one that I got

`x^4 - x^2*y^2 + y^4 - x^3 - 5*x^2 + 17/539*y^2 + x - 7/3`

For some unexplainable reason I get happy when I get a compact curve.

- Check if a polynomial of two variables (over complex numbers CC) is reduced (square-free).

`P.<x,y>=PolynomialRing(CC)`

f = x^4+x*y^3+x^3*y+y^4

gcd([f,f.derivative(x),f.derivative(y)])

If`gcd`

is not a constant, then the polynomial is not reduced. To find the reduced polynomial replace the last line with

`f//gcd([f,f.derivative(x),f.derivative(y)])`

(Working over`CC`

, Sage does not always simplify the constants appearing in the computation. This is not important as we only care about polynomials up to constant factors.)

- Check if an algebraic curve defined by a polynomial is singular (over complex numbers).

`R.<x,y>=AffineSpace(CC, 2)`

C = Curve([(x^2+y^2-1)^3+27*x^2*y^2], R)

C.is_singular()

and find the singular points

`C.singular_points()`

- Here is how you draw the Newton polytope of a polynomial

`R.<x,y>=AffineSpace(CC, 2)`

p = CC(3+4*I)*x^2 + CC(1+I)*x*y + y + x - x^2*y + 3*y^3

P= p.newton_polytope() ; P

and here is how you can see the Minkowski sum of two polyhedra

`X = Polyhedron(vertices=[(0,1),(1,0),(0,0),(1,1)])`

Y = Polyhedron(vertices=[(0,0), (0,1), (2,3)])

X+Y

- The following code determines whether a bivariate square-free polynomial p is irreducible over the complex numbers. The number of irreducible components of p is given by the output of [2].

This code uses quite sophisticated techniques that go beyond the scope of this course but it could be useful as a blackbox which is why it is included here.

`singular.lib('deRham.lib')`

R = singular.ring('0','(x,y)','dp')

p = singular('x^6+x^2*y^4+y^2*x^4+y^6')

L = singular.list([p])

singular.deRhamCohomology(L);

- Compute the projectivization of an affine curve

`R.<x,y>=AffineSpace(CC, 2)`

C = Curve(y - x^3 + x - 1, R)

C.projective_closure()

- Compute the affine patch of a projective curve

`P.<x,y,z> = ProjectiveSpace(CC, 2)`

C = Curve(x^3 - x^2*y + y^3 - x^2*z, P)

C.affine_patch(0)

Use`C.affine_patch(1)`

or`C.affine_patch(2)`

for other patches.