Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590

    [ALGORITMO] Proporzionare una serie numerica

    salve, ho un insieme di numeri che possono avere range molto variabile:
    A={3,5,7}
    B={350,158,7}
    C={125,7,1258}

    Mi servirebbe un metodo per "proporzionare" l'insieme (specifico che è sempre UN solo insieme) da questo range variabile ad un range fisso del tipo A={10<x<50} (da 10 a 50)
    Per proporzionare ovviamente non intendo un semplice ordinamento, esempio: nello stesso insieme esistono i valori 1,100 e 1000 l'output che mi interessa è 10, 25, 50, non 10,11,12
    Ultima modifica di jimbo0; 06-09-2014 a 17:21

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    ammetto che non mi è molto chiara la domanda. Perché {1, 100, 1000} dovrebbero dare come output {10, 25, 50}? Cioè... 10 e 50 li posso anche capire se sono il tuo minimo e massimo. Però come hai calcolato il 25?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590
    scusami, infatti non ha senso

    è 1,500,1000 che deve dare come output 10, 25, 50.

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ok, questo avrebbe anche senso perché per passare da 1000 a 50 devi dividere per 20. Quindi prendi il 500, lo dividi per 20 e ottieni 25.

    Però se ti trovi un insieme di numeri casuali, tipo {15, 20, 30} cosa fai? Se vuoi portare il 15 a 10 devi dividere per 1.5, però se vuoi che il 30 diventi 50 devi moltiplicare per 1.66. Quindi?

    Il problema, secondo me, è che una cosa come quella che intedi tu non si può fare. Invece si può fare una "normalizzazione", cioè portare uno dei valori a 1 e vedere cosa accade agli altri. Ad esempio, nel caso di {15, 20, 30} otterresti {1, 1.33, 2}.
    Se imponi tu che il valore più piccolo debba corrispondere a 10 e il più grande a 50 allora perdi la proporzionalità...

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590
    ok quindi dal tuo discorso tu dici che non posso imporre min e max, ma solo min?uhm come ho detto può capitare che abbia {1,1000}, in questa maniera il range in output è cmq troppo grande

    anche se come vorrei fare io io non capisco perché dici si perde la proporzionalità, facciamo un esempio banale:
    input={1,2,500,1000}
    output={10, 10.decimali, 25, 50}

    no?
    il problema è che, sarò anche arrugginito, ma non riesco a pensare ad una formula
    Ultima modifica di jimbo0; 06-09-2014 a 23:33

  6. #6
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quote Originariamente inviata da jimbo0 Visualizza il messaggio

    anche se come vorrei fare io io non capisco perché dici si perde la proporzionalità, facciamo un esempio banale:
    input={1,2,500,1000}
    output={10, 10.decimali, 25, 50}

    no?
    Secondo me no: nell'input il terzo valore (500) è pari a 500 volte il primo (1). Nell'output il terzo valore (25) è pari a due volte e mezza il primo (10). Così facendo, secondo me, non hai mantenuto la proporzionalità!
    Comunque non è un errore tuo: semplicemente non credo si possa fare. Cioè non puoi imporre sia il limite superiore che quello inferiore e poi pretendere che tutti i valori all'interno mantengano la proporzionalità sia con uno che con l'altro.

  7. #7
    Dovresti cercare di spiegare esattamente cosa cerchi di ottenere e che tipo di precisione numerica ti aspetti dal risultato. Il calcolatore può manipolare, per costruzione, solamente un insieme finito di valori interi e l'uso di floating point è soggetto a molte precondizioni ed errori di approssimazione, troncamento eccetera.

    Dal punto di vista analitico, fisico e ingegneristico, è letteralmente una bambinata rimappare un qualsiasi intervallo reale arbitrario su un altro intervallo, per la controintuitiva densità dell'insieme numerico R, tale che qualsiasi intervallo reale (es. [0, 1]) contiene già Aleph-1 valori, ossia il medesimo ordine di infinito dell'intera classe numerica a cui appartiene (peraltro superiore all'infinità detta "numerabile" dei numeri interi, relativi e razionali). Il povero Georg Cantor è morto in manicomio per aver appuntato troppo a lungo la sua attenzione su questioni del genere... le "proporzioni" in casi del genere perdono totalmente di significato.

    Dal punto di vista computazionale, invece, la questione assume tutt'altro aspetto, derivante appunto dalla precisione e dalla granularità richieste, nonché dalla classe numerica con la quale ci si attende di operare (moltissimi problemi possono essere brillantemente risolti usando approssimazioni razionali, i.e. frazioni con numeratore e denominatore interi).
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590
    ho allegato quello che ho attualmente (con una libreria grafica js).
    in breve: il nodo radice è un argomento qualsiasi, i figli rappresentano il numero di articoli su quell'argomento raggruppati per anno.
    Ora i nodi hanno tutti uguale dimensioni (diametro). Quel che vorrei è avere nodi con dimensione proporzionale al numero di articoli.
    Quindi la precisione non mi interessa molto, l'importante è il "colpo d'occhio", i nodi devono avere dimensioni diverse. Ma devo controllare i valori dati in output: ad esempio un nodo di dimensione 100 coprirebbe tutto il grafo e come ho detto può capitare di avere 1 articolo in un anno e 100 in un altro anno. I valori "validi" per le dimensioni del nodo sono più o meno compresi in un range 10 e 40
    Immagini allegate Immagini allegate
    Ultima modifica di jimbo0; 07-09-2014 a 21:33

  9. #9
    In tal caso, ti accontenterai delle approssimazioni di default e la formuletta diventa decisamente puerile.

    Allegato 24567

    Ove ovviamente x1, x2 sono gli estremi dell'intervallo di partenza, x3 e x4 quelli dell'intervallo di destinazione, xp il nuovo valore per un qualsiasi xn di partenza, ovviamente intermedio tra 1 e 2.
    Immagini allegate Immagini allegate
    Ultima modifica di M.A.W. 1968; 07-09-2014 a 22:18
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590
    uhm ho seguito pedissequamente la tua formula:
    size=(((numero_articoli-minIN)/maxIN-minIN)*(40)+10)
    minIN=5 (x_1)
    maxIN=72 (x_2)
    minOUT=10 (x_3)
    minOUT=50 (x_4)

    ma questo è il log dei risultati
    codice:
    num articoli nodo 0: 5
    size: -190
    
    num articoli nodo 1: 54 
    size: -162.77777777777777 
    
    num articoli nodo 2: 40 
    size: -170.55555555555557
    
    num articoli nodo 3: 39 
    size: -171.11111111111111 
    
    num articoli nodo 4: 50
    size: -165 
    
    num articoli nodo 5: 53 
    size: -163.33333333333331 
    
    num articoli nodo 6: 60 
    size: -159.44444444444443 
    
    num articoli nodo 7: 33 
    size: -174.44444444444443 
    
    num articoli nodo 8: 33 
    size: -174.44444444444443 
    
    num articoli nodo 9: 72 
    size: -152.77777777777777 
    
    num articoli nodo 10: 61
    size: -158.88888888888889
    edit: facendo a mano i conti escono risultati che sembrano corretti, quindi mi sa che è un problema javascript (qualche intero è trattato da stringa)

    riedit: infatti era quello il problema (oltre alla mancanza di parentesi al denominatore)
    ho esplicitato tutte le parentesi (per forzare le operazioni matematiche ed evitare il concatenamento di variabili che javascript fa con "+") e funziona
    size=parseInt(((((nodes[i].numarticoli-minIN)/(maxIN-minIN))*(maxOUT-minOUT))+minOUT))

    ora dimmi, quella formuletta "puerile" (come dici) l'hai prodotta tu?
    anche se è effettivamente semplice, non è così banale per me produrla da 0..
    Ultima modifica di jimbo0; 09-09-2014 a 20:53

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.