University Projects

In the summer of 2025 I completed a research project in Mathematics as the last third of my Master's degree. This consisted of a thesis and a presentation. For this, I studied Kernel Density Estimation. This is a method in non-parametric statistics to recover a probability density function from a sample, without placing restrictive assumptions on the density. In particular, I studied the convergence rates of these estimators, under some regularity assumptions on the density. The thesis is split into two parts. The first explores the problem in the classic setting, on the real line, and follows this book by Tsybakov. The second half considers the problem on more general metric spaces and catches up to some modern research done by my supervisor Dr. Galatia Cleanthous and her collaborators. This project earned a grade of 91%.

In 2024 (the third year of my undergraduate), my classmate Cillian Grall and I completed a project on the thermal creation of solitons. These are long-surviving, localised, non-linear wave-packets that appear in a scalar field subject to a multi-welled potential, where part of the field spills into another well. Our setting is some scalar field \(\phi(\vec{x},t)\) subject to the wave equation and a potential well \(V(\phi)\),$$ \frac{\partial^2\phi}{\partial t^2} = \nabla^2\phi - \frac{d V}{d\phi}.$$ We focused on the simplest case, a one-dimensional scalar field \(\phi\) with a double-welled quartic potential \(V(\phi)=\lambda(\phi^2-1)^2\), where \(\lambda\) is a coupling parameter. The system was discretised and subjected to periodic boundary conditions. This discretised system then acts as a pearl necklace, with each pearl moving with its own speed, being pulled down the walls of the potential, and tugging on its neighbours. Adding enough energy in the system allows some section of the necklace to cross the divide into the other well. This forms a large wave in the field whcih survives until the pearls happen to spill back over — a soliton! For a range of temperatures, the system was initialised using a Markov Chain Monte Carlo approach, called the Heat Bath Algorithm. (This was quite difficult, and I am still hugely proud of it.) The system was then evolved simply using the finite difference method, and the creation rate of solitons was calculated, and graphed against temperature. The code can be found here, and the report here. This project earned a grade of 87%.

In 2023 (the second year of my undergraduate), my classmates Cillian Grall, Ciaran McNamara and I completed a project on the inflation of the early universe. There are properties of our universe which seem unlikely, such as its apparent flatness, but become credible if the universe underwent a huge spatial growth in a short period of time. This idea is called Cosmic Inflation. It is estimated that at least 60 e-folds of inflation must have occurred. That is to say, points in space 1 unit apart would be separated by \(e^{60}\approx 10^{26}\) units after some finite time. Quite a lot! If we pick a pair of points in space, and track the distance between them over time, calling this function the cosmic scale factor \(a(t)\), we can interpret this as a measure of the universe's size over time. In this project, we assumed a flat universe dominated by a scalar field \(\phi(t)\), obeying the Friedman and Klein-Gordon equations, $$H := \frac{\dot{a}}{a} = C\sqrt{\frac{1}{2}\dot{\phi}^2 + V(\phi)}, \qquad \ddot{\phi}+3H\dot{\phi}+\frac{dV}{d\phi}=0,$$where \(C=M_p^{-1}\sqrt{8\pi/3}\) and \(M_p\) is the Planck length. We focus on the simplest potential, the quadratic well \(V(\phi)=\frac{1}{2}m^2\phi^2\). The Friedman equation causes \(a\) to increase rapidly when \(\phi\) or \(\dot{\phi}\) are large. The Klein-Gordon equation causes \(\phi\) to act roughly like a damped oscillator, and decay towards the minimum of \(V\). Together, these causes \(\phi\) to slowly settle towards the minimum and \(a\) to grow until that time. This leads to a finite period of time where intense growth is observed — cosmic inflation! Choosing some inital conditions of \(\phi\) and \(\dot{\phi}\), the system can be evolved over time (using an ODE solver) to see how much inflation occurs. In this project, we explored which initial conditions of led to a sufficient amount of inflation, finding this is easier than expected under our simple model. We also attempted to study the impact of the mass parameter \(m\), and even some different potentials \(V\). The Python code can be found here, and the report here. Looking back on it now, this project was quite crap could have been done better. But it was our first, so don't judge it too harshly!

Personal Projects

My ongoing project, starting August 2025, is making my own website. It will be a place for me to talk about things I like, mainly some Projects of mine such as my website.

Hilarious self-references aside, this has been a really fun project. Here is the repository, if you interested in how it works. It started as a theft of my friend's website, because his is pretty cool (and I liked the colour cheme). It is hosted for free using GitHub Pages. The only cost would be getting your own personalised domain name. I got mine from here, for about 20 euro a year, but there are many such sites. As I build more of it, I might have more to say...

The following are 'ready' soon, I am in the process of writing them up. These are just some recreational math problems, that I try to solve using some questionable python code.

Here is a game a friend taught me on the drive to university, that spawned some questions I answered by using python.

The Game

A digit string is an ordered list of numbers (integers from 0 to 9 in our case), such as 15397. This is not to be interpreted as fifteen thousand three hundred and ninety seven, but as one followed by five, three, nine, and seven.

\(1\times (5-3)+9\div 7\) is an expression of the digit string 15397. Between the digits we place some operation from addition, subtraction, multiplication and division. We are allowed to use an operation as many times as we like (including not at all), to use as many parentheses as we like, but we cannot reorder the digits and every two digits must have an operation between them.

A solution of the digit string is some expression that evaluates to zero. Note that \(9-9\), \(1+2-3\), \(8-2\times 4\) and \(2-6\div (1+2)\) are solutions of 99, 123, 824 and 2612 respectively. Clearly any digit string which contains a zero can be solved using only multiplications. Eg. \(5\times0\times3\) is a solution of 503. \(1\times (5-3)+9\div 7\) is clearly not a solution to 15397, but can you find one? \((1+5+3-9)\times7\)

Given some source of digit strings, the game is to be the first to find a solution. For example, Irish vehicle registration plates (numberplates) take the form 162-D-15397. On the drive to university, we would play the game on the other cars around us. I won slightly more often (he was driving).

The Question

Firstly, how many digit strings can be solved? This answer is quite clearly infinity. Since 11 is solvable, so is anything that contains 11, such as 4627115, of which there are infinitely many. The second question is less obvious.

Some strings cannot be solved. For example, 1, 12, 124, 8985. How many cannot be solved? As strings get longer, it becomes easier to solve them, so we expect the unsolvable strings to get increasingly rare. But, are there only finitely many of them? If so, what is the largest of them?

The Project — will be put here

I try to solve the above problem with some python code, just using a brute force approach. After that, I come up with a slightly larger problem. Solving this requires more efficient approaches, such as using a Breadth-First Search over a Trie stuctrure. All coming soon!

An interesting probability question I worked on!

An interesting probability question I worked on!

For other pieces of maths I find interesting, see the Maths section. And, If you have any problems you think I would enjoy, please do share :)