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 :

Aide création nom de variable avec 2 indices


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Aide création nom de variable avec 2 indices
    Bonjour à tous,

    Je recherche de l'aide pour éviter d'utiliser la fonction eval qui ne me permet pas de créer de variable utilisable dans la suite de mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function [H] = function1(A)
    n=length(A.t);
     
    for i=1:n-2
    eval(['B' num2str(i-1) num2str(i) ' = function2(A.a(i),A.b(i),A.c(i+1),A.d(i+1))']);
    end
    B00=eye(4);
    for i=1:n-2
     eval(['B' num2str(0) num2str(i) '=' 'B' num2str(0) num2str(i-1) '*B' num2str(i-1) num2str(i)]);
    end
    eval(['H=' 'B' num2str(0) num2str(n-2)]);
    Le but de cette fonction est de me renvoyer juste la dernière matrice B0n-2 qui est calculée à partir du produit matriciel effectué dans la seconde boucle.
    J'aimerais donc pouvoir récupérer les matrices intermédiaires qui sont calculées dans les 2 boucles.
    Le problème que je rencontre est que les noms de mes matrices dans la première boucle ne suivent pas B01,B02,B03 etc mais B01,B12,B23 etc jusqu'à Bn-1n-2 et celles dans la deuxieme boucle suivent par contre B01,B02,B03 etc jusqu'à B0n-2 et j'aimerais donc pouvoir récupérer ces matrices avec leur nom respectif afin de pouvoir les utiliser dans mon programme principal.
    A tite d'exemple pour n=8
    Je calcule cette fonction va me renvoyer B06 et pour la calculer elle va calculer B01 B12 B23 B34 B45 B56 puis B01 B02 B03 B04 B05 B06 et j'aimerais pouvoir récuperer toutes ces matrices et pouvoir directement les utiliser dans mon programme principal. (ex je souhaiterais l'inverse de B34 dans mon programme principal je souhaiterais juste écrire inv(B34) )

    Je vous remercie pour toute votre aide.

  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 315
    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 315
    Points : 52 943
    Points
    52 943
    Par défaut
    Il est inutile d'utiliser eval ici (Comment créer dynamiquement des variables nommées A1, A2, A3… AN ?)

    Un tableau de cellules (cell array) serait plus approprié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function H = function1(A)
     
    n = length(A.t);
     
    for i = 1:n-2
        B{i-1,i} = function2(A.a(i), A.b(i), A.c(i+1), A.d(i+1));
    end
     
    B{0,0} = eye(4);
     
    for i = 1:n-2
        B{0,i} = B{0,i-1}*B{i-1,i};
    end
    Bien entendu, le code ci-dessus ne fonctionne pas car les indices commencent à 1 avec MATLAB.
    Je te laisse gérer par toi-même le décalage d'indices nécessaire au bon fonctionnement du code.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Je te remercie de ta réponse, j'avais déjà essayé avec un tableau de cellule comme préconisé dans la FAQ mais comme tu l'as écrit il est n'est pas possible d'avoir B01 du fait du début à 1 dans matlab. Or c'est justement sur ce point que j'aurais aimé savoir s'il était possible soit de récupérer les matrices par exemple B01,B02 etc qui sont calculées par la commande eval. En les ayant bien sous la forme B0i et non devoir les avoir sous la forme B1i+1.. En d'autres termes existe il une commande ou un moyen de récupérer ce que crée eval pour en faire une variable utilisable dans le programme principal ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 315
    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 315
    Points : 52 943
    Points
    52 943
    Par défaut
    Il y a une différence entre la formulation de ton problème (premier indice 0) et la façon dont tu programmes le code correspondant (premier indice 1).

    Tu cherches à créer des variables B01,B02,B03… mais rien ne t'empêche de créer plutôt des variables B11,B12,B13… en gérant le décalage d'indice.

Discussions similaires

  1. Réponses: 22
    Dernier message: 21/04/2008, 16h14
  2. Nom de variable avec indice..
    Par polodu84 dans le forum MATLAB
    Réponses: 6
    Dernier message: 05/03/2008, 20h03
  3. [Débutant] Nom de variable avec des indices
    Par scraven dans le forum MATLAB
    Réponses: 4
    Dernier message: 24/04/2007, 21h02
  4. Nom de variable avec caracteres []
    Par zevince dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/10/2005, 15h22
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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