docs: def solve(self, y, h, t_end):
  		"""
  		Given a function, initial conditions, step size and end value, this will
  		calculate an unforced system. The default start time is t=0.0, but this
  		can be changed.
  
  		y - initial state
  		h - step size
  		n - stop time
  		"""
  		ts = []
  		ys = []
  		yi = y
  		ti = 0.0
  		while ti < t_end:
  			ts.append(ti)
  			yi = self.step(yi, None, ti, h)
  			ys.append(yi)
  			ti += h
  		return ts, ys