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 :

Que fait cette ligne de code ?


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut Que fait cette ligne de code ?
    Bonjour,

    je dois traduire un algorithme MATLAB en R. Seulement, je ne connais absolument pas Matlab et je bloque sur cette instruction :

    V(:,iter+1)=max(aux,2)
    Que fait elle ? Pouvez vous m'expliquer plus particulièrement max(aux,2), car j'ai trouvé ce que signifie V(:,iter+1) (on prend le iter+1 ième vecteur colonne de la matrice V).

    V est une matrice
    aux est une matrice
    iter est une variable qui compte les itérations d'une boucle for


    Le commentaire à côté de cette ligne de code est :

    % take the max value over vij ignoring the missing values
    Merci de votre aide.

    PS : pour info, cet algorithme vient de la page 11 de ce document : matlab

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    La version de MATLAB utilisée est-elle indiquée ?

    Car c'est étrange dans ma version, max(aux,2) renverra une matrice de la taille de aux, avec les valeurs inférieures à 2 remplacées par 2 (en gros pour chque élément il prend le max entre aux et 2).
    Donc là tu essayerais de faire rentrer une matrice dans un vecteur colonne (puisque ton interprétation est exacte).
    Donc pour moi ce code ne devrait pas fonctionner...

    Et ce ne serait pas plus simple d'avoir l'algo en algo plutôt que de passer par du MATLAB ?

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Salut.
    max(aux,2) renverra une matrice de la taille de aux, avec les valeurs inférieures à 2 remplacées par 2 (en gros pour chque élément il prend le max entre aux et 2).
    Caro a raison. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    V=zeros(5,5);
    iter=1;
    aux=[0 1 2 3 4]';
    V(:,iter+1)=max(aux,2)
    Résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    V =
     
         0     2     0     0     0
         0     2     0     0     0
         0     2     0     0     0
         0     3     0     0     0
         0     4     0     0     0

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    Et ce ne serait pas plus simple d'avoir l'algo en algo plutôt que de passer par du MATLAB ?
    Si je pouvais avoir l'algo plutôt que du code MATLAB, ça m'arrangerait, seulement, le seul document dont je dispose est celui ci :

    matlab

    et l'algo d'où vient la ligne de code qui pose problème est page 11.

    Citation Envoyé par caro95470 Voir le message
    La version de MATLAB utilisée est-elle indiquée ?
    Non, la version de Matlab n'est pas indiquée, mais le document date de 2003...en plus, j'ai même pas matlab, donc je ne peux pas faire de tests moi même...

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut
    Je me permet de faire remonter ce sujet pour demander un petit service à quelqu'un qui aurait matlab. Je ne dispose pas de Matlab (malheureusement). Je ne peux donc pas faire les tests seul. Est ce que quelqu'un pourrait exécuter ce code et me dire s'il fonctionne et ce qu'il fait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    clear
    MaxIter=30;
    beta=0.9;
    K=0:0.01:1;
    [rk,dimK]=size(K);
    V=zero(dimK,MaxIter);
     
    for iter=1:MaxIter
        iter
        aux=zeros(dimK,dimK)+NaN;
     
        for ik=1: dimK
            for ik2=1:(ik-1)
                aux(ik,ik2)=log(K(ik)-K(ik2))+beta*V(ik2,iter);
            end
        end
     
    V(:,iter+1)=max(aux,2);
     
    end
    [Val,Ind]=max(aux,2);
     
    optK=K(Ind);
    optK=optK+Val*0;
    optC=K'-optK';
     
    figure(1)
    plot(K,V);
    xlabel('Size of Cake');
    ylabel('Value Function');
     
     
    % plot optimal consumption rule as a function of cake size
    figure(2)
    plot(K,[optC K'],'LineWidth',2)
    xlabel('Size of Cake');
    ylabel('Optimal Consumption');
    text(0.4,0.65,'45 deg.line','FontSize',18)
    text(0.4,0.13,'Optimal Consumption','FontSize',18)
    Merci.

  6. #6
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Ben...il plante

    Ligne 6 : il faut remplacer zero par zeros :Et (comme je l'avais prédit, je vais me reconvertir dans la voyance ), là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    V(:,iter+1)=max(aux,2);
    donne :
    ??? Subscripted assignment dimension mismatch.
    Pour les explications voir mon post #2.

    Je suppose (avec un degré d'incertitude maximum cependant) que cela vient d'une mauvaise utilisation de la fonction MAX.
    Il faudrait voir la documentation de cette fonction dans la version de MATLAB utilisée par l'auteur (2003 si on regarde ici :Quelles sont les différentes versions de MATLAB ?, on peut supposer que c'est la r13..., ayant seulement accès à la documentation de la R13SP2, ben l'aide de MAX est la même)

    Ou alors comprendre ce qu'il a voulu faire avec son max.

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut
    Effectivement, cela vient peut être d'un problème de version. En allant sur ce site (http://www.mathworks.com/access/help...x+matlab&meta=), on trouve :

    C = max(A,[],dim) returns the largest elements along the dimension of A specified by scalar dim. For example, max(A,[],1) produces the maximum values along the first dimension (the rows) of A.
    Donc je pense que ce qu'il veut faire avec cette instruction, c'est récupérer la valeur maximale par rapport aux colonnes. Du coup, avec la dernière version de matlab, la syntaxe serait la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    V(:,iter+1)=max(aux,[],2);
    Est ce que vous pouvez tester le code avec cette modification et me dire si ça marche svp ?

    Merci beaucoup à caro95470 pour sa rapidité.

Discussions similaires

  1. Que fait cette ligne de code
    Par netsupra dans le forum jQuery
    Réponses: 2
    Dernier message: 06/05/2014, 11h57
  2. que fait cette fonction(5 lignes)
    Par router_ dans le forum Débuter
    Réponses: 4
    Dernier message: 14/06/2010, 08h52
  3. Que signifie cette ligne de code ?
    Par ysahel dans le forum Débuter
    Réponses: 3
    Dernier message: 22/01/2010, 13h07
  4. Que fait cette ligne de code svp ?
    Par selmani300 dans le forum C++
    Réponses: 34
    Dernier message: 24/03/2009, 21h53
  5. Que fait cette requête?
    Par noinneh dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/10/2005, 19h38

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