1 votos

Función con fórmula simple que se asemeja a una curva cúbica de Bezier

Necesito una función que pueda evaluar en valores arbitrarios de x. Quiero controlar la forma de esa función mediante dos puntos finales y dos direcciones. Un polinomio cúbico simple se ajusta a ese requisito, pero es significativamente más "rígido" que una curva de Bezier cúbica en 2D.

Una curva de Bezier cúbica en 2D es una curva paramétrica descrita por dos polinomios cúbicos: $$x(t) = X_0*(1-t)^3 + X_1*3t(1-t)^2 + X_2*3t^2(1-t) + X_3*t^3$$ $$y(t) = Y_0*(1-t)^3 + Y_1*3t(1-t)^2 + Y_2*3t^2(1-t) + Y_3*t^3$$

Si $X_0 \le X_1 \le X_2 \le X_3$ (y no $X_0 = X_1 = X_2$ o $X_1 = X_2 = X_3$) entonces la curva es una función $y(x)$.

Sin embargo, la fórmula simbólica para $y(x)$ es grande y difícil de usar debido a que $t(x)$ es una solución a una ecuación cúbica.

Quiero encontrar una función con una representación simple de modo que su gráfico sea similar al de la curva de Bezier cúbica en 2D. La función debe estar principalmente parametrizada por dos puntos finales ($X_0$, $Y_0$, $X_3$, $Y_3$) y dos "direcciones" ($X_1 - X_0$, $Y_1 - Y_0$, $X_3 - X_2$, $Y_3 - Y_2$). Está bien tener algún parámetro adicional si es necesario.

Algunas propiedades de Bezier que me gustan:

  • "Monotonía" - No introduce tantos mínimos locales adicionales como las aproximaciones de Fourier o polinomios de alto orden
  • El rango de valores de Y entre los puntos finales se puede acotar fácilmente: $min(Y_i) \le min(y(x)) \le max(y(x)) \le max(Y_i)$
  • Las derivadas infinitas son posibles en los puntos finales

Caso de uso: Quiero usar una función parametrizada $f(x)$ para aproximar algunas regiones de otras funciones ($tanh$, $exp(x)$, $log(x)$, $max(0, exp(x))$, $1/x$, $max(0, x)$, etc) con una transformación continua entre ellas. Esto es necesario para representar funciones de activación de redes neuronales entrenables.

2voto

bubba Puntos 16773

Lo que estás preguntando es solo una aproximación clásica de funciones de valores reales. Hay décadas de investigación dedicadas a este problema. Puedes comenzar aprendiendo aquí.

Para el software que hace esto por ti, una buena opción es el sistema Chebfun. Hace un muy buen trabajo aproximando prácticamente cualquier función continua utilizando funciones polinómicas o racionales.

Para aproximar funciones especiales como las que mencionaste, la gente a menudo utiliza los algoritmos CORDIC.

0voto

Gribouillis Puntos 476

En un respuesta anterior escribí sobre una transición suave entre funciones lineales que podrías usar https://math.stackexchange.com/q/2496273. Es simplemente un polinomio cúbico.

Dicho esto, las curvas de Bézier tienen la propiedad de que son estables respecto a transformaciones afines, lo que significa que la transformada de una curva de Bézier es la curva de Bézier de las transformadas de los puntos de control. Esta propiedad probablemente no esté disponible para curvas "más simples".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X