Aller au contenu

scipy.optimize.fsolve: Utilisation dans un script.


Chaka

Messages recommandés

Bonjour, je rencontre un problème sur la fonction fsolve. En effet python me renvoie cette erreur TypeError: fsolve() missing 1 required positional argument: 'x0' (le problème viendrait donc du x0=0.01)

J'ai lu sur le net que cet problème vennait du lambda composé avec le fsolve et qu'il vallait peut être mieux définir la fonction à côté, mais cette solution m'enquiquine un peu. 😕
Je vous poste ci-joint mon script si quelqu'un aurait une/des solution.s ... :)

 

def eulerimplicite(fei,t0,tf,y0,N):
    y=[y0]
    t , pas=np.linspace(t0,tf,N+1) , (tf-t0)/N
    for i in range(N):
        y.append(fsolve(lambda y:y[i]+pas*fei(t[i],y)-y),0.01)
    return y

 

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonjour,

Attention, je n'ai pas tout compris, mais voilà un script que marche, que j'ai trouvé sur Internet.

from scipy.optimize import fsolve

import numpy as np

import matplotlib.pyplot as plt

def f(y, t):
    return np.sin(t)*np.cos(y)

def euler_implicite(f,a,b,y0,n):
    t,Y,h=[a],[y0],(b-a)/n
    for i in range(1,n+1):
        t.append(i*h)
        Y.append(fsolve(lambda y:Y[i-1]+h*f(t[i],y)-y,0.01))
    return t,Y

t,Y=euler_implicite(f,0,100,1,1000)
plt.plot(t,Y)
plt.show()

La seule chose que je constate par rapport au tien, c'est qu'on fait la différence entre la liste Y et le y qui apparaît dans une partie du "def".

Mais pour le reste... A toi de voir si tu peux en tirer quelque chose

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir!
Merci pour ton retour !
En effet j'étais déjà tombé sur ce lien, mais en essayant de le mettre à ma sauce cela n'avait pas fonctionné. 😕 

Autre question, j'essaye de comparer les approximations de différents algorithmes sur un problème de Cauchy simple :
\(\left\{ \begin{array}{ll} y'(t)=y(t)\\ y(0)=1 \end{array} \right.\).
Cependant, ma méthode de Heun me fais du n'importe quoi (du moins son approximation devrait être bien plus proche de la solution théorique). Voyez-vous mon erreur dans le script

def heun(fh,t0,tf,y0,N):
    y=[y0]
    t, pas=np.linspace(t0,tf,N+1), (tf-t0)/N
    
    #Initialisation
    k1=[fh(t[0],y[0])]
    k2=[fh(t[1],y[0]+pas*k1[0])]
    
    for i in range(N):
        k1.append(fh(t[i],y[i]))
        k2.append(fh(t[i+1],y[i]+pas*k1[i]))
        y.append(y[i]+pas*(k1[i]+k2[i])/2)

    return y

 (En pièce jointe le graphe comparatif des approximations de la solution: première capture pour 6 points, deuxième avec 21 points ). En effet Heun devrait être très proche de RK4 et être " plus précis " qu'Euler.
Merci pour vos retours

image.png

image.png

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering