Suggestion: Double pendulum
All of the above colleagues had great suggestions. In this theme, my proposal would be the double pendulum problem. This system is a classic, simple and complex at the same time, its equations of motion can be obtained by applying the theories of Lagrange, Hamilton or Newton of mechanics, the latter and the least used in the development of the equations of motion of the double pendulum. With a little depth, we can enter chaos theory, and use this system to study this physical phenomenon, because the system has a high sensitive dependence on the initial conditions, and it is very common for programmers to make simulations of two or more pendulums with slight differences in the initial conditions, precisely to observe the different trajectories of the pendulums in the simulations. In the figure below we have the equations of the double pendulum developed with the help of Hamilton's theory of mechanics.
And as one of the results, the following graph of the trajectory curves of the respective masses $m_{1}$ and $m_{2}$ in the plan x and y can be generated.

numeric methods
The equations of motion are composed of a set of ordinary differential equations, with initial conditions imposed on the system, basically it is a problem like $\frac{d\vec y}{dt} = \vec f(t,y)$ with $t_{0} = \alpha$ and $\vec y(t_{0}) = \vec y_{0}$.

There are many numerical methods used to solve this type of problem numerically, but the numerical methods of the Runge-Kutta family are widely used in this particular problem, mainly the fourth order Runge-Kutta (RK4). For reasons of curiosity, I have already made implementations in third, fifth, sixth order for comparison between the different methods and plotting the errors committed for comparison between them. In this article, the author demonstrates an explicit sixth order Runge-Kutta formula, which you could be implementing and comparing with the classical fourth order.
If you use the python language, in this case it is better to use the integrators already developed and implemented in scipy.integrate, such as scipy.integrate.odeint or scipy.integrate.solve_ivp, among other options.
A Python code example of the double pendulum problem
import numpy as np
from scipy.integrate import odeint, RK23, RK45, solve_ivp
import matplotlib.pyplot as plt
m1 = 1.00
m2 = 1.00
l1 = 1.00
l2 = 1.00
g = 9.81
t0 = 0.0
o1_0 = np.radians(60)
o2_0 = np.radians(60)
po1_0 = 0.0
po2_0 = 0.0
t_maximo = 60
dt = 1.0e-3
N = 100000
Hamiltoniana
'''
def H(o1,o2,po1,po2):
return ((m2l22po12+(m1+m2)*l12po22-2m2l1l2po1po2np.cos(o1-o2))/(2m2l11l22(m1+m2(np.sin(o1-o2))2))) - (m1+m2)gl1np.cos(o1)-m2gl2np.cos(o2)
'''
H = lambda o1,o2,po1,po2:
((m2l22po12+(m1+m2)*l12po22-2m2l1l2po1po2np.cos(o1-o2))/(2m2l11l22(m1+m2(np.sin(o1-o2))2))) - (m1+m2)gl1np.cos(o1)-m2gl2np.cos(o2)
def pd(s,t):
o1,o2,po1,po2 = s
h1 = ((po1po2np.sin(o1-o2))/(l1l2(m1+m2(np.sin(o1-o2))2)))
h2 = ((m2l22*po22+(m1+m2)l12po22-2m1l1l2po1po2np.cos(o1-o2))/(2*l12l22(m1+m2(np.sin(o1-o2))2)2))
edo1 = (l2po1-l1po2np.cos(o1-o2))/(l12l2(m1+m2*(np.sin(o1-o2))2))
edo2 = ((-m2l2po1np.cos(o1-o2)+(m1+m2)l1po2)/(m2l1l22(m1+m2(np.sin(o1-o2))2)))
edo3 = -(m1+m2)gl1np.sin(o1)-h1+h2np.sin(2o1-2o2)
edo4 = -m2gl2np.sin(o2)+h1-h2np.sin(2o1-2*o2)
return np.array([edo1,edo2,edo3,edo4])
t = np.arange(t0, t_maximo, dt) # Range para o tempo, de t0 á t_maximo com o passo dt
s0 = np.array([o1_0, o2_0, po1_0, po2_0], dtype=np.float64) # Vetor de condições iniciais para os ângulos e momentos canônicos conjugados aos ângulos
Método scipy.integrate.odeint(f, s0, t0)
s = odeint(pd,s0,t)
o1, o2 = s[:,0], s[:,1] # Ângulos theta1 e theta2 (radianos)
po1, po2 = s[:,2], s[:,3] # Momentos canônicos conujulgados aos ângulos (radianos/s)
x1 = l1np.sin(o1)
x2 = l1np.sin(o1)+l2np.sin(o2)
y1 = -l1np.cos(o1)
y2 = -l1np.cos(o1)-l2np.cos(o2)
plt.figure()
plt.plot(x1,y1,'g.',x2,y2,'b.',0,0,'yx',linewidth = 0.1)
plt.xlabel("x(m)")
plt.ylabel("y(m)")
plt.grid()
plt.title(r'Posições das massas $m_{1}$$(kg)$ e $m_{2}$$(kg)$')
plt.show()