Newsgroup: it.scienza.fisica
Titolo: Interpolazioni

Ho un problema, che poi devo tradurre in un algoritmo informatico (non
dovrei avere alcun "problema" al riguardo), che è il
seguente:
Ho una serie di equazioni, tutte risolte, del tipo A=K*P
a)    10=5*2
b)    12=5*2.4
c)    19.89=5.1*3.9
d)   50=5*10
e)   79.68=4.8*16.6
f)   111.72=4.9*22.8
e così via
La variabile prima dell'uguale ("A") varia tra 0 e 360 (sono dei
gradi)
La variabile immediatamente dopo l'uguale ("K") varia, di poco,
intorno a 5.
La terza variabile (P) varia tra 1 e 1500 (sono dei pixel di una
fotografia)
Le equazioni sopra riportate (è poi esatto chiamarle "equazioni" ?)
sono in
pratica dei "punti sperimentali" di un esperimento di fisica e, da
bravi
studenti, potrei disegnare il grafico che esprime la legge che lega A
a P.
Da bravi studenti sappiamo che il grafico può passare o meno in questi
punti
e può evitarne qualcuno, anche tutti.  La curva in questione, con
molta,
moltissima approssimazione è una una retta con coefficiente angolare
5.
Solo che io voglio essere preciso e non voglio considerare che il
fenomeno
sia descritto da una retta, bensi da una curva abbastanza "ondulata".
In
ogni caso con il computer non posso disegnare il grafico e poi
effettuare
delle operazioni di interpolazione.
La domanda conclusiva è la seguente:
Ponendo A=61.8  (un valore intermedio fra il 50 e l'80 dell'esempio
soprastante) quanto vale P ?
Lo so anch'io che vale circa 12 ma io devo saperlo con maggiore
precisione.
Allo stesso modo ponendo P=3 vorrei ricavare A (vale circa,
dannazione,
circa 15).
Probabilmente mi sarebbe sufficiente capire se si tratta di un
problema di
risoluzione di equazioni lineari. In tal caso ho già un programma che
effettua questo tipo di calcoli ma .... come già detto ci capisco
poco.
Grato, gratissimo se vorrete aiutarmi vi saluto caramente.
Ugo Bottari
www.lalpinistavirtuale.it

 f)   111.72=4.9*22.8
Si tratta di un sistema lineare sovradimensionato.
Se indichi A e P vettori e k uno scalare, in assenza
di rumore (errori nella misura) avresti che A=kP, in
cui ti basterebbe la prima riga per ricavare K. Le altre
sarebbero sovrabbondanti.
Nel tuo caso però, non è affatto vero che una riga valga
l'altra ed il sistema A=kP, così com'è, non ammette soluzione.
Infatti hai 6 equazioni in un'unica incognita e non è
vero che 5 sono combinazioni lineari di una sesta.
Allora, per far tornare i conti, aggiungiamo un vettore
d'errore E e scriviamo che A=kP+E.
Dati A e P, per ogni k sarà sempre possibile trovare un
vettore E che renda vera l'equazione. Uno tra i possibili
criteri di scelta di k è: scelgo il k che mi minimizzi E,
secondo una norma a piacere.
Se ti va bene una norma euclidea, considera il vettore
A di uno spazio a 6 dimensioni e traccialo su carta come
un comune vettore di uno spazio bidimensionale.
Il vettore P avrà un modulo che è circa 1/5 di A e direzione
diversa da A, formando quindi un certo angolo. kP sta sulla
direzione di P e con k=5 l'estremo di kP sarà non troppo
lontano dall'estremo di A. Tale distanza sarà appunto il
vettore E. Diciamo che il k da scegliere è quello che
mi porta ad avere un vettore E ortogonale a kP perché
in quel caso è minimo il modulo di E e minima la distanza
tra kP ed A. kP ortogonale E -> kP scalare E =0 ->
kP .(A-kP)= 0
kP . A - |P|^2*k^2=0
k=(P . A)/|P|^2
Nel tuo caso viene un k inferiore e 5, ma non ti dico
quanto, perché i calcoli te li fai. :)
--
Il Cammelliere
http://it.geocities.com/ilcammelliere

risoluzione di equazioni lineari.
Questo dipende da te. SE sei convinto per ragioni teoriche
che la legge dietro quei punti sia una retta, allora puoi
trovare la retta che minimizza lo scarto quadratico medio tra
lei stessa e i punti assegnati. Se chiamiamo (x1,y1)
(x2,y2)... gli N punti assegnati nel piano cartesiano, la
retta del tipo y=mx+q che interpola meglio i dati e` data da:
m=(NSxy-SxSy)/(NSxx-SxSx)
q=(SxxSy-SxSxy)/(NSxx-SxSx)
Dove:
Sx=sommatoria per i da 1 a N di xi
Sy=sommatoria per i da 1 a N di yi
Sxx=sommatoria per i da 1 a N di (xi al quadrato)
Sxy=sommatoria per i da 1 a N di (xi per yi)
La retta e` solo un caso particolare. Se sai a priori che
tipo di legge ti aspetti di trovare, puoi usare i dati per
trovarne i parametri ottimali, quelli che minimizzano lo
scarto quadratico medio. Se invece non hai idea di che legge
si tratti, la cosa migliore da fare e` interpolare tra coppie
di punti con curve ad hoc. In questo caso, pero`, penso che
tu debba almeno partire dal presupposto che i punti sono
corretti; intendo dire che otterrai una curva che serpeggia
un po' in modo da passare esattamente per tutti i punti
assegnati. In questi casi di solito si usano le spline: se
cerchi "spline interpolation" dovresti ottenere un po' di
materiale. Il concetto generale e` di decidere a priori un
tipo di curva (es. retta, parabola, cubica) con cui collegare
ogni punto al successivo e poi ricavarne i parametri
imponendo delle restrizioni. Ogni restrizione ti da`
un'equazione di primo grado; quanto hai tante equazioni
quanti sono i parametri di quel tipo di curva devi solo
risolvere il sistema lineare di n equazioni in n incognite
per trovare i parametri della curva. Piu' complessa e` la
curva, piu' parametri ha, piu' restrizioni puoi imporre. Per
esempio una retta ha equazione y=mx+q, quindi ha solo due
parametri e tutto cio` che puoi imporre e` che passi per la
coppia di punti che ti interessa. Una parabola y=ax²+bx+c ha
tre parametri e puoi imporre, per esempio, che oltre a
passare per la coppia di punti scelta abbia anche nel primo
dei due punti la stessa pendenza con cui terminava la curva
precedente, cosi' non hai gli spigoli tipici
dell'interpolazione a segmenti di retta; comunque non credo
che questo tipo di condizione funzioni molto bene, darebbe
luogo a oscillazioni. Se usi una cubica y=ax³+bx²+cx+d hai
ben quattro parametri con cui giocare; imposto il passaggio
per la coppia di punti te ne restano due.
La volta che mi serviva fare questo tipo di interpolazione
non sono riuscito a trovare rapidamente in rete materiale
chiaro sulle spline, cosi' mi sono stufato e ho usato le
cubiche nel seguente modo: se (x1,y1), (x2,y2), (x3,y3) e
(x4,y4) sono quattro punti consecutivi, la curva che
interpola da (x2,y2) a (x3,y3) l'ho ottenuta imponendo il
passaggio per i suddetti punti: f(x2)=y2 f(x3)=y3 (ossia
y2=ax2³+bx2²+cx2+d y3=ax3³+bx3²+cx3+d) e anche imponendo
pendenze agli estremi pari alla pendenza media in quel
tratto:
f'(x2)=(y3-y1)/(x3-x1)
f'(x3)=(y4-y2)/(x4-x2)
dove f'(x) e` ovviamente y'=3ax²+2bx+c.
Per la prima e l'ultima coppia di punti non avevo una
pendenza da imporre al punto piu' esterno, quindi ho usato
una parabola, che risulta definita imponendo una condizione
in meno rispetto alla cubica. Non so se tutta questa
procedura coincida con un qualche tipo noto di spline; forse
si', forse no. Nel mio caso ha funzionato benino.
Per il resto, forse se chiedi su it.scienza.matematica ti
sanno rispondere meglio.
Ciao
Paolo Russo