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 :

Interprétation d'une instruction [Débutant]


Sujet :

MATLAB

  1. #1
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut Interprétation d'une instruction
    Bonjour,
    je viens de débuter sur MATLAB et je suis entrain de travailler sur la méta-heuristique BAT.
    et comme je suis débutant je galère dans la compréhension du langage qui est un peu différent des autres.

    pour écrire une équation de mise à jour de la population on a une matrice de "velocities".
    l'équation :
    Nom : 2015-03-30_140214.png
Affichages : 102
Taille : 2,7 Ko

    sur la démo MATLAB:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v(i,:)=v(i,:)+(Sol(i,:)-best)*Q(i);
    je trouve du mal comment MATLAB interprète la valeur t-1

    merci d'avance.
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Je ne suis pas sûr d'avoir bien compris la question. t-1 est ici l'abréviation de la fonction puissance. Tu peux donc faire ^(t-1) ?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut
    non vous m'avez pas bien compris, je veux dire l'instruction utilisant l'opérateur " : " comment elle est entrain de récupérer la valeur Vi de t-1 ?
    - t-1 ce n'est pas une puissance ça veut dire l'instant t-1.
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

  4. #4
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    supposition :
    tu veux calculer v à l'instant t, et tu as v à l'instant t-1
    pour le reste du calcul tu n'as pas besoin de garder v de l'instant t-1
    alors le calcul écrase la valeur de v(t-1) par la valeur de v(t)
    du coup v(i,: ) est v à t-1 avant l'affectation (=) et devient v à t après

    Fabien

  5. #5
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par le fab Voir le message
    salut

    supposition :
    tu veux calculer v à l'instant t, et tu as v à l'instant t-1
    pour le reste du calcul tu n'as pas besoin de garder v de l'instant t-1
    alors le calcul écrase la valeur de v(t-1) par la valeur de v(t)
    du coup v(i,: ) est v à t-1 avant l'affectation (=) et devient v à t après

    Fabien
    pas encore compris comment v(i,:) se trouve avant et après l'affectation, déjà cette instruction se trouve dans une boucle ou i va de 1 à n.
    on peut dire que les deux v(i,:) sont aussi deux boucles ?
    si c'est oui celle qui est après l'affectation s’exécute en premier ?
    merci d'avance.
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    Prenons un exemple plus simple. Soit une variable a à laquelle tu affectes une valeurs. Tu écris sur ton script :
    Ensuite, rien ne t'empêche d'écraser ta variable par une nouvelle valeur en écrivant :
    Dans ce cas a=10.

    Ce que te dit Fabien c'est simplement que la variable avant le égal n'a pas encore de valeur affectée.
    Donc quand tu écris a=a*2, le a à gauche n'a pas encore de valeur, alors que le a à droite vaut 5. Cette façon d'écrire permet de réaffecter une nouvelle valeur à la variable a qui maintenant vaut 10. Tu peux essayer sur ton terminal matlab pour t'en convaincre.

    Ce type d'écriture est particulièrement utilisé dans le cas d'un calcul itératif comme celui sur lequel tu travailles.
    Que se passe-t-il dans ta boucle ?
    Je reprends l'exemple de ma variable a. Je vais la définir comme ton champ de vitesse.
    Donc pour calculer a au rang n j'ai besoin de a au rang n-1. Pour cela il faut utiliser une boucle dans laquelle on fait varier n. Dans ton cas n=i.
    Voilà ce que ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    for i=1:nmax
         ...
         a(i)=a(i)+10;
         ...
    end
    En fait le a(i) à gauche du égal sera la nouvelle valeur, ici ta valeur de v(t). Et pour cela matlab se sert de la valeur de a(i) qu'il a en mémoire, ici ta valeur de v(t-1). La valeur a(i) gardée en mémoire est celle calculée à l'itération i-1.

    Voilà un petit script pour t'en convaincre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a=zeros(1,10);ind=2;
    for i=1:10
        a(ind)=a(ind-1)+10;
        ind=ind+1;
    end
    Pour finir tu ne peux pas dire que v( i,: ) est une boucle. Ta variable v est une matrice de taille (i,m) où i est le nombre de lignes et m le nombre de colonnes. Donc à l'itération i=1, tu choisis dans la matrice v toutes les colonnes de la ligne 1 et ainsi de suite jusqu'à que tu aies balayées toutes les valeurs souhaitées. Pour t'en convaincre essaie le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    mat=magic(5); % déclaration d'une matrice 5 par 10
    mat(1,:) % Affichage de la première ligne
    % Affichage par une boucle des toutes lignes séparément
    [L,C]=size(mat)
    for i=1:L
         mat(i,:)
    end
    % Affichage par une boucle des toutes colonnes séparément
    for i=1:C
         mat(:,i)
    end

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    arf, désolé pour cette réponse inutile. Je me suis trompé en voulant corrigé une erreur de ma réponse.

    Sinon, un petit merci m'aurait fait plaisir...

  8. #8
    Membre régulier Avatar de zakimadrid
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 76
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par Beltharion Voir le message
    arf, désolé pour cette réponse inutile. Je me suis trompé en voulant corrigé une erreur de ma réponse.

    Sinon, un petit merci m'aurait fait plaisir...
    Désolé pour le retard et merci pour le temps que tu m'as accordé et bien-sûr les explications
    Vaut mieux poser une question et passer pour bête que le rester toute une vie

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

Discussions similaires

  1. [C#] Comment exécuter une instruction dynamiquement ?
    Par NeoMan dans le forum Contribuez
    Réponses: 11
    Dernier message: 15/01/2009, 16h45
  2. Réponses: 13
    Dernier message: 27/12/2005, 09h17
  3. Une instruction s'execute qd on appuie sur entree
    Par nbutin dans le forum C++Builder
    Réponses: 1
    Dernier message: 17/08/2004, 00h48
  4. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  5. Passer de la zone d'édition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 14h44

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