[MATLAB] Generare vettore casuale con numeri tra 0 e 10..
Leggendo la simulazione di un esame, sono incappato in questo quesito:
Scrivere un programma che esegua le seguenti operazioni:
1. Genera un vettore v di 10 numeri interi random compresi tra 0 e 10. (Nota: devi usare le funzioni built-in in Matlab) [4 punti]
Per quanto vale, dovrebbe essere abbastanza semplice.. eppure io ci sto pensando tanto! Di modi per architettare ce ne sarebbero, ma come funzione built-in? E' possibile?!
Grazie in anticipo!
Scrivere un programma che esegua le seguenti operazioni:
1. Genera un vettore v di 10 numeri interi random compresi tra 0 e 10. (Nota: devi usare le funzioni built-in in Matlab) [4 punti]
Per quanto vale, dovrebbe essere abbastanza semplice.. eppure io ci sto pensando tanto! Di modi per architettare ce ne sarebbero, ma come funzione built-in? E' possibile?!
Grazie in anticipo!
Risposte
Eppure la soluzione è già presente nel quesito, devi usare le funzioni built-in di Matlab. In particolare, prova a leggerti la pagina di manuale della funzione randi.
Ti ringrazio caramente, apatriarca! Non conoscevo questa funzione, non essendo stata spiegata ai corsi, e di conseguenza non capivo come mai la chiedessero. Conosco "rand", ma mai è stato fatto accenno circa "randi". Grazie tante!
E' possibile implementare randi in funzione di rand. Si tratta principalmente di prendere il risultato di rand e trasformarlo in modo che una volta convertito in interi restituisca il tuo intervallo. Potrebbe essere un utile esercizio.
Certo, è chiaro! A questo a dire il vero avevo pensato anche io..
E' un utile esercizio.. Ma era 0 nel conteggio di quella parte di scritto..
. E, tra le due, preferisco "prendermi" i punticini..
.
Grazie assai!
E' un utile esercizio.. Ma era 0 nel conteggio di quella parte di scritto..


Grazie assai!

Non essendo un esercizio ti fornisco la risposta. rand restituisce valori nell'intervallo \((0,1)\) mentre tu vuoi valori in \(\{0, 1, \dotsc, 10\}\). La soluzione per ottenere quel valore è di moltiplicare il risultato per 11 e poi ottenere dei numeri interi per troncamento. Cioè:
In questo modo si generano infatti numeri nell'intervallo \((0, 11)\), che dopo il troncamento saranno valori interi da \(0\) a \(10\) con probabilità uniforme (in realtà non è esattamente uniforme per via dello zero mancante nel risultato di rand). E' comunque utile conoscere metodi di questo tipo, anche se non lo userai per il compito (anche perché non sono certo che sia sempre esistito non essendoci in Octave - una versione open source di Matlab).
r = fix(rand(1,10) * 11);
In questo modo si generano infatti numeri nell'intervallo \((0, 11)\), che dopo il troncamento saranno valori interi da \(0\) a \(10\) con probabilità uniforme (in realtà non è esattamente uniforme per via dello zero mancante nel risultato di rand). E' comunque utile conoscere metodi di questo tipo, anche se non lo userai per il compito (anche perché non sono certo che sia sempre esistito non essendoci in Octave - una versione open source di Matlab).