### Training and Prediction {#train_esn}

During training ($-T \leq t \leq 0 $), $\mathbf{W_{in}}$ and $\mathbf{A}$ are initialized with random numbers, which stay fixed during the training (and testing) process, The state matrix $\mathbf{r}$ is initialized to $0$. During initialization, we ensure that the spectral radius of $\mathbf{A}$ is less than unity by first dividing the matrix $\mathbf{A}$ with its largest eigenvalue $\Lambda$ and further multiplying it by a scalar ($\rho \leq 1$). Then the state matrix $\mathbf{r}$ is computed using Eq. (\[eq:r\]) for the training set, and $\mathbf{W_{out}}$ is computed using Eq. (\[eq:wout\]). During prediction (i.e., testing) corresponding to $t > 0$, the computed $\mathbf{W_{out}}$ is used to march $v(t)$ (and thus $X(t)$) forward in time (Eqs. (\[eq:v\])-(\[eq:tdt\])) while as mentioned earlier, $r(t)$ keeps getting updated using the predicted $X(t)$ (Eq. (\[eq:r\])). A non-linear transformation is used to compute $\tilde{r}(t)$ from $r(t)$ before using Eq. (\[eq:v\]).

Our RC-ESN architecture and training/prediction procedure are similar to the ones used in [@pathak2018model]. There is no overfitting in the training phase because the final training and testing accuracies are the same. Our code is developed in Python and is made publicly available (see Code and data availability).

Feed-forward artificial neural network (ANN) 