In [ ]:
from IPython.display import display
from ipywidgets import interact
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from pyodesys.symbolic import SymbolicSys
%matplotlib notebook
In [ ]:
def f(t, s, p):
x, y, z = s['x'], s['y'], s['z']
sigma, rho, beta = p['sigma'], p['rho'], p['beta']
return {
'x': sigma*(y - x),
'y': x*(rho - z) - y,
'z': x*y - beta*z
}
In [ ]:
odesystem = SymbolicSys.from_callback(
f, names='xyz', param_names='sigma rho beta'.split(),
dep_by_name=True, par_by_name=True, indep_name='t')
In [ ]:
y0 = {'x': -10, 'y': -15, 'z': 15}
params = {'rho': 28, 'sigma': 10, 'beta': 8/3.}
integrate_kwargs = dict(integrator='cvode', nsteps=5000)
res = odesystem.integrate(10, y0, params, **integrate_kwargs)
In [ ]:
#fig = plt.figure()
res.plot(names='z')
_ = plt.legend()
In [ ]:
fig = plt.figure()
stack = []
def integrate_and_plot_3d(rho=28, sigma=10, beta=2.5):
xout, yout, info = odesystem.integrate(
10, y0, dict(sigma=sigma, rho=rho, beta=beta),
integrator='cvode', nsteps=5000)
ax = fig.gca(projection='3d')
for lines in stack:
lines[0].set_alpha(0.6*lines[0].get_alpha())
stack.append(ax.plot(*yout.T, alpha=1.0, color='g'))
if len(stack) > 4:
lines = stack.pop(0)
lines[0].remove()
display(fig)
interact(integrate_and_plot_3d)