Per definire dei numeri random di tipo "integer" puoi usare la
funzione randi.
Inoltre non c'è bisogno di un ciclo for, basta specificare nella chiamata alla funzione il numero di elementi che vuoi generare; nel tuo caso, per generare "n" valori (il primo parametro indica l'intervallo all'interno del quale genere i valori random):
x=randi([1 100],1,n)
y=randi([1 100],1,n)
z=randi([1 100],1,n)
Il ciclo "for" interno opera su tutti i valori dei vettori assegnandoli al vettore di output, questo fa si che vangano sovrascritti fino all'ultima iterazione, questo spiega il problema che incontri.
Per renderti conto dell'errore, dovresti eseguire il codice in modalità debug.
In MatLab, spesso si può evitare di usare cicli for sfruttando le funzionalità di indexing; nel tuo caso (come suggerito nella risposta precedente) una sola istruzione è sufficiente:
w=reshape([x;y;z],3*n,1)'
Se proprio devi usare un ciclo for, uno è sufficiente:
x=randi([1 100],1,n)
y=randi([1 100],1,n)
z=randi([1 100],1,n)
w=[];
for i=1:n
w=[w x(i) y(i) z(i)];
end