for i=1:POPULATION_SIZE
    for j=1:NO_PARAMETERS
        c=dec2bin(parameters(j),NO_BITS_PARAMETER);
        chromosomes(i) = [chromosomes(i) c];
    end
end

código anterior se da el siguiente error:

??? Indefinido función o método «cromosomas» para los argumentos de entrada de tipo ‘double’.

Necesito una matriz vacía de caracteres llamado chromosomes.
He intentado añadir la siguiente línea antes de la bucles.

chromosomes(1:POPULATION_SIZE)='';

pero no su trabajo. Da error

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

InformationsquelleAutor claws | 2010-05-31

1 Comentario

  1. 7

    ¿Quieres cromosomas matriz de caracteres (cuando todas las filas tienen el mismo tamaño) o matrices de celdas (con tamaño variable de n elementos)?

    En el primer caso se define la variable como:

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

    o

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

    A continuación, en bucle for:

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

    En el caso de la variedad de células:

    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

    o

    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

    EDITAR:

    Realmente puede aplicar DEC2BIN a toda la matriz de números a la vez. También se ve como variable parameters son los mismos para cada i-ésima fila. Entonces usted puede hacer:

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

Dejar respuesta

Please enter your comment!
Please enter your name here