2011-10-16 11 views
6

Así que tienen una matriz como¿Qué métodos matemáticos funcionan para las funciones de interpolación 2d a 2d?

12,32 
24,12 
... 

con longitud 2xN y otro

44,32 
44,19 
... 

con longitud 2xN y hay una cierta función f (x, y) que devuelve z [1], z [ 2]. Las 2 matrices que se nos dieron representan pares de valores conocidos para x, y y z [1], z [2]. ¿Cuáles son las fórmulas de interpolación que ayudarían en tal caso?

+0

¿Está buscando algo así como una interpolación polinómica de una función con 2 variables? – amit

+0

sí. Pero esa función tendría que devolver 2 variables ... – Rella

+0

Podría tratar de hacerlo con números complejos. – starblue

Respuesta

4

Si resuelve el problema con un valor de retorno, puede encontrar dos funciones f_1(x,y) y f_2(x,y) por interpolación, y componer su función como f(x, y) = [f_1(x,y), f_2(x,y)]. Simplemente elija cualquier método para resolver la función de interpolación adecuada para su problema.

Para el problema de interpolación real en dos dimensiones, hay muchas maneras de manejarlo. Si lo simple es lo que necesita, puede ir con interpolación lineal. Si está bien con las funciones por partes, puede optar por las curvas de bezier o splines. O bien, si los datos son uniformes, podría salirse con la suya con una simple interpolación polinómica (bueno, no del todo trivial cuando está en 2D, pero es bastante fácil).


EDITAR: Más información y algunos enlaces.

Una solución por partes es posible usando Bilinear interpolation (wikipedia).

Para la interpolación polinómica, si sus datos están en una cuadrícula, puede usar el siguiente algoritmo (no puedo encontrar la referencia para él, es de memoria).

Si los puntos de datos están en una cuadrícula k por l, reescribir su polinomio de la siguiente manera:

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

Aquí, cada coeficiente cx_i(x) también es un polinomio de grado l. El primer paso es encontrar polinomios k de grado l interpolando cada fila o columna de la cuadrícula. Cuando se hace esto, usted tiene l conjuntos de coeficientes (o, en otras palabras, l polinomios) como puntos de apoyo para cada uno cx_i(x) polinomios como cx_i(x0), cx_i(x1), ..., cx_i(xl) (dándole un total de puntos de l * k). Ahora puede determinar estos polinomios utilizando las constantes anteriores como puntos de interpolación, que le dan el resultado f(x,y).

El mismo método se utiliza para las curvas de bezier o splines. La única diferencia es que usa puntos de control en lugar de coeficientes polinomiales. Primero obtendrá un conjunto de splines que generarán sus puntos de datos, y luego usted interpolará los puntos de control de estas curvas intermedias para obtener los puntos de control de la curva de superficie.


Permítanme agregar un ejemplo para aclarar el algoritmo anterior.Vamos a tener los siguientes puntos de datos:

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

empezamos por dos polinomios de ajuste: una para los puntos de datos (0,0) y (0,1), y otro para (1, 0) y (1, 1):

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

Ahora, interpolamos en la otra dirección para determinar la coefficients.When leemos estos coeficientes polinómicos verticalmente, necesitamos dos polinomios. Uno evalúa a 1 en ambos 0 y 1; y otro que evalúa a 1 a 0 y 3 a 1:

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

Si combinamos estos en f(x,y), obtenemos:

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

¿Puede explicar [o dar explicaciones de referencia] cómo funcionan los métodos que ha mencionado para información bidimensional? – amit