FORMAV Votre partenaire Formation http://formav.eu
# nécessaire pour utiliser matplotlib
%matplotlib inline
#Programme créé par Martine Arrou-Vignod en Août 2015
from math import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.axes as ax
from matplotlib.pyplot import *
#pour faire du calcul formel
from sympy import *
import sympy as sp
#Pour pouvoir utilser mathjax pour écrire des formules
init_printing(use_latex='mathjax')
###Défintion des variables utiles dans les calculs
x,y=symbols("x y ")
def linun(a,b,xd0,yd0,ordre):
#ordre 0 on donne yd0=y(xd0)
#ordre 1 on donne yd0=y'(xd0)
f=Function('y')
fonction=a*f(x).diff(x)+b*f(x)-secondmembre(x)
print('Equation différentielle')
pprint(fonction)
print('Solution générale équation différentielle sans Conditions Initailes')
solution=dsolve(fonction)
pprint(solution.expand(basic=True))
x0=xd0
y0=yd0
#pprint(solution)
if ordre==0 :
sol1=solution.rhs.subs(x,xd0)-yd0
if ordre==1 :
solutiond=solution.rhs.diff(x).expand(basic=True)
print('\nDérivée' )
pprint(solutiond)
sol1=solutiond.subs(x,xd0)-yd0
S=solve((sol1))
solutionci=solution.subs("C1",S[0])
pprint(solutionci.expand(basic=true))
lx = np.linspace(-4,4,100)
#les lignes ci-dessous ralentissent l'exécution du programme et peuvent être supprimées
#leur but est d'avoir la même échelle pour la solution générale sans condition initizle
#et pour la solution avec conditions initiales
yabs=[nsimplify(solutionci.rhs.subs(x,x1).evalf()) for x1 in lx]
ym=min(yabs)
ymm=max(yabs)
deltay=round(ymm-ym)
my=round(ym)-0.1*deltay
mmy=round(ymm)+0.1*deltay
plt.axis([-4,4,my,mmy])
#fin lignes pouvant être supprimées
plt.xlabel('x')
plt.ylabel('y')
plt.title('Quelques solutions sans conditions initiales')
for k in range(-20,20):
solutionk=solution.subs("C1",k).expand(basic=True)
plt.plot(lx, [solutionk.rhs.subs(x,x1) for x1 in lx])
plt.show()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Solution de l\'équation différentielle' )
plt.plot(lx, [solutionci.rhs.subs(x,x1) for x1 in lx],label='Solution avec conditions initiales')
plt.legend()
plt.show()
return solutionci.expand(basic=True)
Exemple n°1
def secondmembre(x):
return x**2
linun(1,1,0,1,0)
Exemple n°2
def secondmembre(x):
return x**2
linun(3,1,0,1,0)
Exemple n°3
def secondmembre(x):
return x**2*exp(x)
linun(3,1,0,1,1)
Exemple n°4
def secondmembre(x):
return sin(x)
linun(1,1,1,1,1)