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 :

Problèmes divers sur les tableaux


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 26
    Points
    26
    Par défaut Problèmes divers sur les tableaux
    Bonjour à tous, j'ai grand besoin de votre aide.

    Je cherche à programmer l'évolution d'un tas de sable en 2D selon la méthode de Bak, et mon interface graphique se fait sous Matlab.
    Si mon programme sous C avance bien, j'ai plusieurs problèmes avec Matlab, que je connais très mal (je ne sais même pas si ce que je souhaite est faisable...).

    1] Partant d'un tableau N*N dont chaque case a une valeur comprise entre 0 et une certaine valeur (dans mon problème c'est 5) je souhaite convertir cette valeur en un affichage sous forme de gros points à l'intérieur des cellules de mon tableau de départ.
    Plus explicitement, comme ceci:
    je pars du tableau 2*2 avec une valeur maximale de 4:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >> A=[1,2;3,4]
     
    A =
     
         1     2
         3     4
    et je voudrais quelque chose proche de ce qu'il y a sur ce montage (avec un quadrillage similaire):


    NB: dans mon cas, je peux avoir jusqu'à 5 points, et le 5ème se mettrait au centre de la case, comme sur un dé.

    2] En réalité, ce tableau n'est pas tel quel dans mon fichier matlab, je dois aller le chercher dans un certain fichier de sortie crée lorsque mon programme C tournera. D'où ces deux questions:

    2.1) (Question de C)
    Comment créer, sous C, un fichier (.txt?) qui contiendra à chaque étape de l'exécution de mon programme (j'ai des boucles en veux-tu en voilà) mes tableaux modifiés?
    Quelle est en somme la commande pour créer un fichier de sortie et y copier un tableau sous la forme d'affichage que j'ai préalablement imposée, ie. celle-ci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i=0; i<N; i++)
    	{printf ("\n");
    	for (j=0; j<N; j++)
    		printf("%6d", tab[i][j]);}
    	printf("\n");
    Il y a deux possibilités que j'aimerais avoir:
    - copier les tableaux à la suite (ça fait un gros stockage...)
    - copier un tableau puis l'écraser par le suivant calculé lorsque l'action 2.2) a été effectuée (ce qui constituerait évidemment la solution optimale!).

    2.2) Comment procéder pour que matlab aille rechercher un tableau dans le susdit fichier et effectue 1] tout de suite après:
    - si je n'ai qu'un tableau dedans (optimum donc)?
    - si je les ai tous mis (exemple si je veux le deuxième ci-dessous)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    1     2
    3     4
     
    2     2
    3     4
    Je présume que dans ce dernier cas il suffit de faire un saut de N+1 lignes (N=taille du tableau et +1 pour le saut de ligne entre chaque) et de prendre les N lignes suivantes...

    Merci (au moins mille fois) d'avance!

  2. #2
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Bonjour,

    pour ta premiere question, je te propose un exemple à améliorer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ref=[2 2 1 1 1.5; 1 2 1 2 1.5]-.5;
    N=5;
    M=ceil(5*rand(N));
    [x,y]=size(M);
    figure; hold on
    for i=1:x
        for j=1:y
            plot(ref(2,1:M(i,j))+2*(j-1),ref(1,1:M(i,j))+2*(i-1),'o','MarkerSize',20,'MarkerFaceColor','b')
            axis([0 2*y 0 2*x]);
            plot(2*[i i],[0 2*x],'k')
            plot([0 2*x],2*[j j],'k')
        end
    end

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 159
    Points
    3 159
    Par défaut
    Pour la deuxième question, et vu la nature du problème ( la matrice va comporter beaucoup de zéros ), le plus efficace consiste à utiliser le format de matrices creuses de Matlab.

    Celà :
    1- Economise la mémoire
    2- Facilite l'écriture du code C.

    Supposons que l'on écrive avec le programme en C, dans le fichier "m0".

    On fait une double boucle qui lit la matrice.
    A chaque fois un qu'un coeifficient non nul ( entre 1 et 5 ) est lu, on ajoute au fichier la ligne

    Ou i est le numéro de la ligne, j celui de la colonne et v la valeur du coefficient non nul. Si le coefficient est nul, on ne fait rien.

    Puis, dans matlab, pour récupérer la matrice il suffit de taper les commandes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    load chemin_vers_le_fichier/m0;
    A=sparse(m0(:,1),m0(:,2),m0(:,3));
    Et hop ! On a récupéré la matrice dans A. Dans la pratique, matlab, en ligne de commande, va afficher la listes des coordonnées suivie respectivement de la valeur non nulle associée, tous les autres coefficients valant implicitement zéro.

    Sémantiquement, dans les calculs, la matrice A obtenue va se comporter exactement pareil qu'une matrice normale .

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

Discussions similaires

  1. question sur les tableaux
    Par Neko dans le forum C++
    Réponses: 13
    Dernier message: 14/02/2006, 02h21
  2. [Smarty] problème compréhension sur les tableaux
    Par mohican13 dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 09/02/2006, 16h44
  3. [Tableau]imcompréhension sur les tableaux
    Par Burinho dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/12/2005, 09h33
  4. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00

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