Analyzing results ================= To analyze the results the numpy and scipy packages of Python are used. For even more functionality the statistical package `pandas `_ can be used, but that is not included in this documentation. In all examples at this page a typical VanDerPol simulation is assumed to be run first: .. code-block:: python from pysim.simulation import Sim from pysim.systems import VanDerPol import matplotlib.pyplot as plt import numpy as np sim = Sim() sys = VanDerPol() sys.store("x") sim.addSys(sys) sim.simulate(20,0.1) time = np.arange(0,20,0.1) x = sys.res.x The stored values are saved as `numpy arrays `_ so all methods that can be used on numpy arrays can be used on the results. It is for example possible, and often useful, to `slice `_ an array to efficiently get a subset of it. Say that you have an result x then you can get the first five values of that array by slicing it >>> x[:5] array([ 1. , 1.0994475 , 1.19490544, 1.28069498, 1.34919295]) It is also possible to get the last five values >>> x[-5:] array([ 1.56819423, 1.74261745, 1.93952537, 2.15280207, 2.3669469 ]) To get the maximum or minimum of an array you can use its max and min function >>> x.max() 2.6762298217379024 >>> x.min() -2.6780402033754451 To get the index of the max value use `argmax `_ >>> x.argmax() 135 >>> x[135] 2.6762298217379024 >>> time[135] 13.5 Plotting -------- To plot a graph use the `matplotlib `_ plot function. >>> plt.plot(time,x) >>> plt.show() .. image:: /images/VanDerPolPlot.png It is also possible to plot a subset of the values by using slicing. >>> plt.plot(time[40:100],x[40:100]) >>> plt.show() .. image:: /images/VanDerPolPlot_40_100.png Finally, lets att some more information to the plot >>> plt.plot(time,x) >>> plt.xlabel('time') >>> plt.ylabel('x') >>> plt.title('Van Der Pol Oscillations') >>> plt.grid() >>> plt.show() .. image:: /images/VanDerPolPlot_with_grid.png This is just an introduction to the matplotlib. To proceed from here have a look at their `tutorial `_.