bonjour
je vois à la main que y' x = y^3 a pour solutions y=±\sqrt{#/1}{-ln|x|-k} avec k un réel bien choisi
c'est défini sur ]0,exp(-k)[
j'aimerais tracer les courbes solutions pour diverses valeurs de k
je peux le faire à main avec matplotlib et c'est ce que je vais faire en urgence
mais j'aimerias bien apprendre à le tracer automatiquement avec odeint
j'essaie ceci, mais j'ai l'impression que les courbes sont mauvaises (elles devraient être définies sur un intervalle symétrique)
mes questions sont :
a) pourquoi l'affichage graphique ne correspond pas aux calculs théoriques ?
b) comment obtenir un affichage dépendant de la valeur que je choisis pour la variable k ?

(images : graphique (dissymétrique) généré par odeint vs graphique (symétrique) à la main
Nom : aj_odeint.jpg
Affichages : 83
Taille : 40,7 Ko


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy.integrate import odeint
 
from math import *
 
(gauche,droite)=(-3.5,3.5) #bornes du graphique
def sm(y, x): # second membre de l'equa diff donc y'=sm(y,x)
    return y**3/x
 
 
(mm,pp)=(2,3)#dimensions du tableau contenant tous les graphiques
 
# calculs divers
if (mm*pp != len(nL)):#il doit y avoir mm fois pp valeurs dans la liste nL
    print("verifie ci-dessus mm,pp ou nL")
 
# divers affichage graphique
plt.style.use('fast')
(L,l)=(25,10)
Linch,linch=(L/2.54,l/2.54)
fig, lafigure = plt.subplots(figsize=(Linch,linch),nrows=2, ncols=3)
plt.tight_layout()
plt.xticks([a,b], [r'a', r'b'])
plt.axis('on')
 
# choix de la police par défaut
mpl.rcParams['font.family'] = 'STIXGeneral'
plt.rcParams["font.size"] = 12
 
# integration de l'equa diff
X = np.linspace(gauche, droite, 1000,endpoint=True)
Y = odeint(sm, 1, X)
 
# trace des courbes
compteur=0
for abs in range(mm):
    for ord in range(pp):
        lafigure[abs,ord].spines['right'].set_visible(True)
        lafigure[abs,ord].grid('true')
        lafigure[abs,ord].plot(X, Y, color="blue", linewidth=1.0, linestyle="-")
plt.show()
Nom : aj_odeint.jpg
Affichages : 83
Taille : 40,7 KoNom : aodeintggb.jpg
Affichages : 53
Taille : 200,3 Ko