Ricavare una funzione non lineare da una serie di punti (x,y) forniti
Forse e' facile o magari no ma proprio non ricordo piu' il procedimento, sono passati tanti anni dai tempi della scuola.
Sto scrivendo un programma e devo trovare una funzione che mi dia il livello di ingrandimento di un particolare del mondo 3d sulla base del valore del FOV (field of view)
In pratica io posso calcolare (manualmente) che tipo di ingrandimento ho quando ho un determinato valore di FOV, per cui posso avere una serie conosciuta di punti (x,y) sul piano, pero' ho bisogno di una formula generale, in modo che ogni volta che si modifica il primo valore (FOV) io possa visualizzare il valore di ingrandimento che viene ottenuto.
x y
FOV INGRANDIMENTO
-----------------------------
1984 25.14
1536 4.14
1152 2.57
704 1.57
320 1.28
128 1.0
Questa qua sopra e' ad esempio una serie di alcuni valori che ho calcolato manualmente.
Se si trattasse di una retta la funzione da trovare sarebbe semplice, costruirei un sistema con le generiche funzioni di una retta passante per due punti, sostituendo in ogni funzione uno dei punti x,y noti.
Ma questa funzione si capisce che non e' una retta, per cui non so neanche come costruire questo sistema.
Da notare che un valore come "1.0'" significa "nessun ingrandimento" mentre "1.57" starebbe per un 57% in piu' rispetto al valore iniziale.
Come ulteriore complicazione c'e' il fatto che i valori di ingrandimento, avendoli calcolati in modo manuale osservando l'immagine finale, potrebbero non essere del tutto precisi.
Per questa ragione non ho la pretesa di trovare una funzione del tutto perfetta che riproduce ognuno di questi valori, ma piuttosto una funzione che perequa l'andamento della crescita nell'ingrandimento in modo che sia coerente con l'andamento del fenomeno.
So che e' un po' atipico il problema esposto in questo modo ma se almeno qualcuno potesse darmi un suggerimento su come impostare il problema gliene sarei grato.
Sto scrivendo un programma e devo trovare una funzione che mi dia il livello di ingrandimento di un particolare del mondo 3d sulla base del valore del FOV (field of view)
In pratica io posso calcolare (manualmente) che tipo di ingrandimento ho quando ho un determinato valore di FOV, per cui posso avere una serie conosciuta di punti (x,y) sul piano, pero' ho bisogno di una formula generale, in modo che ogni volta che si modifica il primo valore (FOV) io possa visualizzare il valore di ingrandimento che viene ottenuto.
x y
FOV INGRANDIMENTO
-----------------------------
1984 25.14
1536 4.14
1152 2.57
704 1.57
320 1.28
128 1.0
Questa qua sopra e' ad esempio una serie di alcuni valori che ho calcolato manualmente.
Se si trattasse di una retta la funzione da trovare sarebbe semplice, costruirei un sistema con le generiche funzioni di una retta passante per due punti, sostituendo in ogni funzione uno dei punti x,y noti.
Ma questa funzione si capisce che non e' una retta, per cui non so neanche come costruire questo sistema.
Da notare che un valore come "1.0'" significa "nessun ingrandimento" mentre "1.57" starebbe per un 57% in piu' rispetto al valore iniziale.
Come ulteriore complicazione c'e' il fatto che i valori di ingrandimento, avendoli calcolati in modo manuale osservando l'immagine finale, potrebbero non essere del tutto precisi.
Per questa ragione non ho la pretesa di trovare una funzione del tutto perfetta che riproduce ognuno di questi valori, ma piuttosto una funzione che perequa l'andamento della crescita nell'ingrandimento in modo che sia coerente con l'andamento del fenomeno.
So che e' un po' atipico il problema esposto in questo modo ma se almeno qualcuno potesse darmi un suggerimento su come impostare il problema gliene sarei grato.

Risposte
Ti ringrazio, e' un tool davvero utile.
Alla fine ho trovato il tipo di funzione che riproduce bene la mia funzione di ingrandimento.
Dato che sono un po' digiuno di lessico algebrico, mi puoi confermare che la formula che viene visualizzata
da questa pagina:
http://www.xuru.org/rt/PowR.asp#CopyPaste
con questi dati (puoi fare il copia e incolla e poi premere [calculate])
1761 7.14
1753 6.85
1728 6.57
Si deve leggere cosi'?!
5.513763488 moltiplicato per 10 elevato alla -13, e poi il risultato cosi' ottenuto, si moltiplica per x elevata alla 4.038477068 ?
Poi una piccola curiosita' ma non vorrei approffittare della tua gentilezza... in quella pagine molte formule hanno una cosa del tipo "moltiplicato 10 elevato " e poi una potenza negativa.
Ricordo male o questo potrebbe essere convertito sotto forma di una qualche estrazione di radice?
Alla fine ho trovato il tipo di funzione che riproduce bene la mia funzione di ingrandimento.
Dato che sono un po' digiuno di lessico algebrico, mi puoi confermare che la formula che viene visualizzata
da questa pagina:
http://www.xuru.org/rt/PowR.asp#CopyPaste
con questi dati (puoi fare il copia e incolla e poi premere [calculate])
1761 7.14
1753 6.85
1728 6.57
Si deve leggere cosi'?!
5.513763488 moltiplicato per 10 elevato alla -13, e poi il risultato cosi' ottenuto, si moltiplica per x elevata alla 4.038477068 ?
Poi una piccola curiosita' ma non vorrei approffittare della tua gentilezza... in quella pagine molte formule hanno una cosa del tipo "moltiplicato 10 elevato " e poi una potenza negativa.
Ricordo male o questo potrebbe essere convertito sotto forma di una qualche estrazione di radice?
Guarda che per esempio questa regressione riproduce molto meglio i tuoi dati
$y = 7.590907485·10^(-4) x^2 - 2.631194893 x + 2286.641947$,
basta che guardi il valore di Residual Sum of Squares (tanto più piccolo è tanto meglio la regressione interpreta i tuoi dati).
Per le potenze con esponente negativo funziona così
$10^-4=1/(10^4)$
La "traduzione" di
"5.513763488 moltiplicato per 10 elevato alla -13, e poi il risultato cosi' ottenuto, si moltiplica per x elevata alla 4.038477068"
è
$5.513763488 * 10 ^ (-13)*x^4.038477068$.
$y = 7.590907485·10^(-4) x^2 - 2.631194893 x + 2286.641947$,
basta che guardi il valore di Residual Sum of Squares (tanto più piccolo è tanto meglio la regressione interpreta i tuoi dati).
Per le potenze con esponente negativo funziona così
$10^-4=1/(10^4)$
La "traduzione" di
"5.513763488 moltiplicato per 10 elevato alla -13, e poi il risultato cosi' ottenuto, si moltiplica per x elevata alla 4.038477068"
è
$5.513763488 * 10 ^ (-13)*x^4.038477068$.
In alternativa si può usare anche Excel, ma non saprei dirti quanto possa essere affidabile per questo tipi di cose.
In pratica, ti scrivi i valori X e Y in due colonne diverse e fai un grafico a dispersione XY a punti. Ottenuto il grafico, selezioni la serie di punti su di esso, clicchi col tasto destro e selezioni Aggiungi linea di tendenza. Ti si aprirà una finestra con due schede: Tipo e Opzioni. Dalla prima puoi scegliere il tipo di regressione (ed eventualmente il grado se selezioni il tipo polinomiale) e dalla seconda puoi spuntare l'opzione Visualizza l'equazione sul grafico per ottenere la funzione.
Ti ripeto, non so quanto possa essere affidabile, ma quelle volte che è servito a me, sono rimasto soddisfatto.
Ciao.
In pratica, ti scrivi i valori X e Y in due colonne diverse e fai un grafico a dispersione XY a punti. Ottenuto il grafico, selezioni la serie di punti su di esso, clicchi col tasto destro e selezioni Aggiungi linea di tendenza. Ti si aprirà una finestra con due schede: Tipo e Opzioni. Dalla prima puoi scegliere il tipo di regressione (ed eventualmente il grado se selezioni il tipo polinomiale) e dalla seconda puoi spuntare l'opzione Visualizza l'equazione sul grafico per ottenere la funzione.
Ti ripeto, non so quanto possa essere affidabile, ma quelle volte che è servito a me, sono rimasto soddisfatto.
Ciao.
"chiaraotta":
Guarda che per esempio questa regressione riproduce molto meglio i tuoi dati
$y = 7.590907485·10^(-4) x^2 - 2.631194893 x + 2286.641947$,
basta che guardi il valore di Residual Sum of Squares (tanto più piccolo è tanto meglio la regressione interpreta i tuoi dati).
Grazie per il suggerimento ma di che categoria fa parte in quel sito?
Perche' ho notato che nel range completo di valori nessuna funziona riusciva a perequare bene i dati, cosi' ho provato a dividere per range di valori applicando funzioni diverse, scegliendo di volta in volta quella che ha i minori scarti.
Se conosco il tipo di regressione usata posso provare con i diversi range per avere anche le altre funzioni.
Per le potenze con esponente negativo funziona così
$10^-4=1/(10^4)$
Ah interessante, allora ricordavo male.

Grazie per l'aiuto
"JoJo_90":
In alternativa si può usare anche Excel, ma non saprei dirti quanto possa essere affidabile per questo tipi di cose.
In pratica, ti scrivi i valori X e Y in due colonne diverse e fai un grafico a dispersione XY a punti. Ottenuto il grafico, selezioni la serie di punti su di esso, clicchi col tasto destro e selezioni Aggiungi linea di tendenza. Ti si aprirà una finestra con due schede: Tipo e Opzioni. Dalla prima puoi scegliere il tipo di regressione (ed eventualmente il grado se selezioni il tipo polinomiale) e dalla seconda puoi spuntare l'opzione Visualizza l'equazione sul grafico per ottenere la funzione.
Wow, bello, non pensavo excel fosse cosi' evoluto.

Grazie provero' anche questo.

Prego
