Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

Répondre

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt onze moins quarantequatre
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

ccapucine
22-10-2021 10:46:56

Bonjour,
voici le code. L'objectif étant d'afficher les valeurs de log10(V)
Le souci est que, à partir de t=5, ce code donne des valeurs à 0.2 au dessus.
Je n'arrive pas à régler ce problème. Je vous remercie d'avance de m'aider à améliorer ce code


import matplotlib.pyplot as plt
import numpy as np
from numpy import log10 #L'avantage de la fonction log de numpy, c'est qu'elle est déjà vectorisée...
import json

UU=[]
II=[]
VV=[]
temps=[]

#initialisation
U=1.
I=0.
V=4.5
tau=2
a=0.01
b=80000
beta=0.1
sigma=1
t=0.
temps.append(t)

#pas de temps
h=0.01
ntau=int(tau/h)

#temps final
T=25.

#M=nb de pas de temps
M=int(T/h)+1

UU.append(U)
II.append(I)
VV.append(V)

for n in range(M) :
    Vn = (V + (0 if n <= ntau else 0.1*h*b*II[n-ntau]))/(1+0.1*h*sigma)
    Un = U/(1 + a*0.1*h*Vn)
    In = (I + a*0.1*h*Un*Vn)/(1+beta*0.1*h)
    U=Un
    I=In
    V=Vn
    UU.append(U)
    II.append(I)
    VV.append(V)
    print(t,np.log10(V))
    #print(t,V)
    t=t+h
    temps.append(t)
    if U < 0 or I < 0 or V < 0: #Si l'une des valeurs devient négative, c'est qu'il y a un bug !!
        break
 

Fred
19-10-2021 08:46:14

Salut Zebulor,

  Si, si, j'avais vu (c'est d'ailleurs pour cela que je demandais si les valeurs obtenues pour U,I et V étaient cohérentes).
Je que je voulais dire, c'est que le plt.show() ne sert à rien...

F.

Zebulor
19-10-2021 08:34:39

Bonjour,
peut être que Fred n'a pas tout vu .. si on déroule l'escalier je vois un print à la fin ..
...
for n in range(M) :
    Un=U*(1-h*a*V)
    In=I*(1-beta*h)+a*h*U*V
    Vn=V-h*sigma*V
    if n > ntau :
       Vn=Vn+h*b*II[n-ntau]
    U=Un
    I=In
    V=Vn
    UU.append(U)
    II.append(I)
    VV.append(V)
    t=t+h
    temps.append(t)
print (U, I , V)
#plt.plot(temps,UU,'blue')
#plt.plot(temps,II,'red')
#plt.plot(temps,VV,'green')
plt.show()

Fred
18-10-2021 22:16:30

Bonjour,

  Tel qu'il est écrit, avec les commentaires, tu ne demandes rien à afficher. Est-ce que les valeurs obtenues pour U, I et V sont cohérentes?

F.

ccapucine
18-10-2021 18:57:06

Bonjour,
je souhaite résoudre le système d'edo ci dessous en utilisant Python
et avoir le graphe de $log(V)$ où $V$ est la solution de la troisième équation
On considère le système suivant : pour tout $t \in [0,T]$ :
\begin{align*}
U'&=-a U V,
\\
I'&=aUV-\beta I,
\\
V'&= b I_{\tau} - \sigma V,
\end{align*}    où
$$
I_{\tau}(t)= \begin{cases}0 \ &\mbox{si} \ t \leq \tau, \\ I(t-\tau)\ &\mbox{si} \ t > \tau,
\end{cases}
$$        avec les conditions initiales
$$
U(0)=u_0, \ I(0)=0, \ V(0)=v_0,
$$
où $u_0=1, v_0=0.45, a=0.01, b=80000, \beta=0.1, \sigma=1,\tau=2$
J'ai essayé le code suivant mais sans pouvoir faire le plot de log(V)
Je vous remercie d'avance.


import numpy as np
from math import pi
from math import sin
from math import cos
from math import log
from math import sqrt
import matplotlib.pyplot as plt
#modele sir
# tau = le délai
# u(t)=nb non inféctées au temps t
# i(t)=nb infectes au temps t
# v(t)= nb cellules du virus au temps t
# a
#b
#beta
#sigma
#du/dt=-auv
#i'=auv-beta i
#v'=b i(t-tau)-sigma v
#unite=heures
UU=[]
II=[]
VV=[]
temps=[]
#initialisation
U=1.
I=0
V=0.45
tau=2
a=0.01
b=80000
beta=0.1
sigma=1
t=0.
temps.append(t)
#pas de temps
h=0.001
ntau=int(tau/h)
#temps final
T=25
#M=nb de pas de temps
M=int(T/h)+1
UU.append(U)
II.append(I)
VV.append(V)
dim=0.
for n in range(M) :
    Un=U*(1-h*a*V)
    In=I*(1-beta*h)+a*h*U*V
    Vn=V-h*sigma*V
    if n > ntau :
       Vn=Vn+h*b*II[n-ntau]
    U=Un
    I=In
    V=Vn
    UU.append(U)
    II.append(I)
    VV.append(V)
    t=t+h
    temps.append(t)
print (U, I , V)
#plt.plot(temps,UU,'blue')
#plt.plot(temps,II,'red')
#plt.plot(temps,VV,'green')
plt.show()
 

Pied de page des forums