2010-05-31 5 views
3
for i=1:POPULATION_SIZE 
    for j=1:NO_PARAMETERS 
     c=dec2bin(parameters(j),NO_BITS_PARAMETER); 
     chromosomes(i) = [chromosomes(i) c]; 
    end 
end 

code ci-dessus est de donner l'erreur suivante:Comment définir un tableau de caractères vide dans matlab?

??? Undefined function or method 'chromosomes' for input arguments of type 'double'.

je besoin d'un tableau vide de personnages nommés chromosomes. J'ai essayé d'ajouter la ligne suivante avant les boucles ci-dessus.

chromosomes(1:POPULATION_SIZE)=''; 

mais cela ne fonctionne pas. Il donne l'erreur

??? Index of element to remove exceeds matrix dimensions.

Répondre

7

Voulez-vous que les chromosomes sont tableau de caractères (lorsque toutes les lignes ont la même taille) ou réseau de cellules (avec la taille variable des éléments ITH)?

Dans le premier cas, vous définissez la variable comme:

chromosomes = char(zeros(POPULATION_SIZE,NO_PARAMETERS*NO_BITS_PATAMETER)); 

ou

chromosomes = repmat(' ',POPULATION_SIZE,NO_PARAMETERS*NO_BITS_PATAMETER); 

Puis, en boucle:

chromosomes(i,(j-1)*NO_BITS_PATAMETER+1:j*NO_BITS_PATAMETER) = c; 

Dans le cas du réseau de cellules:

chromosomes = cell(POPULATION_SIZE, NO_PARAMETERS); % each paramater in separate cell 
for i=1:POPULATION_SIZE 
    for j=1:NO_PARAMETERS 
     c=dec2bin(parameters(j),NO_BITS_PARAMETER); 
     chromosomes{i,j} = c; 
    end 
end 

ou

chromosomes = cell(POPULATION_SIZE,1); % all parameters in a single cell per i 
for i=1:POPULATION_SIZE 
    for j=1:NO_PARAMETERS 
     c=dec2bin(parameters(j),NO_BITS_PARAMETER); 
     chromosomes{i} = [chromosomes{i} c]; 
    end 
end 

EDIT:

En fait, vous pouvez appliquer DEC2BIN à toute la gamme des numéros à la fois. Il semble également que la variable parameters est la même pour chaque ligne. Alors vous pouvez faire:

c = dec2bin(parameters,NO_BITS_PARAMETER); 
chromosomes = reshape(c',1,[]); 
chromosomes = repmat(chromosomes,POPULATION_SIZE,1); 
Questions connexes