Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    8

    Distribuzioni

    salve a tutti,
    ho un problema con le distribuzioni,
    sto programmando in c con xcode e devo aggiungere ad una variabile un "ritardo" che deve essere distribuito secondo varie distribuzione: guassiana, triangolare, uniforme.
    volevo sapere se esisteva un comando, in una qualsivoglia libreria, e se si che paramentri e come li devo settare?
    ps sono abbastanza principiante, quindi per favore, per farmi evitare figuracce siate il più chiari possibili, grazie!

  2. #2

    Moderazione

    Come già spiegato qui, il titolo deve contenere il linguaggio di riferimento come tag (e magari essere un po' più preciso)...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    8

    Re: Moderazione

    Originariamente inviato da MItaly
    Come già spiegato qui, il titolo deve contenere il linguaggio di riferimento come tag (e magari essere un po' più preciso)...
    e la prima figuraccia è andata!


  4. #4
    In ogni caso:
    il C ti mette a disposizione un PRNG a distribuzione piatta tramite la funzione rand (e srand per inizializzarlo ad inizio programma); volendo puoi anche implementarti da te il tuo LCG, è estremamente semplice.
    La prima cosa da fare in genere è normalizzare la distribuzione, in modo da limitare i valori ottenuti al range [0, 1]; puoi fare questo con la rand dividendo il risultato per RAND_MAX:
    codice:
    double val=rand()/((double)RAND_MAX);
    val quindi è una random variabile compresa tra 0 e 1 a distribuzione piatta (uniforme).

    A questo punto, devi adattare la tua distribuzione piatta alla distribuzione che ti interessa; per la gaussiana, puoi usare la trasformazione di Box-Muller, per distribuzioni generiche puoi usare il metodo dell'inversione (semplice ed efficiente, ma non applicabile se la CDF non è invertibile in maniera semplice), o il metodo dell'accept-reject (che funziona sempre, ma è piuttosto inefficiente per distribuzioni sensibilmente piccate e/o con "code grasse"). In ogni caso, per la distribuzione triangolare puoi usare facilmente il metodo dell'inversione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    8
    ma in un programma tempo fa ho incontrato una scritta gaussian (0.0, D) dove di era un parametro definito semplicemente D=(double)L/sqrt (3.0)
    ed L era #define
    ho chiesto al ragazzo che lo aveva fatto, e lui mi ha detto che avevo usato una libreria GSL,
    ma con xcode come si scaricano le librerie e come si "istallano"

    abbi pazienza spero che sia uno degli ultimi problemi da risolvere

  6. #6
    Dipende dalla libreria; prima hit per "GSL Xcode": http://www.os-scientific.org/devel/gslxcode/index
    In ogni caso per la gaussiana fai prima ad implementarti da te la tua funzione, si tratta semplicemente di applicare la formuletta dell'articolo che ti ho linkato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    8
    si si infatti è utilissimo, il problema è che devo avere delle distribuzione "rapide" perché magari il capo decide che invece di gaussiana la vuole triangolare o uniforme o geometrica e pensavo si potesse ed esistesse qualcosa per modificarla al volo!
    grazie cmq, utilissimo!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.