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 :

Meilleur façon de vectoriser ce genre de boucle ? [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 30
    Points
    30
    Par défaut Meilleur façon de vectoriser ce genre de boucle ?
    Bonjour,

    J'ai la boucle suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n=2:N-1
        xPoint(n)=a(n-1)/b(n)*max(x(n-1)-x(n),0)^(3/2);
    end
    Je l'ai vectorisée comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a2=a(1:end-1);
    b2=b(2:end-1);
    x2=x(1:end-2);
    x3=x(2:end-1);
    xPoint=a./b.*max(x2-x3,0).^(3/2);
    Est-ce la meilleur façon de faire ? Par que c'est certes plus rapide que la boucle for mais ça gache de la mémoire avec les matrices intermédiaires.


    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    dans ta dernière ligne il faut remplacer a et b par a2 et b2, non?

    De toute manière, tu n'as pas besoin de ces variables, tu peux écrire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xPoint=a(1:end-1)./b(2:end-1).*max(x(1:end-2)-x(2:end-1),0).^(3/2);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par magelan Voir le message
    Bonjour,

    dans ta dernière ligne il faut remplacer a et b par a2 et b2, non?
    Oui, pardon.


    Citation Envoyé par magelan Voir le message
    De toute manière, tu n'as pas besoin de ces variables, tu peux écrire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xPoint=a(1:end-1)./b(2:end-1).*max(x(1:end-2)-x(2:end-1),0).^(3/2);
    Ok, merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/05/2006, 15h16
  2. Réponses: 9
    Dernier message: 27/03/2006, 19h05
  3. Réponses: 7
    Dernier message: 24/02/2006, 16h31
  4. Liste d'objets, quel est la meilleure façon
    Par shirya dans le forum C++
    Réponses: 2
    Dernier message: 08/12/2005, 16h59
  5. Est ce bien la meilleure façon de faire un histogramme ?
    Par rvzip64 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 10/05/2005, 12h41

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