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 :

Dimensions de matrices et pas [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut Dimensions de matrices et pas
    Bonjour,

    Je suis novice sur Matlab et j'ai quelques soucis de calculs.

    j'ai un calcul du type
    x=a*(k/w)*(cos(k(u+i))/cos(ki))*sin(kj-wt)

    Toutes mes lettres représentent des matrices d'une colonne et pleins de lignes (aux alentours de 10^6) sauf u et t qui sont deux variables.
    J'ai attribué un pas de temps à t et un pas de distance à u. Ces deux variables sont donc représentées par des matrices d'une ligne et plusieurs colonnes.

    Tout d'abord je suis obligée de décomposer mon calcul car out of memory (en même temps vu le nombre de données...).

    Mais mon plus gros problème c'est que du coup, mes variables appliques des dimensions de matrices différentes ce qui m'empeche d'appliqué mon calcul.

    Je voudrais faire ce calcul pour chaque temps et distance données.

    J'ai tenté les boucles for mais je ne sais pas si j'utilise la bonne fonction ou si je l'ai mal faite, en tout cas ça n'a pas marché.

    Je ne sais pas si j'ai été assez claire, mais auriez-vous des idées?

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Bonjour

    - Remplace tous tes produits et division * et / par les produits /division termes à termes .* et ./
    - Mets tous tes vecteurs avec la même orientation, en transposant les lignes en colonnes ou le contraire (transposé de x <=> x' ; x.' si x est complexe)

    Cela suffit en général à éviter les boucles simples (c'est le principe de calcul vectorisé en matlab). Pour des formules plus ardues, on peut préférer une boucle.

    NB: cela suppose que les valeurs u(n) t(n) x(n) etc coincident. Si tu cherches à croiser tes variables ([u(1) x(1), u(1) x(2), u(2) x(1)...]), utilise meshgrid, comme indiqué par FLB, et fais toutes les opérations vectorialisées sur des matrices plutôt que des vecteurs

  3. #3
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Par défaut
    Salut,
    Pour chaque couple (u,t) x est un tableau de 10^6 valeurs?
    Ce petit lien explique comment va évoluer la mémoire de matlab :
    http://matlab.developpez.com/faq/?pa...mation_memoire
    Chaque couple (u,t) prendra 1e6*8/1024/1024 = 7.6Mo de mémoire -> tu as vraiment besoin de tout stocker au préalable?

    Si tu veux parcourir u pour chaque valeur de t (et vice versa), regarde ce que fait la méthode meshgrid.

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut
    Bonjour,

    Merci pour vos réponses,
    VV33D j'ai déjà fait ce que tu me suggères et ça m'a super bien dépanné pour la gestion de la mémoire. Mais cela ne fonctionne pas pour ce problème ci.


    FLB je vais tenter de voir avec meshgrid. Je n'y avais pas pensé merci. Je ne suis pas obligée de tout stocker, je peux très bien regarder chaque ligne indépendament des autres mais in fine il va falloir que je les visualise ensemble. Et comme j'ai des tas de fichier à traiter je me suis dis que c'était peut être la meilleur solution.

    Je vous tiens au courant!

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut
    Alors après quelques vérifications j'ai remarqué que j'avais en effet "oublié" quelques points à mes opérations.
    Du coup je les ai rajouté et tout est nickel, ça marche avec une boucle et pas besoin de faire un meshgrid, à une exception. Il me fixe les variables sur une valeur (alors que je les avais défini avec des pas).

    Par exemple j'ai défini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    t=(0:5:40)
    u=(0:1:31)
    for u=u
            for t=t
                 x=a.*(k./w).*(cos(k(u+i))./cos(ki)).*sin(kj-wt)
            end
    end
    et quand mon calcul se termine j'ai une valeur unique:
    t=15
    u=30
    alors que je voudrais voir la variation de chaque ligne de mes tableaux (10^6) avec chaque pas de t et u.

    Est-ce que je me suis trompée quelque part ou bien je fais totalement fausse route?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Essaie ceci :

    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
    ku = 0;
     
    for u = 0:1:31
     
        ku = ku+1;
        kt = 1;
     
        for t = 0:5:40
     
            x(ku,kt) = a.*(k./w).*(cos(k(u+i))./cos(ki)).*sin(kj-wt);
            kt = kt+1;
     
        end
     
    end
    Par curiosité, tu pourrais nous montrer ce que renvoie ceci à la fin de l'exécution du code ?


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

Discussions similaires

  1. Matrice 2 dimensions qui n'est pas accessible
    Par bpascal123 dans le forum Débuter
    Réponses: 3
    Dernier message: 27/03/2010, 12h42
  2. Problème de dimension de matrice après extrapolation
    Par mathylde dans le forum MATLAB
    Réponses: 4
    Dernier message: 11/07/2008, 16h33
  3. Ajouter une dimension à une matrice 2D
    Par AIDA DIANE dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/05/2008, 11h33
  4. problême de dimensions qui ne suivent pas
    Par Plomeg dans le forum OpenGL
    Réponses: 7
    Dernier message: 24/02/2008, 19h22
  5. Réponses: 2
    Dernier message: 24/01/2008, 16h08

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