2011-10-16 10 views
6

Così abbiamo una matrice comeQuali metodi matematici funzionano per le funzioni di interpolazione da 2d a 2d?

12,32 
24,12 
... 

con lunghezza 2xN e un'altra

44,32 
44,19 
... 

con lunghezza 2xN e c'è qualche funzione f (x, y) che restituisce z [1], z [ 2]. Quelle 2 matrici che ci sono state fornite rappresentano coppie di valori noti per x, y e z [1], z [2]. Quali sono le formule di interpolazione che potrebbero aiutare in questo caso?

+0

Sei alla ricerca di qualcosa di simile a un'interpolazione polinomiale per una funzione con 2 variabili? – amit

+0

si. Ma quella funzione dovrebbe restituire 2 variabili ... – Rella

+0

Si potrebbe provare a farlo con numeri complessi. – starblue

risposta

4

Se si risolve il problema per un valore di ritorno, è possibile trovare due funzioni f_1(x,y) e f_2(x,y) mediante l'interpolazione e comporre la propria funzione come f(x, y) = [f_1(x,y), f_2(x,y)]. Scegli qualsiasi metodo per risolvere la funzione di interpolazione adatta al tuo problema.

Per il problema di interpolazione reale in due dimensioni, esistono molti modi per gestirlo. Se semplice è ciò che desideri, puoi procedere con l'interpolazione lineare. Se stai bene con le funzioni a tratti, puoi usare le curve di Bezier o le spline. Oppure, se i dati sono uniformi, potresti ottenere una semplice interpolazione polinomiale (beh, non abbastanza banale in 2D, ma abbastanza semplice).


MODIFICA: ulteriori informazioni e alcuni collegamenti.

Una soluzione a tratti è possibile utilizzando Bilinear interpolation (wikipedia).

Per l'interpolazione polinomiale, se i dati si trovano su una griglia, è possibile utilizzare il seguente algoritmo (non riesco a trovare il riferimento per esso, è dalla memoria).

Se i punti dati sono su una k da l griglia, riscrivere il polinomiale come segue:

f(x,y) = cx_1(x)*y^(k-1) + cx_2(x)*y^(k-2) + ... + cx_k(x) 

Ecco, ogni coefficiente cx_i(x) è anche un polinomio di grado l. Il primo passo è trovare i polinomi k di grado l interpolando ogni riga o colonna della griglia. Quando questo è fatto, si ha l insiemi di coefficienti (o, in altre parole, l polinomi) come punti di interpolazione per ciascun cx_i(x) polinomi come cx_i(x0), cx_i(x1), ..., cx_i(xl) (dando un totale di punti l * k). Ora è possibile determinare questi polinomi usando le costanti sopra indicate come punti di interpolazione, che danno il risultato f(x,y).

Lo stesso metodo è utilizzato per curve o spline di bezier. L'unica differenza è che usi i punti di controllo invece dei coefficienti polinomiali. Per prima cosa ottieni una serie di spline che generano i tuoi punti dati e quindi interpola i punti di controllo di queste curve intermedie per ottenere i punti di controllo della curva di superficie.


Consentitemi di aggiungere un esempio per chiarire l'algoritmo di cui sopra.Diamo i seguenti punti dati:

0,0 => 1 
0,1 => 2 
1,0 => 3 
1,1 => 4 

Partiamo dal montaggio di due polinomi: uno per i punti di dati (0,0) e (0,1), e un altro per (1, 0) e (1, 1):

f_0(x) = x + 1 
f_1(x) = x + 3 

Ora, interpoliamo nell'altra direzione per determinare il coefficients.When leggiamo questi coefficienti polinomiali verticalmente, abbiamo bisogno di due polinomi. Si valuta a 1 sia a 0 che a 1; e un altro che restituisce 1 a 0, e 3 a 1:

cy_1(y) = 1 
cy_2(y) = 2*y + 1 

Se uniamo questi in f(x,y), otteniamo:

f(x,y) = cy_1(y)*x + cy_2(y) 
     = 1*x + (2*y + 1)*1 
     = x + 2*y + 1 
+0

Puoi spiegare [o dare spiegazioni di riferimento] come funzionano i metodi che hai citato per le informazioni bidimensionali? – amit