2010-09-29 8 views
8

Tengo un código de matlab que requiere datos de series de tiempo que se distribuyen uniformemente a tiempo para producir una respuesta. El código del controlador matlab que lee el archivo de datos también ejecuta interp1 (x, y, xi, 'cubic') en los datos después de leer el archivo porque los datos no se distribuyen uniformemente en el tiempo.En Java, ¿existe una implementación para la interpolación de datos de series temporales distribuidas de manera no uniforme?

Ahora tengo que llevar este proceso a Java para agregarlo a algún proceso de producción. La versión de matlab no es anemiable para una gran cantidad de archivos de datos y no se puede usar en producción.

Mi pregunta real es ¿dónde puedo encontrar una biblioteca Java que ya implemente el método 'cúbico' interp1 para usar cuando se leen los datos en el proceso?

Según los documentos de MATLAB, 'cubic' es lo mismo que piecewise cubic hermite interpolating polynomial (pchip) interpolation. 'spline' produce resultados inaceptables. Ya he visto Apache commons-math y JAMA.

+1

Suena como un buen ejercicio de java :-) – aioobe

+1

Estoy de acuerdo, excepto que el objetivo no es una experiencia de aprendizaje para mí. Lo implementaré si es necesario, pero preferiría usar una biblioteca si es posible. –

+0

Esto sería muy útil si tuviera que codificar mi propia solución para un problema relacionado: http://stackoverflow.com/questions/2675929/is-there-a-java-data-structure-that-is-effectively-an -raileylist-with-double-indic Con la respuesta a esta pregunta, puedo agregar una interfaz tipo ArrayList en la parte superior y duplicar la funcionalidad existente con (con suerte) mejor rendimiento y precisión. –

Respuesta

0

¿Has comprobado Java LAPACK? http://www.netlib.org/java/f2j/

+0

Parece que solo el código FORTRAN LAPACK se ejecuta a través de su compilador f2j. ¿Hay un interpolador de PCHIP en LAPACK? –

1

DREJ.

http://www.gregdennis.com/drej/

no lineales de mínimos cuadrados a través de regresión sobre conjuntos de datos. Puede especificar el valor de lamda (bondad de ajuste) y obtener un ajuste más económico a los datos.

Interpolará y extrapolará, pero no extrapolará demasiado;

Si desea un comportamiento de campo lejano extrapolado específico, agregue otro punto en alguna parte.

Utiliza la regresión del núcleo para que pueda obtener diferentes tipos de ajustes con bastante facilidad. Kardi Teknomo tiene una buena página en la regresión del kernel.

Funciona.

+0

¿Podría agregar algunos detalles sobre el tipo de ajuste de curva que puede hacer? ¿Puede extrapolar e interpolar o solo uno de ellos? ¿Hace lineal, cuadrático, cúbico, hermite? –

Cuestiones relacionadas