Creazione automatica di vettori/matrici

di il
2 risposte

Creazione automatica di vettori/matrici

Buongiorno,
all'interno di un codice che sto scrivendo mi trovo nella necessità di dover generare un numero di vettori variabile, dipendente dal risultato di un ciclo for precedente.
mi spiego meglio: il ciclo for precedente genera un vettore del tipo

x=[ 2 4 7 9 10]

il cui numero di componenti può variare in base a dei parametri iniziali

A questo punto sarebbe molto comodo poter generare un numero n di matrici mx2 dove:
n è il numero di elementi di x
m è la differenza tra due elementi consecutivi: in questo caso delle matrici A1=2x2 , A2=2x2 , A3=3x2, A4=2X2, A5=1X2

Quello che mi chiedevo è se fosse possibile all'interno di un ciclo for generare delle matrici differenti a ogni iterazione con nominazione differente così in modo da avere al termine delle 5 iterazioni, per esempio, 5 matrici.

Grazie in anticipo per l'attenzione

2 Risposte

  • Re: Creazione automatica di vettori/matrici

    La creazione dinamica di variabili, anche se possibile, è assolutamente sconsigliata.

    https://it.mathworks.com/matlabcentral/answers/16442-why-eval-and-evalin-are-not-recommended
    https://it.mathworks.com/help/matlab/matlab_prog/string-evaluation.html
    https://it.mathworks.com/matlabcentral/answers/325760-does-justifiable-use-of-eval-exist

    Nel domanda hai scritto che

    il cui numero di componenti può variare in base a dei parametri iniziali

    ammesso di riuscire a creare in modo automatico le matrici, come pensi di poterle utilizzare nel prosieguo del codice se non sai neanche quante sono?

    La cosa migliore che tu possa fare è riconsiderare la struttura del codice e trovare una soluzione che non richieda la creazione automatica di variabili.

    Se proprio non ci riesci, puoi provare ad utilizzare una struttura (che consente la definizione automatica del nomi dei suoi campi o un cellarray.

    A titolo di esempio, Il codice che segue, crea la struttura ed il cellarray:
    
    
    clear var*
    % Creazione del vettore di input x"
    while(1)
       x=unique(sort(randi(10,1,5)))
       if(length(x) > 3)
          break
       end
    end
    % Definizione del vettore delle differenze tra gli elementi (il primo elemento è uguale al primo elemento del vettore "x")
    y=[x(1) diff(x)]
    % Creazione della struttura di output: ogni campo contiene una matrice (m x 2), inizializzata a "0"
    for i=1:length(y)
       var.(['mat_' num2str(i)])=zeros(y(i),2);
    end
    % Creazione del cellarray di output: ogni elemto contiene una matrice (m x 2), inizializzata a "0"
    for i=1:length(y)
       var_c{i}=zeros(y(i),2);
    end
    
    
  • Re: Creazione automatica di vettori/matrici

    Grazie mille per la risposta, alla fine sono riuscito a risolvere prendendo un'altra strada.
Devi accedere o registrarti per scrivere nel forum
2 risposte