Équations différentielles et champs de vecteurs

On définit la fonction d'une équation différentielle autonôme y'=f(y). La deuxième fonction ne sert que parce qu'il faut rentrer dans le solveur plus bas une fonction qui prend un vecteur et rend un vecteur (même si ce vecteur n'a qu'une coordonnée).

In [1]:
def f(x):return x*x
def F(t,y):return[f(y[0])]

Voir la feuille sur la chute des pierres pour comprendre comment marche la résolution.

In [2]:
U=ode_solver()
U.function=F
In [3]:
U.ode_solve(y_0=[1],
            t_span=[0,10],
            num_points=100)

On trace le champ de vecteurs (1,f(v))

In [4]:
u,v = var('u v')
monchamp=plot_vector_field((1,f(v)), (u,-3,3),(v,-2,2))
In [5]:
monchamp.show()
In [6]:
monchamp.save('x2.pdf')

On recommence avec un système différentiel à deux variables.

In [7]:
def g(x,y):
     return[y,(cos(x)-2)*sin(x)]
def G(t,y):
     return g(y[0],y[1])
In [8]:
V=ode_solver()
V.function=G
In [9]:
V.ode_solve(y_0=[-3,1],
            t_span=[0,10],
            num_points=100)

On trace le champ de vecteurs correspondant.

In [11]:
autrechamp=Graphics()
autrechamp+=plot_vector_field(g(u,v), (u,-3,16),(v,-2,3))
In [10]:
a=V.interpolate_solution()
b=V.interpolate_solution(i=1)
seq=[(a(0.1*i),b(0.1*i)) for i in range(100)]

On rajoute sur le même dessin la solution juste calculée.

In [12]:
autrechamp+=list_plot(seq,plotjoined=True,rgbcolor=(1,0,0))
In [13]:
autrechamp.show()

On rajoute encore une solution avec d'autres paramètres initiaux.

In [14]:
V.ode_solve(y_0=[-2,0],
            t_span=[0,10],
            num_points=100)
In [15]:
a=V.interpolate_solution()
b=V.interpolate_solution(i=1)
seq=[(a(0.1*i),b(0.1*i)) for i in range(100)]
In [16]:
autrechamp+=list_plot(seq,plotjoined=True,rgbcolor=(1,0,0))
In [17]:
autrechamp.show()
In [18]:
autrechamp.save('sincos.pdf')
In [ ]: