Ara que ja he començat a fer proves amb Jupyter Notebook, el següent pas que vull provar és fer gràfics interactius. Doncs ha resultat ser més fàcil i ràpid del que pensava.
Parteixo d’un script python que simula les dades experimentals d’una trajectòria parabòlica, i calcula la paràbola que millor s’hi ajusta (regressió quadràtica). A partir de l’equació de la paràbola es pot deduir la constant g (=9,81 m/s2). Simulo les dades experimentals introduïnt un error de soroll en les dades teòriques. Doncs bé, amb el meu gràfic interactiu puc jugar amb el nivell de soroll, i amb el número de punts de mostreig, tal com es veu en el video. El codi queda de la següent manera:
%matplotlib inline from ipywidgets import interactive import numpy as np import pylab as plt from IPython.display import display, Math, Latex # tir parabòlic: y = vy*t - .5gt^2 vy = 10 # 10m/s g = 9.81 # m/s^2 t_max = 2*vy/g def f(nivell_soroll, num_punts): t = np.linspace(0, t_max, num_punts) y_or = vy*t - .5*g*t**2 noise = np.random.normal(0, nivell_soroll, num_punts) # simulem dades experimentals y = y_or + noise # ajustament a una paràbola z = np.polyfit(t, y, 2) g_exp = 2.0*z[0] t_ = np.linspace(0, t_max, 100) y_ = z[0]*t_**2 + z[1]*t_ + z[2] fig, ax = plt.subplots() plt.plot(t_, y_, t, y, 'bo') plt.suptitle("Tir parabòlic. Regressió quadràtica") plt.title("y = " + str(round(z[0],3)) + "t^2 + " + str(round(z[1],3)) + "t + " + str(round(z[2],3)) + " -> g exp = " + str(round(g_exp,3)) + " m/s^2") ax.set(xlabel='temps (s)', ylabel='y (m)') ax.grid() plt.show() interactive_plot = interactive(f, nivell_soroll=(0.0, 2.0), num_punts=(10, 50)) interactive_plot
Una altra cosa que m’interessa és la manera d’exportar aquests Jupyter Notebooks a una web, conservant les gràfiques i les fórmules en format Latex (encara que es perdi la interacció amb les gràfiques). Això s’aconsegueix directament exportant el Notebook a html:
$ jupyter nbconvert --execute tir_parabolic.ipynb --to html
i integrant aquest codi en una web on hi hagi més text i explicacions, i amb la llibreria Bootstrap.