Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425

    [Java] ottenere numero con interpolazione di valori

    ciao a tutti, devo fare un programma che crea la dieta per raggiungere il peso ideale di una persona.
    Sono "algoritmi" molto semplici con qualche espressione banalissima, ma ho riscontrato cmq un problema dovuto ad una mia carenza matematica.

    Ho una lista di valori corrispondenti:

    codice:
    0.7 -> 28 cal/kg p.i.
     
    0.8 -> 25.75 cal/kg p.i.
     
    0.9 -> 23.50 cal/kg p.i.
     
    1 -> 21.25 cal/kg p.i.
     
    1.1 -> 19 cal/kg p.i.
     
    1.2 -> 16.75 cal/kg p.i.
     
    1.3 -> 14.5 cal/kg p.i.
    
    1.4 -> 12.25 cal/kg p.i.
    
    1.5 -> 10 cal/kg p.i.
    i dati li ho inizialmente inseriti in una Hashtable, in modo che se ottengo 1.1, di ritorno avrò 19.
    Però se ottengo numeri diversi da quelli a sinistra come 0.87, mi dicono che il valore corrispondente è 24.175 e che si ricava per interpolazione dei valori conosciuti.

    Ho fatto una ricerca, ma mi vengono fuori tipi diversi di interpolazioni e un sacco di teoremi che al momento non ho studiato.

    Qualcuno potrebbe riportarmi un metodo in java che risolva questo problema?

    grazie
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    o semplicemente spiegarmi come funziona dal punto di vista matematico e poi provo a implementare

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Originariamente inviato da netarrow
    o semplicemente spiegarmi come funziona dal punto di vista matematico e poi provo a implementare

    Io ho fatto qualcosa sull'interpolazione per un esame all'università (quindi non sono certo un

    esperto in materia).Sostanzialmente da quello che ricordo l'interpolazione è una tecnica che

    consente,data una funzione nota solo mediante una sua tabulazione (cioè di cui non conosci

    l'espressione algebrica),di ricavare un'approssimazione polinomiale della funzione stessa in modo

    da poterne calcolare i valori anche in punti diversi da quelli già noti con la

    tabulazione.Ovviamente trattandosi di un'approsimazione c'è sempre un margine di errore che

    generalmente (è anche intuitivo) diminuisce al crescere dei punti noti che hai nella tabulazione.
    Nel tuo caso in altre parole tu hai una tabulazione della funzione cioè una serie di punti

    appartenenti alla curva che descrive l'andamento del tuo fenomeno,chiamiamoli coppie (x,y),quello

    che vorresti è una legge che ti permetta data una x diversa da quelle dei punti che già hai di

    ricavare la y corrispondente.se avessi l'espressione della funzione y= f(x) saresti

    apposto,purtroppo non è così quindi ti devi "arrangiare" cercando di "intuire" il percorso che

    al tua funzione fa nei punti non noti basandoti sui punti che invece ti sono noti (quelli della

    tabulazione).Quello che puoi ottenere è un'approssimazione mediante una funzione "più semplice" è

    soprattutto di cui è nota l'espressione algebrica che può essere un polinomio (inrepolazione

    polinomiale),una somma di seni e coseni costruita in un certo modo (interpolazione

    trigonometrica) una concatenazione di polinomi (interpolazione mediante splines) e varie altre.
    Noi queste cose le facevamo su Matlab,il problema di farlo da un linguaggio di programmazione non

    l'abbiamo affrontato comunque di sicuro troverai qualche libreria che lo fa,precisamente con

    matlab c'erano dei comandi che prendevano in input ad esempio due vettori della stessa dimensione

    (ogni coppia di posizioni nei ripsettivi vettori era un punto della tabulazione) e restituivano

    un vettore di coefficienti dl polinomio interpolante.abbiamo anche scritto qualche piccolo

    algoritmo usando il linguaggio di Matlab ma non credo che ti possa servire (a parte che non li

    trovo più).Questo è quanto sero di esserti stato utile,per il resto cerca cerca cerca.Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ora cerco qualcosa... e io che pensavo fosse un problemino risolvibile con una proporzione

    ora almeno ho capito in cosa consiste, grazie.

    Solo una cosa vorrei capire, avendo a disposizione _solo_ la tabulazione sopraindicata(e ci agiungiamo anche 0.87 -> 24.175 per ridurre il margine d'errore se non ho capito male) e nussuna funzione, quale tipo di interpolazione da te citata o altra farebbe al caso mio?

    interpolazione polinomiale
    interpolazione trigonometrica
    interpolazione mediante splines
    o altro

    giusto per ridurre il campo di ricerca

    grazie
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Originariamente inviato da netarrow
    ora cerco qualcosa... e io che pensavo fosse un problemino risolvibile con una proporzione

    ora almeno ho capito in cosa consiste, grazie.

    Solo una cosa vorrei capire, avendo a disposizione _solo_ la tabulazione sopraindicata(e ci agiungiamo anche 0.87 -> 24.175 per ridurre il margine d'errore se non ho capito male) e nussuna funzione, quale tipo di interpolazione da te citata o altra farebbe al caso mio?

    interpolazione polinomiale
    interpolazione trigonometrica
    interpolazione mediante splines
    o altro

    giusto per ridurre il campo di ricerca

    grazie
    Te l'ho deto non sono un esperto però credo che la polinomiale possa tranquillamente fare al caso tuo.In particolare potrai ottenere un polinomio di gado non più alto del numero di punti di tabulazione se non sbaglio e aumentando il numero di tali punti otterrai una approssimazione sempre migliore.Per intenderci è un po come quando tu hai un poligono di n lati inscritto in una circonferenza,tanto più grande n tanto meglio il poligono approssima la circonferenza.Non so se in analisi hai mai studiato le approssimzioni di Taylor e mcLaurin,ebbene la cosa funziona in maniera simile solo che quelle sonoa pprossimazioni locali (nell'intorno di un punto).Ciauz
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ok grazie di tutto

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Ho detto una castroneria,le splines si usano per approssimare una funzione di cui già hai una esperssione algebrica al fine di ottenere una esperssione di tipo polinomiale (algebricamente più trattabile),non per interpolare.Comunque tanto non le devi usare.Anche l'esempio del poligono inscritto nella circonferenza ha più a che fare con le splines.Il resto invece credo sia corretto.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ciao, guarda che dal dato che riporti tu funziona con una semplice retta, roba tipo

    y = mx + q

    con m = -22.5 e q = 43.75

    Se poi hai anche altri valori che non hai riportato qui, allora il discorso potrebbe essere diverso.

    Ciao
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Originariamente inviato da Andrea1979
    ciao, guarda che dal dato che riporti tu funziona con una semplice retta, roba tipo

    y = mx + q

    con m = -22.5 e q = 43.75

    Se poi hai anche altri valori che non hai riportato qui, allora il discorso potrebbe essere diverso.

    Ciao
    Io sinceramente non ho neanche guardato i valori,lui ha chiesto dell'interpolazione ed io di quella ho parlato (metto le mani avanti eh eh..).Comunque se si risolve con una semplice euqazione di una retta tanto meglio,anche se mi sembra strano.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    provare per credere . e ti risparmi pure l'hash table... ti basta fare un metodo.

    PS. non era una critica al tuo metodo rigoroso..., ma perché scomodare regressioni ai minimi quadrati o altre amenità varie, quando la prima cosa da fare è prendere un foglio e vedere dove si dispongono i punti?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.