Interpolazione
Ciao a tutti,
Vi espongo brevemente il mio problema:
Vorrei interpolare 10 valori di una funzione scalare in 10 punti diversi. Ho trovato questi valori su un libro e derivano dal calcolo numerico di complesse equazioni alle derivate parziali di teoria della lubrificazione per cuscinetti.
Non voglio usare polinomi ma un approccio un pò più "fisico". mi spiego meglio:
le complesse equazioni che vi dicevo possono essere risolte facilmente in 2 casi limite, opposti: cuscinetto lunghissimo e cortissimo, i dati della tabella si riferiscono a situazioni intermedie cioè a cuscinetti di media lunghezza, di maggiore interesse pratico. Per questi 2 casi si ha la soluzione esplicita. queste due soluzioni hanno una forma analitica simile quindi ho pensato di generalizzarle, cioè unirle in una funzione che in un certo senso le comprenda entrambe e scegliere i coefficienti in modo da minimizzare un certo scarto.
Vi faccio un esempio: il caso limite 1 da $f_1(x)=3x^2$, caso limite 2 $f_2(x)=2x$. Posso immaginare che la generalizzata sia del tipo $f(x)=ax^b$. Poi trovo a e b in modo da minimizzare la somma dei quadrati degli errori relativi tra $f(x)$ calcolata negli x tabulati e i corrispondenti valori tabulati della f (quelli esatti).
Ho a che fare con funzioni più complesse ma la mia filosofia è esattamente questa, in pratica alla fine si ottengono delle soluzioni che ricordano quelle particolari, quindi hanno più "senso fisico".
Non ho consultato ne' manuali ne' altro, ho fatto tutto questo in modo molto euristico e mi aspetto critiche
Cosa ne pensate? Suggerimenti su qualche altra funzione obiettivo per ottenere i paramentri della soluzione generalizzata?
Vi espongo brevemente il mio problema:
Vorrei interpolare 10 valori di una funzione scalare in 10 punti diversi. Ho trovato questi valori su un libro e derivano dal calcolo numerico di complesse equazioni alle derivate parziali di teoria della lubrificazione per cuscinetti.
Non voglio usare polinomi ma un approccio un pò più "fisico". mi spiego meglio:
le complesse equazioni che vi dicevo possono essere risolte facilmente in 2 casi limite, opposti: cuscinetto lunghissimo e cortissimo, i dati della tabella si riferiscono a situazioni intermedie cioè a cuscinetti di media lunghezza, di maggiore interesse pratico. Per questi 2 casi si ha la soluzione esplicita. queste due soluzioni hanno una forma analitica simile quindi ho pensato di generalizzarle, cioè unirle in una funzione che in un certo senso le comprenda entrambe e scegliere i coefficienti in modo da minimizzare un certo scarto.
Vi faccio un esempio: il caso limite 1 da $f_1(x)=3x^2$, caso limite 2 $f_2(x)=2x$. Posso immaginare che la generalizzata sia del tipo $f(x)=ax^b$. Poi trovo a e b in modo da minimizzare la somma dei quadrati degli errori relativi tra $f(x)$ calcolata negli x tabulati e i corrispondenti valori tabulati della f (quelli esatti).
Ho a che fare con funzioni più complesse ma la mia filosofia è esattamente questa, in pratica alla fine si ottengono delle soluzioni che ricordano quelle particolari, quindi hanno più "senso fisico".
Non ho consultato ne' manuali ne' altro, ho fatto tutto questo in modo molto euristico e mi aspetto critiche
Cosa ne pensate? Suggerimenti su qualche altra funzione obiettivo per ottenere i paramentri della soluzione generalizzata?
Risposte
Così com'è sembra funzionare abbastanza bene. Le curve passano vicine ai dati e danno un errore relativo massimo del 3%, a fronte di un errore relativo sui dati della tabella circa dell'1%.
Ho provato anche a minimizzare la somma dei quadrati degli scarti (come si fa di solito nel celeberrimo "metodo dei minimi quadrati") ma lo ritengo peggiore: mi interessano di più gli scarti relativi. Esempio: se il valore tabulato è $10$ e la mia funzione generalizata in quel punto restituisce $11$ (scarto relativo $(11-10)/10 = 0.1$, ho un interpolazione peggiore di valore tabulato $100$ valore della generalizzata in quel punto $101$ (scarto relativo $0.01$), nonostante lo scarto sia lo stesso e pari a 1
Ho provato anche a minimizzare la somma dei quadrati degli scarti (come si fa di solito nel celeberrimo "metodo dei minimi quadrati") ma lo ritengo peggiore: mi interessano di più gli scarti relativi. Esempio: se il valore tabulato è $10$ e la mia funzione generalizata in quel punto restituisce $11$ (scarto relativo $(11-10)/10 = 0.1$, ho un interpolazione peggiore di valore tabulato $100$ valore della generalizzata in quel punto $101$ (scarto relativo $0.01$), nonostante lo scarto sia lo stesso e pari a 1
Quali sono i tuoi scopi? Anche se non mi è del tutto chiaro che cosa hai cercato di fare, noto i seguenti "problemi" nel tuo metodo:
1. Il calcolo dell'errore non dovrebbe essere fatto sui valori che hai usato per calcolare i parametri della tua funzione, ma su dei nuovi valori. C'è infatti sempre il rischio di overfitting (a meno che ovviamente il numero dei parametri sia molto inferiore al numero dei casi testati, ma è comunque una buona norma evitare di usare gli stessi test).
2. Siccome hai il limite di questa funzione quando la lunghezza tende a zero e quando tende ad infinito, cercherei più che altro di scrivere una funzione che abbia questa proprietà. Non deve necessariamente essere strutturalmente simile a quelle nel limite. Potrebbe anche essere scritta come una somma pesata tra le due funzioni nel limite. La funzione che hai scritto non è infatti necessariamente più corretta di un'altra. L'hai in un certo senso scelta a caso, anche se ti piace pensare diversamente. Sarebbe più sensata fisicamente se fosse basata su una qualche legge fisica o su una qualche approssimazione del problema.
3. Come hai trovato i parametri che minimizzano la tua funzione?
1. Il calcolo dell'errore non dovrebbe essere fatto sui valori che hai usato per calcolare i parametri della tua funzione, ma su dei nuovi valori. C'è infatti sempre il rischio di overfitting (a meno che ovviamente il numero dei parametri sia molto inferiore al numero dei casi testati, ma è comunque una buona norma evitare di usare gli stessi test).
2. Siccome hai il limite di questa funzione quando la lunghezza tende a zero e quando tende ad infinito, cercherei più che altro di scrivere una funzione che abbia questa proprietà. Non deve necessariamente essere strutturalmente simile a quelle nel limite. Potrebbe anche essere scritta come una somma pesata tra le due funzioni nel limite. La funzione che hai scritto non è infatti necessariamente più corretta di un'altra. L'hai in un certo senso scelta a caso, anche se ti piace pensare diversamente. Sarebbe più sensata fisicamente se fosse basata su una qualche legge fisica o su una qualche approssimazione del problema.
3. Come hai trovato i parametri che minimizzano la tua funzione?
innanzi tutto grazie molte della risposta
Mi sembra che sia abbastanza chiaro
Il mio scopo è trovare una funzione il più "simile" ai casi limite e che passi il più vicino possibile ai 10 punti tabulati. Ho 10 punti per ognuna delle 4 lunghezze del cuscinetto.
1. non dispongo di altri punti
2. molto interessante l'idea della somma pesata
3. ho trovato i parametri cercando di minimizzare la somma dei quadrati degli scarti relativi:
ad esempio facciamo il caso di lunghezza L del cuscinetto, chiamo a e b i parametri. Lo scarto relativo è:
$(f(x_i)-g(a,b,x_i))/f(x_i)$
con
$f(x_i)$ il valore tabulato della f in $x_i$
$g(a,b,x_i)$ la funzione "generalizzata" calcolata nello stesso $x_i$ della tabella
Ho usato una routine di minimizzazione installata in mathcad
Mi sembra che sia abbastanza chiaro
Il mio scopo è trovare una funzione il più "simile" ai casi limite e che passi il più vicino possibile ai 10 punti tabulati. Ho 10 punti per ognuna delle 4 lunghezze del cuscinetto.
1. non dispongo di altri punti
2. molto interessante l'idea della somma pesata
3. ho trovato i parametri cercando di minimizzare la somma dei quadrati degli scarti relativi:
ad esempio facciamo il caso di lunghezza L del cuscinetto, chiamo a e b i parametri. Lo scarto relativo è:
$(f(x_i)-g(a,b,x_i))/f(x_i)$
con
$f(x_i)$ il valore tabulato della f in $x_i$
$g(a,b,x_i)$ la funzione "generalizzata" calcolata nello stesso $x_i$ della tabella
Ho usato una routine di minimizzazione installata in mathcad