31 votos

Relación de las B-splines cúbicas con las splines cúbicas

¿Alguien sabe la relación entre las B-splines cúbicas y las splines cúbicas?

0 votos

42voto

bubba Puntos 16773

Una spline cúbica no es más que una cadena de piezas cúbicas unidas de manera que (normalmente) las uniones son suaves. Los valores en los que se producen las uniones se llaman "nudos", y la colección de nudos se llama "secuencia de nudos" o "vector de nudos".

Tomemos la secuencia de nudos para arreglar, por un tiempo. Entonces el conjunto de todas las splines cúbicas (con estos nudos dados) forma un espacio vectorial, y resulta que unas cosas llamadas funciones base de las b-splines forman una base para este espacio vectorial. Si no sabes nada de espacios vectoriales, esto sólo significa que puedes escribir cualquier spline de forma única como una combinación lineal de estas funciones base. Cuando escribes una curva spline como una combinación lineal de funciones base de esta manera, se llama una "b-spline". Por lo tanto, las b-splines no son un nuevo tipo de spline, son simplemente una forma diferente de expresar cualquier spline existente, de la misma manera que "XVI" es una forma diferente de expresar el número dieciséis. Y lo importante es que cualquier El polinomio a trozos (es decir, cualquier spline) puede escribirse como una b-spline.

Las funciones $B_0$ , $B_1$ , $B_2$ , $B_3$ que has descrito son las piezas que se utilizan para formar las funciones base en el caso especial de los splines cúbicos con uniforme nudos. La palabra "uniforme" sólo significa que los nudos están igualmente espaciados, por lo que, normalmente, se toman como enteros... 0,1,2,3,4,... Lo bueno de los nudos uniformes es que todas las funciones base resultantes tienen idéntica forma, por lo que cualquiera de ellas puede obtenerse simplemente trasladando una primaria (moviéndola a la izquierda o a la derecha). Y, como el espaciado de los nudos es tan sencillo, es fácil escribir fórmulas explícitas para estas funciones base uniformes.

Esta imagen muestra las gráficas de sus cuatro funciones: enter image description here

Entonces, aquí, nos centramos en el intervalo $[0,1]$ . Las funciones están etiquetadas $a$ , $b$ , $c$ , $d$ , en lugar de $B_0$ , $B_1$ , $B_2$ , $B_3$ . \begin {align*} a(u) &= \tfrac16 u^3 \\ b(u) &= \tfrac16 \left ( 1 + 3u + 3u^2 - 3u^3 \right ) \\ c(u) &= \tfrac16 \left ( 4 - 6u^2 + 3u^3 \right ) \\ d(u) &= \tfrac16 \left ( 1 - 3u + 3u^2 - u^3 \right ) \end {align*}

enter image description here

Para formar cualquier función base, se desplazan estas piezas y se pegan, como se muestra aquí:

enter image description here

Unos simples cálculos, utilizando la continuidad, muestran que en realidad $h=2/3$ y $k=1/6$ . Esta curva compuesta es $C_2$ . Como he mencionado anteriormente, se puede obtener cualquier otra función base (uniforme) desplazando ésta a la derecha o a la izquierda.

Si los nudos no son uniformes, las funciones de base son mucho más complejas y no se suelen escribir fórmulas cerradas para ellas. En su lugar, se generan recursivamente mediante el algoritmo deBoor-Cox empezando por el grado cero y subiendo a los grados superiores.

Para más información, consulte aquí especialmente en la "unidad 6", o aquí o aquí .

0 votos

Lo que has dicho tiene mucho sentido para mí, pero todavía tengo una pequeña laguna. La función spline cúbica se puede escribir como la combinación lineal de los B_ks: $S_3(x)=\sum_k^N \phi_k B_k(x)$ donde $B_ks$ son las funciones básicas que he descrito antes y $\phi_k$ los puntos de control.

0 votos

Voy a considerar un problema de 1D. Si los puntos de control son conocidos: es decir $x_0=1,x_1=2,x_2=3,x_3=4$ y $\phi_0=0,\phi_1=2,\phi_2=4,\phi=2$ . Cuando usé mi función base terminé con esto $S_3(x)=0 \times (1-x^3)/6+2 \times (3x^3-6x^2+4)/6+4 \times (-3x^3+3x^2+3x_1)+2 \times x^3/6$ . Esperaba que al sustituir x=1, es decir, S(1), me diera $0$ porque el $\phi_0=0$ . En lugar de cero tengo 13/6. Sucede que saber cómo puedo utilizar las funciones de base?

0 votos

Estás usando los nudos 1,2,3,4. Esto significa que estás centrado en el intervalo $[2,3]$ . Pero sus funciones "B" están diseñadas para su uso en el intervalo $[0,1]$ . Hay que desplazarlas hacia la derecha para obtener funciones base para $[2,3]$ . Ver fotos.

10voto

andy.holmes Puntos 518

Las splines como curvas interpoladoras de curvatura mínima

Para las curvas con una curvatura moderada, la segunda derivada es un buen indicador de la curvatura real (inversa del radio de curvatura).

Un spline es el minimizador del problema variacional para interpolar un conjunto dado de puntos minimizando la segunda derivada: $$ y=\mathop{\arg\min}_{u\in H^2([a,b])}\int_a^b \|u''(x)\|_2^2\,dx\qquad\text{ s.t.}\qquad \begin{split} u(x_k)=x_k,\quad k=1,2,...,n\\a\le x_1<x_2<...<x_n\le b \end{split} $$ La solución es

  1. cúbica a trozos en intervalos $[x_i,x_{i+1}]$ ,
  2. lineal en $[a,x_1]$ y $[x_n,b]$ ,
  3. continua hasta la segunda derivada, y
  4. tiene la fórmula general $$ y(x)=a+bx+\sum_{k=1}^n c_k\, (x-x_k)_+^3 $$

B-Splines

La B-spline cúbica (spline base) centrada en $x=0$ es

$$\beta_3(x)=\frac16\left[(x+2)_+^3-4\,(x+1)_+^3+6\,(x)_+^3-4\,(x-1)_+^3+(x-2)_+^3\right]$$

(el gráfico tiene una escala incorrecta, demasiado alta por un factor de 6) cubic B-spline centered at 0

lo que obviamente invalida que los valores de la función en los enteros sean sólo 0 y 1. Pero aún así es una función spline con soporte compacto, mínimo, con nodos en los enteros.

Localmente, cada spline cúbico con nodos enteros puede expresarse como una combinación lineal $\sum_{k=m}^nc_k \beta_3(x-k)$ de B-splines.


Curvas de Bézier

Las curvas de Bezier, a veces llamadas splines de Bezier, tienen la fórmula $$ y(x)=(1-x)^3P_0+3(1-x)^2xC_0+3(1-x)x^2C_1+x^3P_1 $$ para $x\in[0,1]$ .

En el contexto general de las splines, pueden utilizarse para expresar un segmento de una spline. No toda concatenación de dichos segmentos da lugar a un spline, hay que garantizar la continuidad de las derivadas primera y segunda.

La buena propiedad de las curvas de Bézier es que pueden evaluarse como combinaciones convexas de combinaciones convexas de... Si $[A,B]_x=(1-x)A+xB$ entonces $$ y(x)=\Bigl[\bigl[\,[P_0,C_0]_x,[C_0,C_1]_x\,\bigr]_x,\,\bigl[\,[C_0,C_1]_x,[C_1,P_1]_x\,\bigr]_x\Bigr]_x $$


Otras parametrizaciones de segmentos cúbicos

Sus funciones de base, también sobre el intervalo $[0,1]$ , toma los valores $$ \begin{array}{|ccc|ccc|ccc|} B_k(x)&B'_k(x)&B''_k(x)&B_k(0)&B'_k(0)&B''_k(0)&B_k(1)&B'_k(1)&B''_k(1)\\ \hline \tfrac16(1-x)^3&\tfrac12(1-x)^2&(1-x)&\tfrac16&\tfrac12&1&0&0&0\\ \tfrac16(3x^3-6x^2+4)&\tfrac12(3x^2-4x)&(3x-2)&\tfrac23&0&-2&\tfrac16&-\tfrac12&1\\ \tfrac16(-3x^3+3x^2+3x+1)&\tfrac12(-3x^2+2x+1)&(-3x+1)&\tfrac16&\tfrac12&1&\tfrac23&0&-2\\ \tfrac16x^3&\tfrac12x^2&x&0&0&0&\tfrac16&\tfrac12&1 \end{array} $$ que no me parece muy convincente, esperaría muchos más ceros en las filas centrales. ¿Quizás hubo algún error en la transcripción?

En mi opinión, las parametrizaciones útiles son $$ y(x)=(1-x)\,y(0)+x\,y(1)-\tfrac16x(1-x)(2-x)\,y''(0)-\tfrac16x(1-x)(1+x)\,y''(1) $$ y $$ y(x)=(1-x)^2(1+2x)\,y(0)+x^2(3-2x)\,y(1)+x(1-x)^2y'(0)-x^2(1-x)y'(1) $$


Actualización: Según la respuesta de bubbas más arriba, ahora veo que el $B_k$ son las piezas de la spline de base cúbica $β_3(x)$ . Así que para $x\in[0,1]$ , \begin {align} d(x)=B_0(x)&= \beta_3 (x+1)= \tfrac16 \beta_3 (-1-x)= \tfrac16 [(1-x)^3] \\ c(x)=B_1(x)&= \beta_3 (x \quad\ ;\,)= \tfrac16 [(x+2)^3-4(x+1)^3-6x^3]= \tfrac16 [3x^3-6x^2+4] \\ b(x)=B_2(x)&= \beta_3 (x-1)= \tfrac16 [(x+1)^3-4x^3]= \tfrac16 [-3x^3+3x^2+3x+1] \\ a(x)=B_3(x)&= \beta_3 (x-2)= \tfrac16 [x^3] \\ \end {align}

0 votos

Encontré que las funciones base son: $B_0$

0 votos

$B_0$ ou $\beta_0$ suele referirse a las funciones de caja rectangular, ya sea $1\!\!1_{[-1/2,1/2)}$ ou $1\!\!1_{[0,1)}$ . No hay nada cúbico en ellos. ¿O te refieres a la B-spline cúbica centrada en 0?

0 votos

Gracias por su respuesta. ¿Qué quieres decir con los valores de la función (...,0,0,1,0,0,..)? ¿El spline cúbico tiene algún valor de función? Todo spline cúbico se puede expresar como $S_3(u)= \sum_{k=0}^N a_k B_k(u)$ donde $B_k(u)$ ¿son B-splines? Las funciones base de las B-splines que he encontrado son las siguientes: $B_0(u)=(1-u)^3/6$ , $B_1(u)=(3u^£-6u^2+4)/6$ , $B_2(u)=(-3u^3+3u^2+3u+1)/6$ , $B_3(u)=u^3/6$ . Estas funciones de base son estándar, ¿verdad?

0voto

Youjun Hu Puntos 101

Esta cuestión, que se limitaba a la interpolación cúbica, puede generalizarse al grado arbitrario de suavidad. Es decir, ¿cuál es la relación entre las B-splines y las splines?

La diferencia está en la metodología. El método B-spline adopta la perspectiva de la expansión de funciones utilizando funciones base.

Las funciones base utilizadas en B-splnes son con el soporte incorporado para las condiciones de contorno entre nudos. Por lo tanto, no hay que preocuparse por las condiciones de contorno una vez que se han dado los nodos y se han elegido las funciones de base correspondientes.

En comparación, en los splines convencionales, los usuarios sólo utilizan polimoniales a trozos y es responsabilidad del usuario elegir cuidadosamente los coeficientes de los polimoniales para hacer cumplir las condiciones de contorno entre los nudos. Si se quiere cambiar a un grado diferente de polinomios, hay que implementar todos los detalles relacionados con las condiciones de conexión entre nudos.

En resumen, b-spline es un método sistemático de hacer interpolaciones spline, donde se puede cambiar fácilmente a usar cualquier grado de suavidad que se desee.

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