"Since when did a mathematician need any tools but his own head? Pythagoras had done well enough with a stick and a stretch of sand." - R. A. Heinlein
Introduzione
Questo breve articolo propone un generatore di numeri casuali che salva su uno o più file. I numeri casuali vengono generati con la funzione di MATLAB rand [I], che li genera secondo una distribuzione uniforme nell'intervallo (0, 1).
Sono modificabili a piacere:
- Il numero di file.
- La directory di salvataggio dei file, un prefisso per ogni file, l'estensione dei file.
- Quanti numeri casuali per ogni file.
- Un fattore che moltiplichi ogni numero casuale.
- La possibilità di arrotondare ogni numero casuale ad un intero da 64 bit.
- La possibilità di generare numeri casuali tra -1 e 1.
Al termine del programma vengono chiusi tutti i file, pulito il path ed eliminate le variabili d'uso.
Codice
La funzione rand può generare:
- Matrici: rand(3) produce una matrice 3x3 di numeri casuali.
- Vettori riga: rand(1, 4) produce una riga di 4 numeri casuali.
- Vettori colonna: rand(7, 1) produce una colonna di 7 numeri casuali.
Creare direttamente tutta la colonna di numeri casuali riduce drasticamente il tempo di esecuzione.
La riga rng('shuffle') chiama la funzione rng [II] cambiando il seed per il generatore di numeri casuali in base al tempo del sistema.
La funzione fprintf può scrivere su file direttamente dei vettori colonna.
La funzione int64 converte in un intero a 64 bit. Sono disponibili anche int32, int16 e int8.
%% Interfaccia utente
%I numeri casuali saranno in colonna nel file.
%I file vengono sovrascritti ad ogni esecuzione.
quanti_file = 100;
quanti_casuali = 1000;
%Ogni numero casuale verrà moltiplicato per questo numero.
fattore = 1e4;
%Se questo numero è diverso da 1 non arrotonda ad intero.
arrotonda = 1;
%Se questo numero è diverso da 1 non sposta la distribuzione.
sposta = 1;
%I file si chiameranno nome_file_#.estensione e verranno salvati
%nella directory specificata.
nome_file = 'gruppo3';
directory = 'C:\Users\Amministratore\Desktop\Casuale\g4';
estensione = '.txt';
inizio_ciclo_file = 1; passo_ciclo_file = 1;
%% Impostazioni iniziali
format long
vecchio_path = path;
path(path, directory);
directory = [directory '\'];
%% Ciclo di scrittura file
for indice_file = inizio_ciclo_file : passo_ciclo_file : quanti_file
rng('shuffle');
nome_file_aperto = [nome_file '_' num2str(indice_file)];
file = fopen([directory nome_file_aperto estensione], 'wt');
%% Scrittura dei numeri casuali
if sposta == 1
casuale = (2*rand(quanti_casuali, 1) -1)*fattore;
else
casuale = rand(quanti_casuali, 1)*fattore;
end
if arrotonda == 1
casuale = int64(casuale);
fprintf(file, '%d\n', casuale);
else
fprintf(file, '%f\n', casuale);
end
end
%% Ripristina il vecchio path, chiudi e pulisci
path(vecchio_path);
fclose('all');
clear directory vecchio_path nome_file estensione file...
quanti_file nome_file_aperto indice_file...
quanti_casuali casuale arrotonda inizio_ciclo_file...
passo_ciclo_file fattore sposta;
Bibliografia
[I] Documentazione della funzione rand: http://it.mathworks.com/help/matlab/ref/rand.html
[II] Documentazione della funzione rng: http://it.mathworks.com/help/matlab/ref/rng.html?searchHighlight=rng

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)