Problemino

di il
1 risposte

Problemino

Salve a tutti.. Sono alle prime armi con Matlab ma purtroppo devo creare una combinazione di 5 elementi disposti in 5 modi diversi. Poichè nel mio ciclo if non vorrei inserire 120 regole, esiste un modo più semplice?
io purtroppo ho problemi con gli indici.. Potreste aiutarmi?
Grazie

1 Risposte

  • Re: Problemino

    Per ottenere tutte le possibili permutazioni di "n" numeri, puoi usare la funzione "perms"
    >> help perms
    perms All possible permutations.
    perms(1:N), or perms(V) where V is a vector of length N, creates a
    matrix with N! rows and N columns containing all possible
    permutations of the N elements.

    This function is only practical for situations where N is less
    than about 10 (for N=11, the output takes over 3 gigabytes).

    Class support for input V:
    float: double, single
    Nel tuo caso, dal momento che 5 elementi generano 120 permutazioni, se ne vuoi "solo" 5:
    
    % Definizione dei valori di input
    valori=[1 2 3 4 5]
    % Generazione delle permutazioni
    a=perms(valori)
    % Identificazione del numero di permutazioni
    [r,~]=size(a)
    % Estraziione delle prime 5 permutazioni
    perm_idx=randperm(r)
    res=a(perm_idx(1:5),:)
    
    dal momento che lla funzione "perms" genera le permutazioni facendo variare di volta in volta un solo elemento, se si prendono i primi 5 elementi della matrice "a" si ottiene una sequenza poco interessante:
    5 4 3 2 1
    5 4 3 1 2
    5 4 2 3 1
    5 4 2 1 3
    5 4 1 2 3
    Per prendere le 5 sequenze in modo casuale si può usare la funzione "randperm":

    L'istruzione "perm_idx=randperm(r)" genera una sequenza casuale di interi da 1 a r (r è il numero di permutazioni totali dei 5 elementi)

    Con l'istruzione "perm_idx(1:5)" si estraggono i primi 5 elementi di questa serri.

    Questo genera, per esempio, la sequenza:
    3 2 5 4 1
    3 5 2 4 1
    5 4 1 2 3
    5 2 1 4 3
    3 1 2 5 4
    Hope this helps.
Devi accedere o registrarti per scrivere nel forum
1 risposte