Newsgroup: it.comp.java
Titolo: Re: interpolazione

 a disposizione?(cioè x1[i], x2[i], y[i])
ci sono due versioni per ogni algoritmo, la prima ti da i coefficienti
del polinomio interpolante (credo).
Ad esempio la:
public static double[] divDif(double[] x, double[] y)
ritorna un array con i coefficienti (alle differenze divise) del
polinomio interpolante.
in entrata vuole due array x[] e y[] con dentro rispettivamente le x e
y dei punti da interpolare.
Poi c'e' anche la versione:
public static final Function splineDegreeOne(final double[] t,final
double[] x)
che ritorna direttamente la funzione interpolante (un fz lineare in
questo caso), ma per fare questo hai bisogno di istanziare un oggetto
Function che e' in un altro file (bbmath.functions.Function credo).
Poi cosa ci fai con l'oggetto Function sono cavoli tuoi :)
Guarda un po' qua:
http://home.hia.no/~byrgeb/bb/classes/bbmath/functions/Function.html
.
per il codice
http://home.hia.no/~byrgeb/bb/doc/bbmath/functions/Function.html
 per la
doc.
Per gli altri metodi (horner, spline varie,ecc.) e' lo stesso.
I commenti prima di ogni funzione ti dicono cosa vuole in entrata e
cosa ritorna (ovviamente devi sapere un pochino di inglese e
soprattutto cosa sono e come funzionano i vari metodi di interpolazione
per sapere esattamente cosa vuole la fz).
Ciao Jack

 ttp://
home.hia.no/~byrgeb/bb/classes/bbmath/numerical/interpolation/Interpolation.html
Ho dato un'occhiata rapida, ma non sono esattamente pratico di analisi 
numerica. Cosi' a naso direi che ti puo' tornare utile l'interpolazione 
lineare, quindi userei il metodo:
public static final Function splineDegreeOne(final double[] t,final 
double[] x)
dai commenti (non molto precisi, a dire il vero) come parametri si 
passano prima gli argomenti e poi le ordinate; quello che viene fatto 
quindi nel tuo caso sarebbe splineDegreeOne(y,x1)
Questo ti ritorna una Function, che trovi sempre sul quel sito
http://home.hia.no/~byrgeb/bb/classes/bbmath/functions/Function.html
e sempre cosi' a naso, direi che y'[i] li calcoli invocando 
valueAt(x2[i]) di questa funzione che ti ha appena restituito.
Se vuoi vedere la teoria che ci sta dietro, per vedere se fa al caso tuo 
(o se vuoi trovare quale cosa usare), 
http://it.wikipedia.org/wiki/Interpolazione_%28matematica%29
 ti puo' 
aiutare.
Saluti
CarMas

 quindi nel tuo caso sarebbe splineDegreeOne(y,x1)
Mi sono ingarbugliato nella traduzione e interpretazione :D
"argument" dovrebbero essere le ascisse, "ordinate" le ordinate, quindi 
la funzione si chiama splineDegreeOne(x1,y)
Saluti
CarMas

 double[] x)
tutte le funzioni in quella libreria calcolano l'interpolazione a vari
livelli di precisione, l'interpolazione lineare e' la piu' grezza,
dipende quello che ha bisogno. Piu' o meno tutte le funzioni li dentro
vogliono in entrata le stesse cose (array con x e y, e quelle piu'
evolute vogliono anche il valore della derivata agli estremi, in modo
da non creare artifici agli estremi).
Cmq dove non c'e' x e y ma t e x, t e' l'argomento della funzione,
mentre la x e' l'ordinata, cioe' diventa f(t)=x invece di f(x)=y (come
normalmente).
Ciao Jack

 normalmente).
Si' grazie, qui mi ero sbagliato io ^^;
Saluti
CarMas

 devo sicuramente uguagliarlo a qualcosa o no? 
Era come ho scritto dopo la correzione, cioe' l'ordine dei parametri (y,x1).
Se scrivi splineDegreeOne(y,x1) non ti ritorna i coefficienti, ma la 
funzione interpolante. Devi per l'appunto eguagliarlo ad un oggetto di 
tipo Function (vedi i link nei post precedenti), su cui vai a leggere i 
valori.
Saluti
CarMas

 congusione nel richiamare i metodi di altre classi dal main!!!
allora devi creare due array con dentro le tue x e y.
poi devi creare un oggetto Function (Function f = new Function() ).
poi fai:
f  = splineDegreeOne(x,y);
f ora contiene la tua funzione interpolante.
per trovare le nuove y fai:
y_nuova = f.valueAt(x);   //questo se cerchi un valore solo
oppure:
y_array_nuove = f.valuesAt(x_array)  //se cerchi piu' y
cmq visto che da quanto vedo (dimmelo se sbaglio) non sei troppo in
chiaro sul funzionamento generale di java ti consiglio di leggerti un
libro base, tanto per sapere come funzionano le classi, i metodi, i
costruttori, ecc.
Ciao Jack

 f  = splineDegreeOne(x,y);
Sai che credo (non mi ricordo al 100% e non mi va di riaprire il link 
:P) che Function fosse astratta?
Nel caso non la istanzi, la ottieni direttamente dal metodo interpolante:
Function f = splineDegreeOne(y,x1);
Saluti
CarMas

 Function f = splineDegreeOne(y,x1);
a parte che e'  Function f = splineDegreeOne(X,Y);
Ciao Jack

 a parte che e'  Function f = splineDegreeOne(X,Y);
sigh.. hai ragione, mi sono confuso di nuovo ._.
Saluti
CarMas

 (y,x1).
Uffa, ce la posso fare... (x1,y)
ecco (meno male che c'e' Jack a correggermi)
Saluti
CarMas

 sigh.. hai ragione, mi sono confuso di nuovo ._.
:D

 manuale da consigliarmi?
Mah, io ho "Java 2 i fondamenti" di Horstmann e Cornell edito dalla
McGrwHill versione JDK 1.3 (quindi vecchiotto) che ho trovato abb.
buona.
Pero' e' un mattone e costicchia (sui 50 euri). Vedi se riesci a
trovare la versione piu' aggiornata (almeno alla JDK 1.4).
Cmq se sei all'uni ti conviene andare nella biblioteca del tuo
dipartimento o in quello di informatica (meglio) e prenderne in
prestito da li (e al limite farti consigliare da qualcuno che c'e' li).
Oppure chiedere al tuo professore di riferimento se ti puo' consigliare
qualche libro per imparare.
Ciao Jack
PS (per farmi un po' i cavoli tuoi): in cosa ti laurei? tesi su cosa?

 4)  ';' expected dopo il secondo =
vedi 1)
Ciao Jack

 vedi 1)
anche se ho scritto adesso:
 Function f = splineDegreeOne(nuovolambda2 , flux2 );
 double [] nuovoflux2 = new double[numberOfPoints]
 nuovoflux2 []= f.valuesAt(lambda1);
mi compaiono sempre l'errore 3) e 4), mah!

Ma non è che usando la spline di ordine 1 mi va a tracciare una retta?
Se così fosse forse non è meglio sare il metodo di newton o di
horner, visto che gli altri necessitano delle derivate, oppure mi
sbaglio?


-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?