Euler implicite avec Scilab

Bonjour,

je me demande comment faire pour implémenter l'itération $y_{n+1}=y_n+hf(t_{n+1}, y_{n+1})$ du schéma d'Euler implicite dans Scilab par exemple : en effet il s'agit d'une résolution d'équation...j'ai essayé avec :

y=fsolve(0,y+h*f(t,x)-x)

mais ça me donne :

!--error 9
Soustraction incohérente (à cette ligne).

En vous remerciant

Réponses

  • D'après ce que j'ai pu lire à gauche à droite, il faut utiliser une méthode de Newton à implémenter soi-même...
  • Bonjour

    As tu regardé Euler implicite

    google donne d'autres liens. As tu programmé la méthode de Newton?
  • Merci pour ta réponse. Oui je connais ce lien merci.

    Je sais programmer Newton mais il faut que je prenne le temps de faire le lien entre Newton et l'itération sus-dite. ça va être le programme de mon après-midi je crois, j'espérais un peu du tout cuit...
  • De mémoire ç'est fait dans le Quarteroni mais je ne l'ai pas sous la main
  • Merci beaucoup, je regarderai dedans.
  • Quand-même, il doit y avoir un autre moyen qu'en utilisant Newton, qui d'une part me semble difficile à adapter (il faut dériver l'expression que l'on cherche à annuler, à savoir dériver $y_{n+1}-y_n-hf(t_{n+1}, y_{n+1})$ ?) et pas le plus général possible (et si $f$ n'est pas dérivable ?).

    Je pense qu'il doit y avoir moyen de faire du fsolve.
  • en tout cas avec mathlab fsolve marche bien.
  • Du coup, après une heure de réflexions infructueuses, help, je n'arrive pas à implémenter un Euler implicite correct dans Scilab. Si y a quelqu'un pour m'aider, je prends.

    p.s @diego : dans Quarteroni-Sacco-Saleri il y a Newton, mais ça je savais déjà faire. Il n'y a pas de programme pour Euler implicite, mais peut-être parlais-tu du Quarteroni tout court, auquel je n'ai pas accès.
  • Ah je n'avais pas vu ton message. Bon je retente avec fsolve et je reviens :)
  • Ben moi ça me met "variable non définie : x" (avec mon code du premier post), mais c'est logique car je n'ai pas présenté x...
  • Voici tout mon programme :
    function [liste_y, liste_t]=EulerImpl(y0,N,T)
        //tentative de schéma d'Euler implicite
        y=y0; liste_y=[y0];
        t=0; liste_t=[0];
        h=T/N;
        for i=1:N
            z=fsolve(y,z-h*f(t,z)-y);
            t=t+h;
            liste_y=[liste_y, y];
            liste_t=[liste_t, t];
        end
    endfunction
    
  • Ce programme renvoie (et c'est logique) : "variable non définie : z". Quelqu'un pourrait-il me le déboguer ?
  • Le Quarteroni donne des programme en mathlab pour Euler implicite ça donne ça Euler Quarteroni


    Reste à voir ce qui se passe avec scilab
  • Un GRAND MERCI diego car depuis ce matin là-dessus je deviens dingue ! Je vais tâcher de comprendre ce programme (dur) et de le transposer en scilab (moins dur). (tu)
  • Bonjour.

    Es-tu sûr que tu respectes la syntaxe Scilab avec fsolve ?
    Le fait que z soit à la fois la réponse et un paramètre d'entrée est très douteux, mais même la syntaxe n'est pas celle que m'indique l'aide en ligne.

    Cordialement.
  • Bonjour gerard0, merci pour ta réponse.

    oui en effet, c'était y=fsolve(...) et non z=fsolve(...), j'avais corrigé.

    Bon finalement je m'en suis sorti grâce à l'extrait de Quarteroni, et d'après quelques "plot" le tout est cohérent (convergence plus rapide vers la solution exacte que euler explicite dans mon cas de figure).

    Je vais maintenant souffler un grand coup (j'y suis depuis 7h ce matin), et utiliser la même idée pour implémenter d'autres méthodes implicites.

    Un grand merci à tous les deux !
  • Un bon test c'est le pendule simple. Euler explicite est une horreur, RK marche beaucoup mieux, mais je ne me souviens plus de ce que donne Euler implicite.
  • Merci. Au passage j'ai changé $t_n$ en $t_{n+1}$ pour corriger l'itération dans deux de mes posts.
Connectez-vous ou Inscrivez-vous pour répondre.