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ème de dimensions de matrice [Débutant]


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Problème de dimensions de matrice
    Bonjour étant débutant en programmation MATLAB , je souhaite créer un programme qui permet de venir lire une matrice Excel puis d'en modifier une partie ou la totalité d'une colonne et enfin de réécrire cette nouvelle matrice dans un nouveau fichier Excel.

    voici le code que j'ai tapé:

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    % Load the file initial.txt
    nodes = xlsread('PerfectpanelStart.xlsx');
     
     
    % Initialisation
    dimension = size(nodes,1);
    dimensionY = size(nodes,2);
    counter = 0;
    zeromat = zeros(dimension,dimensionY);
    pointer = 0;
     
    % Create the thickness of the panel
    thickness = input ('thickness of the panel: ')
    dt = thickness * 0.1;
     
    % Select number nodes to be displaced
    proportion = input('% of node needed to be displaced: ')
    count = (proportion/100) * dimension;
    round (count);
     
    % Creation of the nodes displacement
    while counter < count 
       nodeselect = floor ((rand(1)+(rand(1)/1000)) * dimension);
     
       if nodeselect >= 1
       	if zeromat(nodeselect,3) == 0
    			value = nodes(nodeselect,3);
    			randomnum = rand(1);
    			% dist = rand(1) * dt;
     
    			if randomnum >= 0.5
    				nodes(nodeselect,3) = value + dt;
    			else 
    				nodes(nodeselect,3) = value - dt;
    			end
     
    			zeromat(nodeselect,3) = 1;
       		counter = counter + 1;
     
    		elseif zeromat(nodeselect,3) == 1
    		end
    	end
    end   
     
    % Write output file : results.txt
     
    xlswrite('PerfectpanelResults.xlsx',nodes)
    Ce code fonctionne parfaitement pour des matrices inférieurs à 5000 lignes. ou pour des matrices supérieurs à 5000 lignes à conditions de modifier qu'un faible pourcentage de ces lignes.

    lorsque j'utilise une matrice de plus de 5000 lignes voici le message d'erreur que j'obtiens:

    ??? Index exceeds matrix dimensions.
    
    Error in ==> Imperfections at 30
       	if zeromat(nodeselect,3) == 0
    
    Je pense qu'il doit y avoir un dépassement quelque part, mais je n'arrive pas à comprendre où ni pourquoi...

    Est ce que quelqu'un aurait déjà été confronté à ce genre de problème ?

    Merci d'avance

  2. #2
    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
    matlab gère très bien les matrices de plus de 5000 lignes (heureusement!)
    met un point d'arrêt à la ligne qui génère une erreur et regarde ta matrice en debug, elle a peut être pas la tête voulue

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nodeselect = floor ((rand(1)+(rand(1)/1000)) * dimension);
    Prenons les cas extrêmes du retour de la fonction rand :
    1. rand(1) => 1
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      nodeselect = floor ( 1.001 * dimension)
      Donc dès que dimension>1000, on a nodeselect > dimension, d’où ton erreur de dépassement.
    2. rand(1) => 0
      Indice non valide.

    Formule à changer donc

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2012
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup, problème résolu en transformant la formule de base:

    nodeselect = floor ((rand(1)+(rand(1)/1000)) * dimension);
    en

    nodeselect = floor ((rand(1)+(rand(1)/100000)) * dimension);
    le problème est que je retrouverai mon problème pour une nouvelle matrice encore plus grande... y aurait-il un moyen d'automatiser le processus ?

  5. #5
    Invité
    Invité(e)

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

Discussions similaires

  1. [Débutant] problème de dimensions avec une matrice
    Par alexov dans le forum MATLAB
    Réponses: 3
    Dernier message: 08/06/2011, 17h38
  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. Problème de dimensions - Matrice de string
    Par OmycRon dans le forum MATLAB
    Réponses: 4
    Dernier message: 04/06/2008, 16h01
  4. Réponses: 2
    Dernier message: 24/01/2008, 16h08
  5. Matrice et boucle: problème de dimension
    Par lilyla dans le forum MATLAB
    Réponses: 6
    Dernier message: 21/12/2007, 11h30

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