stringtranslate.com

Spline (matemáticas)

Los nudos simples en 1/3 y 2/3 establecen una spline de tres polinomios cúbicos que se encuentran con continuidad paramétrica C 2 . Los nudos triples en ambos extremos del intervalo aseguran que la curva interpola los puntos finales

En matemáticas , un spline es una función definida por partes mediante polinomios . En problemas de interpolación , a menudo se prefiere la interpolación spline a la interpolación polinómica porque produce resultados similares, incluso cuando se utilizan polinomios de bajo grado , evitando al mismo tiempo el fenómeno de Runge para grados más altos.

En los subcampos de informática del diseño asistido por computadora y los gráficos por computadora , el término spline se refiere con mayor frecuencia a una curva polinómica ( paramétrica ) por partes . Las splines son curvas populares en estos subcampos debido a la simplicidad de su construcción, su facilidad y precisión de evaluación y su capacidad para aproximar formas complejas mediante el ajuste de curvas y el diseño de curvas interactivo.

El término spline proviene de los dispositivos flexibles utilizados por los constructores navales y dibujantes para dibujar formas suaves.

Introducción

El término "spline" se utiliza para referirse a una amplia clase de funciones que se utilizan en aplicaciones que requieren interpolación y/o suavizado de datos. Los datos pueden ser unidimensionales o multidimensionales. Las funciones spline para interpolación normalmente se determinan como minimizadores de medidas adecuadas de rugosidad (por ejemplo, curvatura cuadrática integral) sujetas a las restricciones de interpolación. Los splines de suavizado pueden verse como generalizaciones de los splines de interpolación donde las funciones se determinan para minimizar una combinación ponderada del error de aproximación cuadrático promedio sobre los datos observados y la medida de rugosidad. Para una serie de definiciones significativas de la medida de rugosidad, se encuentra que las funciones spline son de dimensión finita por naturaleza, lo cual es la razón principal de su utilidad en los cálculos y la representación. Durante el resto de esta sección, nos centraremos exclusivamente en splines polinomiales unidimensionales y utilizaremos el término "spline" en este sentido restringido.

Definición

Comenzamos limitando nuestra discusión a polinomios en una variable . En este caso, un spline es una función polinómica por partes . Esta función, llámela S , toma valores de un intervalo [ a , b ] y los asigna al conjunto de números reales ,

S[ a , b ]kdisjuntos ,

En cada una de estas k "piezas" de [ a , b ] , queremos definir un polinomio, llámelo P i .

i[ a , b ]SP i

Los k + 1 puntos ti dados se llaman nudos . El vector t = ( t 0 , …, t k ) se llama vector nudo para el spline. Si los nudos están distribuidos equidistantemente en el intervalo [ a , b ] decimos que el spline es uniforme , en caso contrario decimos que no es uniforme .

Si cada una de las piezas polinomiales P i tiene como máximo un grado n , entonces se dice que el spline es de grado n (o de orden n + 1 ).

Si está en una vecindad de ti , entonces se dice que la spline tiene suavidad (al menos) en ti . Es decir, en t i los dos polinomios P ​​i –1 y P i comparten valores derivados comunes desde la derivada de orden 0 (el valor de la función) hasta la derivada de orden r i (en otras palabras, los dos polinomios adyacentes conectar con pérdida de suavidad de como máximo nr i )

Un vector r = ( r 1 ,…, rk –1 ) tal que la spline tiene suavidad en ti para i = 1,…, k – 1 se llama vector de suavidad para la spline.

Dado un vector de nudo t , un grado n y un vector de suavidad r para t , se puede considerar el conjunto de todos los splines de grado n que tienen un vector de nudo t y un vector de suavidad r . Equipado con la operación de sumar dos funciones (suma puntual) y tomar múltiplos reales de funciones, este conjunto se convierte en un espacio vectorial real. Este espacio spline se denota comúnmente por

En el estudio matemático de los splines polinomiales, la pregunta de qué sucede cuando dos nudos, digamos ti y ti +1 , se acercan entre sí y se vuelven coincidentes, tiene una respuesta fácil . La pieza polinómica P i ( t ) desaparece, y las piezas P i −1 ( t ) y Pi +1 ( t ) se unen con la suma de las pérdidas de suavidad para ti y ti +1 . Eso es,

j yo = norter yomúltiples nudosnextendido .

donde t i se repite j i veces para i = 1,…, k – 1 .

Una curva paramétrica en el intervalo [ a , b ]

curva splineXY

Ejemplos

Supongamos que el intervalo [ a , b ] es [0, 3] y los subintervalos son [0, 1], [1, 2], [2, 3] . Supongamos que las piezas del polinomio deben ser de grado 2, y las piezas de [0, 1] y [1, 2] deben unirse en valor y primera derivada (en t = 1 ), mientras que las piezas de [1, 2] y [ 2, 3] se unen simplemente en valor (en t = 2 ). Esto definiría un tipo de spline S ( t ) para el cual

sería un miembro de ese tipo, y también

Sería un miembro de ese tipo. (Nota: si bien la pieza polinómica 2 t no es cuadrática, el resultado aún se denomina spline cuadrático. Esto demuestra que el grado de una spline es el grado máximo de sus partes polinómicas). El vector de nudo extendido para este tipo de spline sería ser (0, 1, 2, 2, 3) .

El spline más simple tiene grado 0. También se le llama función escalonada . El siguiente spline más simple tiene grado 1. También se le llama spline lineal . Un spline lineal cerrado (es decir, el primer nudo y el último son iguales) en el plano es simplemente un polígono .

Un spline común es el spline cúbico natural . Un spline cúbico tiene grado 3 con continuidad C 2 , es decir, los valores y las derivadas primera y segunda son continuos. Natural significa que las segundas derivadas de los polinomios spline son cero en los puntos finales del intervalo de interpolación.

Por tanto, la gráfica del spline es una línea recta fuera del intervalo, pero aún suave.

Algoritmo para calcular splines cúbicos naturales

Los splines cúbicos tienen la forma

Dado un conjunto de coordenadas

n splines( x ) para= 0,…, n – 1

Estos deben satisfacer:

Definamos un spline cúbico S como una tupla de 5 ( a , b , c , d , x t ) donde a, b, c, d corresponden a coeficientes en la forma mostrada anteriormente y x t es igual a x j .

Algoritmo para calcular Splines cúbicos naturales:
Entrada: conjunto de coordenadas C , con | C | = n + 1
Salida: establece splines que se componen de n 5 tuplas.

  1. Cree una nueva matriz a de tamaño n + 1 y para i = 0,…, n set
  2. Cree nuevas matrices b y d , cada una de tamaño n .
  3. Cree una nueva matriz h de tamaño n y para i = 0,…, n – 1 conjunto
  4. Cree una nueva matriz α de tamaño n y para i = 1,…, n – 1 conjunto
  5. Cree nuevas matrices c, l, μ, z , cada una de tamaño n + 1 .
  6. Colocar
  7. Para i = 1,…, n – 1 establezca lo siguiente:
  8. Colocar
  9. Para j = n – 1, n – 2,…, 0 , establezca lo siguiente:
  10. Crea un nuevo conjunto Splinesy llámalo output_set. Rellénelo con n splines S .
  11. Para i = 0,…, n – 1 establezca lo siguiente:
  12. Producciónoutput_set

Implementación de C++:

#incluir <matriz> plantilla < int n > std :: matriz < std :: matriz < flotante , 5 > , n > natural_cubic_splines_impl (   const std :: matriz < flotante , n + 1 >& x ,      const std :: matriz < flotante , n + 1 >& y )     {std :: matriz < flotante , n + 1 > a ;    para ( int i = 0 ; i <= n ; i ++ )        a [ yo ] = y [ yo ];  std :: matriz < flotante , n > b , d , h ;    para ( int i = 0 ; i <= n - 1 ; i ++ )          h [ yo ] = x [ yo + 1 ] - x [ yo ];      std :: matriz < flotante , n > alfa ;  para ( int i = 1 ; i <= n - 1 ; i ++ )          alfa [ i ] = 3.0f / h [ i ] * ( a [ i + 1 ] -          a [ i ]) - 3,0f / h [ i - 1 ] * ( a [ i ] - a [ i - 1 ]);            std :: matriz < flotante , n + 1 > c , l , mu , z ;       l [ 0 ] = 1 , mu [ 0 ] = z [ 0 ] = 0 ;       para ( int i = 1 ; i <= n - 1 ; i ++ )          {l [ i ] = 2 * ( x [ i + 1 ] - x [ i - 1 ]) - h [ i - 1 ] * mu [ i - 1 ];                  mu [ yo ] = h [ yo ] / l [ yo ];    z [ i ] = ( alfa [ i ] - h [ i - 1 ] * z [ i - 1 ]) / l [ i ];            }l [ n ] = 1 , z [ n ] = c [ n ] = 0 ;       para ( int j = n - 1 ; j > = 0 ; j- )          {c [ j ] = z [ j ] - mu [ j ] * c [ j + 1 ];        b [ j ] = ( a [ j + 1 ] - a [ j ]) / h [ j ] -          ( h [ j ] * ( c [ j + 1 ] + 2 * c [ j ])) / 3.0f ;          d [ j ] = ( c [ j + 1 ] - c [ j ]) / ( 3.0f * h [ j ]);          }std :: matriz < std :: matriz < flotante , 5 > , n > conjunto_salida ;   para ( int i = 0 ; i <= n - 1 ; i ++ )          {conjunto_salida [ yo ][ 0 ] = a [ yo ];  conjunto_salida [ yo ][ 1 ] = b [ yo ];  conjunto_salida [ i ][ 2 ] = c [ i ];  conjunto_salida [ i ][ 3 ] = d [ i ];  conjunto_salida [ i ][ 4 ] = x [ i ];  }devolver conjunto_salida ; }

Notas

Cabría preguntarse qué significado tienen más de n nudos múltiples en un vector de nudos, ya que esto llevaría a continuidades como

tin + 1( n + 1 ) ésimo se pueden eliminarn + 1n + 2n + 3

El tipo spline clásico de grado n utilizado en el análisis numérico tiene continuidad

n − 1spline planon = 3C 2ab

Otro tipo de spline que se usa mucho en gráficos, por ejemplo en programas de dibujo como Adobe Illustrator de Adobe Systems , tiene piezas que son cúbicas pero tiene continuidad solo como máximo.

PostScript

Muchos sistemas de diseño asistido por computadora diseñados para gráficos y animaciones de alta gama utilizan vectores de nudos extendidos, por ejemplo, Autodesk Maya . Los sistemas de diseño asistido por computadora a menudo utilizan un concepto extendido de spline conocido como B-spline racional no uniforme (NURBS).

Si hay disponibles datos muestreados de una función o un objeto físico, la interpolación spline es un método para crear una spline que se aproxima a esos datos.

Expresión general para un spline cúbico de interpolación C 2

La expresión general para el i -ésimo C 2 spline cúbico de interpolación en un punto x con la condición natural se puede encontrar usando la fórmula

dónde

Representaciones y nombres

Para un intervalo dado [ a , b ] y un vector de nudo extendido dado en ese intervalo, los splines de grado n forman un espacio vectorial . Brevemente, esto significa que sumar dos splines cualesquiera de un tipo determinado produce un spline de ese tipo determinado, y multiplicar un spline de un tipo determinado por cualquier constante produce un spline de ese tipo determinado. La dimensión del espacio que contiene todas las splines de un determinado tipo se puede contar a partir del vector de nudo extendido:

Si a un tipo de spline se le imponen condiciones lineales adicionales, entonces el spline resultante se ubicará en un subespacio. El espacio de todos los splines cúbicos naturales, por ejemplo, es un subespacio del espacio de todos los splines cúbicos C 2 .

La literatura sobre splines está repleta de nombres para tipos especiales de splines. Estos nombres se han asociado con:

A menudo se elegía un nombre especial para un tipo de spline que satisfacía dos o más de los elementos principales anteriores. Por ejemplo, el spline de Hermite es un spline que se expresa utilizando polinomios de Hermite para representar cada una de las piezas polinomiales individuales. Estos se utilizan con mayor frecuencia con n = 3 ; es decir, como splines Cubic Hermite . En este grado, se pueden elegir además que sean sólo tangentes-continuos ( C 1 ); lo que implica que todos los nudos interiores son dobles. Se han inventado varios métodos para ajustar dichos splines a puntos de datos determinados; es decir, convertirlos en splines de interpolación, y hacerlo estimando valores tangentes plausibles donde se encuentran cada dos piezas polinómicas (dandonos splines cardinales , splines de Catmull-Rom y splines de Kochanek-Bartels , según el método utilizado).

Para cada una de las representaciones, se deben encontrar algunos medios de evaluación para que los valores del spline puedan producirse bajo demanda. Para aquellas representaciones que expresan cada pieza polinomial individual P i ( t ) en términos de alguna base para los polinomios de grado n , esto es conceptualmente sencillo:

algoritmo de De Casteljaulas curvas de Bézierlos splines de Bézier

Sin embargo, para una representación que define un spline como una combinación lineal de splines básicos, se necesita algo más sofisticado. El algoritmo de De Boor es un método eficaz para evaluar B-splines .

Historia

Antes de que se utilizaran las computadoras, los cálculos numéricos se hacían a mano. Aunque se utilizaron funciones definidas por partes como la función de signo o la función de paso , generalmente se prefirieron los polinomios porque era más fácil trabajar con ellos. Con la llegada de las computadoras, los splines han ganado importancia. Primero se utilizaron como reemplazo de los polinomios en la interpolación y luego como herramienta para construir formas suaves y flexibles en gráficos por computadora.

Se acepta comúnmente que la primera referencia matemática a los splines es el artículo de Schoenberg de 1946 , que es probablemente el primer lugar en el que se utiliza la palabra "spline" en relación con una aproximación polinómica suave y por partes. Sin embargo, las ideas tienen sus raíces en la industria aeronáutica y de construcción naval. En el prólogo de (Bartels et al., 1987), Robin Forrest describe el " lofting ", una técnica utilizada en la industria aeronáutica británica durante la Segunda Guerra Mundial para construir plantillas para aviones pasando finas tiras de madera (llamadas " splines ") a través de puntos. colocado en el suelo de un gran loft de diseño, una técnica tomada del diseño de cascos de barcos. Durante años, la práctica del diseño naval había empleado modelos para diseñar en pequeño. Luego, el diseño exitoso se trazó en papel cuadriculado y los puntos clave del diagrama se volvieron a trazar en papel cuadriculado más grande a tamaño completo. Las finas tiras de madera proporcionaron una interpolación de los puntos clave en curvas suaves. Las tiras se mantendrían en su lugar en puntos discretos (llamados "patos" por Forrest; Schoenberg usó "perros" o "ratas") y entre estos puntos asumirían formas de energía de deformación mínima. Según Forrest, un posible impulso para un modelo matemático para este proceso fue la posible pérdida de los componentes críticos de diseño de un avión completo en caso de que el loft fuera alcanzado por una bomba enemiga. Esto dio lugar al "lofting cónico", que utilizaba secciones cónicas para modelar la posición de la curva entre los patos. El lofting cónico fue reemplazado por lo que llamaríamos splines a principios de la década de 1960, basándose en el trabajo de JC Ferguson en Boeing y (algo más tarde) de MA Sabin en British Aircraft Corporation .

La palabra "spline" era originalmente una palabra del dialecto de East Anglian .

El uso de splines para modelar carrocerías de automóviles parece tener varios comienzos independientes. El crédito se reclama en nombre de De Casteljau en Citroën , Pierre Bézier en Renault y Birkhoff , Garabedian y de Boor en General Motors (véase Birkhoff y de Boor, 1965), todos por trabajos realizados a principios de los años sesenta o finales de los cincuenta. Al menos uno de los artículos de De Casteljau se publicó, aunque no ampliamente, en 1959. El trabajo de De Boor en General Motors resultó en la publicación de varios artículos a principios de la década de 1960, incluidos algunos de los trabajos fundamentales sobre B-splines .

También se estaba trabajando en Pratt & Whitney Aircraft, donde trabajaron dos de los autores de (Ahlberg et al., 1967), el primer tratamiento de splines en un libro, y el David Taylor Model Basin , de Feodor Theilheimer. El trabajo en General Motors se detalla muy bien en (Birkhoff, 1990) y (Young, 1997). Davis (1997) resume parte de este material.

Referencias

enlaces externos

Teoría

Función Excel

Utilidades en línea

Codigo de computadora