Estoy buscando una rutina de ajuste de curva no lineal (probablemente más probable que se encuentre en R o Python, pero estoy abierto a otros idiomas) que tomaría datos x, y adaptarse a una curva.Encontrar una curva para hacer coincidir los datos
Debería ser capaz de especificar como una cadena el tipo de expresión que quiero encajar.
Ejemplos:
"A+B*x+C*x*x"
"(A+B*x+C*x*x)/(D*x+E*x*x)"
"sin(A+B*x)*exp(C+D*x)+E+F*x"
Lo que iba a salir de esto es, al menos, los valores de las constantes (A, B, C, etc.) y es de esperar las estadísticas sobre la idoneidad del partido.
Existen programas comerciales para hacer esto, pero esperaba poder encontrar algo tan común como ajustarse a una expresión deseada en una biblioteca de idiomas hoy en día. Sospecho que la optimización de SciPy podría hacer esto, pero no veo que me permita definir una ecuación. Del mismo modo, no puedo encontrar exactamente lo que quiero en R.
¿Es lo que estoy buscando por ahí, o tengo que hacer el mío? Odio hacerlo si está allí y solo tengo problemas para encontrarlo.
Editar: Quiero hacer esto para tener un poco más de control sobre el proceso que el que obtengo de LAB Fit. La UI de ajuste de LAB es espantosa. También me gustaría poder dividir el rango en múltiples piezas y tener diferentes curvas para representar las diferentes piezas de la gama. Al final, el resultado tiene que ser capaz (en velocidad) de vencer a una LUT con interpolación lineal o no estoy interesado.
En mi conjunto actual de problemas, tengo funciones trigonométricas o exp() y necesito ejecutarlas 352,800 veces por segundo en tiempo real (y usar solo una fracción de la CPU). Así que trazado la curva y uso los datos para conducir al instalador de curvas a obtener aproximaciones menos costosas. En los viejos tiempos, los LUT casi siempre eran la solución, pero hoy en día omitir las búsquedas de memoria y hacer una aproximación a veces es más rápido.
¿Se da cuenta de que esto es realmente una mala idea, estadísticamente hablando? Si solo desea un ajuste flexible a sus datos, utilice un modelo flexible como loess, splines o modelos aditivos generalizados. – hadley
Incluso dividir el rango en rangos más pequeños es un costo con el que debo tener cuidado. Tengo acceso a todo tipo de interpoladores geniales para datos de audio, pero generalmente son demasiado intensivos en computación para mí. Generalmente, una vez que tengo que comenzar a romper el rango en pedazos, estoy mejor con un LUT. Las aproximaciones de las curvas siguen siendo bastante útiles en las aplicaciones DSP. – Nosredna