IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Arguments de fonctions - Euler explicite


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Points : 65
    Points
    65
    Par défaut Arguments de fonctions - Euler explicite
    Bonjour,

    Je suis en train de programmer les chéma d'Euler explicite pour la résolution d'une équa-diff, mais j'ai un problème avec les arguments de sortie de ma fonction.
    Voici l'équa diff :

    x'=2x+y+exp(-t)
    y'=x-y-exp(-t)
    x(0)=1
    y(0)=0

    Ma fonction second membre ( nommé F ) se trouve dans le fichier F.m, et a 2 arguments de sortie : Z1 et Z2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    % Fonction second membre
     
    function [Z1,Z2]=F(t,z)
     
    Z1=2*z(1)+z(2)+exp(-t);
    Z2=z(1)-z(2)-exp(-t);

    J'ai ensuite fait la boucle pour le schéma d'Euler explicite, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Zbar=ones(2,n+1);
    Zbar(1,1)=1; % x(0)=1
    Zbar(2,1)=0; % y(0)=0
     
    for i=1:n
        [e1,e2]=F(t(i),Zbar(:,i));
        Zbar(1,i+1)=Zbar(1,i)+h*e1; 
        Zbar(2,i+1)=Zbar(2,i)+h*e2;    
    end
    Avec ce code, ça marche très bien.

    Seulement, j'avais cru comprendre qu'il était possible de faire simultanément les calculs sur chacune des lignes, j'ai donc transformé le code en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Zbar=ones(2,n+1);
    Zbar(1,1)=1; % x(0)=1
    Zbar(2,1)=0; % y(0)=0
     
     for i=1:n
         Zbar(:,i+1)=Zbar(:,i)+h*F(t(i),Zbar(:,i));    
     end
    Mon problème : F(t(i),Zbar(:,i)) va sortir toujours la même valeur ( à savoir Z1) donc la première ligne de Zbar et la 2ème seront sensiblement identique vu qu'il fera toujours le calcul à partir de Z1.

    Savez-vous comment faire pour pouvoir utiliser les 2 arguments de sortie de la fonction F ?
    Faut-il forcément que je passe par la syntaxe [e1,e2]=F(t(i),Zbar(:,i)); ?


    Merci beaucoup.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 313
    Points : 52 939
    Points
    52 939
    Par défaut
    Comme les arguments de sorties de F sont de mêmes types, il est possible de les concaténer pour obtenir un vecteur plutôt que deux scalaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function Z=F(t,z)
     
    Z(1,1)=2*z(1)+z(2)+exp(-t);
    Z(2,1)=z(1)-z(2)-exp(-t);
    Donc l'appel se fait simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Zbar=ones(2,n+1);
    Zbar(1,1)=1; % x(0)=1
    Zbar(2,1)=0; % y(0)=0
     
     for i=1:n
         Zbar(:,i+1)=Zbar(:,i)+h*F(t(i),Zbar(:,i));    
     end
    L'utilisation de matrices (ou de vecteurs) à la place de scalaires est généralement une bonne méthode de programmation avec MATLAB (c'est ce que l'on appelle la vectorisation)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Points : 65
    Points
    65
    Par défaut
    merci, j'avais pas pensé à sortir un vecteur de ma fonction, quel idiot !

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/05/2006, 11h54
  2. Espace dans les arguments de fonction
    Par black is beautiful dans le forum Windows
    Réponses: 2
    Dernier message: 11/03/2006, 12h06
  3. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17
  4. vector<bool> comme argument de fonction
    Par Krishna dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/09/2004, 08h30
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo