10 votos

Serie de taylor de un polinomio

Dado un polinomio $y=C_0+C_1 x+C_2 x^2+C_3 x^3 + \ldots$ orden $N$, que fácilmente se puede calcular el polinomio de la reducción de la orden de $M$ tomando sólo la primera $M+1$ términos. Esto es equivalente a hacer una expansión en series de Taylor con $M<=N$$x=0$.

Pero lo que si quiero aprovechar la expansión en series de Taylor alrededor de un punto diferente de $x_c$. En el final, quiero que el polinomio de coeficientes de $y_2=K_0+K_1 x + K_2 x^2 + K_3 x^3 + \ldots$, lo que representa el Taylor expansión de $y$ punto $x_c$ tal que $y(x_c)=y_2(x_c)$, de las cuales la primera $M$ derivados.

Así que, dado que los coeficientes de $C_i$$i=0 \ldots N$, y una ubicación de $x_c$ quiero calcular los coeficientes $K_j$$j=0 \ldots M$.

Ejemplo

Dado $y=C_0+C_1 x+C_2 x^2$ ( $N=2$ ) a continuación, la línea tangente ($M=1$) por $x_c$ es

$$ y_2 = (C_0-C_2 x_c^2) + (C_1+2 C_2 x_c) x $$

o $K_0 = C_0-C_2 x_c^2$, e $K_1 =C_1+2 C_2 x_c$

Debe haber un camino para la construcción de un ( $M+1$ $N+1$ ) de la matriz que transforma los coeficientes $C_i$ a $K_j$. Para el ejemplo anterior de esta matriz es

$$ \begin{bmatrix}K_{0}\\ K_{1}\end{bmatrix}=\begin{bmatrix}1 & 0 & -x_{c}^{2}\\ 0 & 1 & 2\, x_{c}\end{bmatrix}\begin{bmatrix}C_{0}\\ C_{1}\\ C_{2}\end{bmatrix} $$

Ejemplo #2

La reducción de la $5$-ésimo polinomio de orden a un $3$-rd fin de alrededor de $x_c$ es

$$ \begin{bmatrix}K_{0}\\ K_{1}\\ K_{2}\\ K_{3}\end{bmatrix}=\left[\begin{array}{cccc|cc} 1 & & & & -x_{c}^{4} & -4\, x_{c}^{5}\\ & 1 & & & 4\, x_{c}^{3} & 15\, x_{c}^{4}\\ & & 1 & & -6\, x_{c}^{2} & -20\, x_{c}^{3}\\ & & & 1 & 4\, x_{c} & 10\, x_{c}^{2}\end{array}\right]\begin{bmatrix}C_{0}\\ C_{1}\\ C_{2}\\ C_{3}\\ C_{4}\\ C_{5}\end{bmatrix} $$

que es un bloque de la matriz, y no una parte superior de la diagonal de uno como algunas de las respuestas que hemos indicado.

13voto

Lorin Hochstein Puntos 11816

Nota: Reescrito esencialmente de la tierra para arriba.

Lo siento por el ofuscado versión anterior. No me di cuenta al principio que estaba tratando de escribir el resultado final como un polinomio en $x$ en lugar de $(x-x_c)$, y entonces yo estaba tratando de bootstrap que en lo que yo ya había escrito.

Voy a usar la $a$ en lugar de $x_c$, porque es un poco más sencillo de escribir y difícil de confundir con $x$, si no te importa.

La forma más sencilla de pensar sobre lo que están haciendo es que es la composición de los tres transformaciones lineales.

  1. Primero se toma un polinomio se escribe en términos de la base $\beta=[1,x,x^2,\ldots,x^N]$ del espacio de los polinomios de grado en la mayoría de las $N$, y reescribir en términos de la base $\gamma=[1,(x-a),(x-a)^2,\ldots,(x-a)^N]$. Es decir, un cambio de coordenadas.

  2. Luego de tomar el polinomio se escribe en términos de $\gamma$, y lo proyecta hacia el subespacio generado por $[1,(x-a),\ldots,(x-a)^M]$. Es decir, borrar los términos de grado $M+1,\ldots,N$. Llamar a esto $P^N_M$.

  3. Por último, se toma el polinomio resultante, la cual está escrita en términos de la base $\gamma$, y que traducido de nuevo en la base $\beta$; de otro cambio de coordenadas.

Siendo una composición de tres transformaciones lineales, puede ser representado por una matriz, que es el producto de tres matrices las matrices que representan las tres operaciones.

La matriz de $P^N_M$ es la más simple: se trata de un bloque-diagonal de la matriz que tiene el $(M+1)\times (M+1)$ de identidad en el primer bloque, y el $(N-M)\times(N-M)$ cero de la matriz como el segundo bloque.

La matriz para el paso 3 es la inversa de la matriz del paso 1. Para cada número real $r$, tenemos una matriz cuyas columnas representan el binomio de expansión de $(x+r)$: $$B_r = \left(\begin{array}{cccccc} 1 & r & r^2 & r^3 & \cdots & r^N\\\ 0 & 1 & 2r & 3r^2 & \cdots & \binom{N}{1}r^{N-1}\\\ 0 & 0 & 1 & 3r & \cdots & \binom{N}{2}r^{N-2}\\\ 0 & 0 & 0 & 1 & \cdots & \binom{N}{3}r^{N-3}\\\ \vdots & \vdots & \vdots & \ddots & \vdots\\\ 0 & 0 & 0 & 0 & \cdots & \binom{N}{N-1}r\\\ 0 & 0 & 0 & 0 & \cdots & 1 \end{array}\right).$$ Al pasar de la base dada por los poderes de $x$ a la base determinada por los poderes de $x-a$, esto se hace multiplicando por $B_a$. Para ir de la base dada por los poderes de la $(x-a)$ a los poderes de la $x$, el cambio de variable $u=x-a$ muestra que se va formulario poderes de $u$ a los poderes de $u+a = u-(-a)$, para lograr esta multiplicando por $B_{(-a)}$. Por lo tanto, su operación está dada por la matriz $$B_{(-a)}P^N_MB_a.$$ Ahora, este es un producto de tres $(N+1)\times (N+1)$ matrices, así que usted puede preguntarse por qué tengo una $(N+1)\times (N+1)$ matriz y tiene un $(M+1)\times (N+1)$ matriz. La razón es que debido a que la última $N-M$ filas de $P_M$ son todos cero y todas las matrices triangular superior, la última $N-M$ filas de este producto será igualmente cero; son sólo la omisión de ellos.

Por lo tanto, si usted tiene el polinomio $C_0 + C_1x + \cdots +C_Nx^N$, entonces el resultado final es el polinomio $K_0 + K_1x+\cdots +K_Nx^N$, donde $$\left(\begin{array}{c} K_0\\ K_1\\ \vdots\\ K_N\end{array}\right) = B_{(-a)}P_MB_a\left(\begin{array}{c} C_0\\ C_1\\ \vdots\\ C_N\end{array}\right).$$

Para el segundo ejemplo, usted tiene $N=5$$M=3$. Para $N=5$, usted tiene \begin{align*} B_{a} &= \left(\begin{array}{cccccc} 1 & a & a^2 & a^3 & a^4 & a^5\\ 0 & 1 & 2a & 3a^2 & 4a^3 & 5a^4\\ 0 & 0 & 1 & 3a & 6a^2 & 10a^3\\ 0 & 0 & 0 & 1 & 4a & 10a^2\\ 0 & 0 & 0 & 0 & 1 & 5a\\ 0 & 0 & 0 & 0 & 0 & 1 \end{array}\right)\\ P^5_3 &= \left(\begin{array}{cccccc} 1 & 0 & 0 & 0 & 0 & 0\\ 0 & 1 & 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 \end{array}\right)\\ B_{-a} &=\left(\begin{array}{rrrrrr} 1 & -a & a^2 & -a^3 & a^4 & -a^5\\ 0 & 1 & -2a & 3a^2 & -4a^3 & 5a^4\\ 0 & 0 & 1 & -3a & 6a^2 & -10a^3\\ 0 & 0 & 0 & 1 & -4a & 10a^2\\ 0 & 0 & 0 & 0 & 1 & -5a\\ 0 & 0 & 0 & 0 & 0 & 1 \end{array}\right). \end{align*} Si usted multiplicar $B_{-a}P^5_3B_a$ consigue \begin{align*} B_{-a}P^5_3B_a &= \left(\begin{array}{rrrrrr} 1 & -a & a^2 & -a^3 & a^4 & -a^5\\ 0 & 1 & -2a & 3a^2 & -4a^3 & 5a^4\\ 0 & 0 & 1 & -3a & 6a^2 & -10a^3\\ 0 & 0 & 0 & 1 & -4a & 10a^2\\ 0 & 0 & 0 & 0 & 1 & -5a\\ 0 & 0 & 0 & 0 & 0 & 1 \end{array}\right)\left(\begin{array}{cccccc} 1 & a & a^2 & a^3 & a^4 & a^5\\ 0 & 1 & 2a & 3a^2 & 4a^3 & 5a^4\\ 0 & 0 & 1 & 3a & 6a^2 & 10a^3\\ 0 & 0 & 0 & 1 & 4a & 10a^2\\ 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 \end{array}\right)\\ &= \left(\begin{array}{rrrrrr} 1 & 0 & 0 & 0 & -a^4 & -4a^5\\ 0 & 1 & 0 & 0 & 4a^3 & 15a^4\\ 0 & 0 & 1 & 0 & -6a^2 & -20a^3\\ 0 & 0 & 0 & 1 & 4a & 10a^2\\ 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 \end{array}\right) \end{align*} exactamente lo que usted ha excepto para las dos filas de ceros en la parte inferior.

Añadido. Si lo piensas, verás que este proceso siempre va a producir un bloque triangular superior de la matriz, con un $(M+1)\times(M+1)$ de identidad en la parte superior izquierda y un $(N-M)\times(N-M)$ cero de la matriz en la parte inferior derecha; porque $B_{-a}B_a = I$, el fondo de las filas cero en $B_a$ no afectan a los productos en la primera $M+1$ columnas, y ellos son todo lo que importa en los últimos $N-M$ filas. Así que las únicas partes que se necesitan calcular es el bloque en la parte superior derecha. Esto muestra cómo se relaciona con el no de las matrices cuadradas.

Agregó 2. Yo debería haber añadido este tan pronto como usted dijo que eran de programación...

No hay una forma alternativa de calcular esta matriz, que puede ser más rápido cuando se $M$ es mayor que la mitad de $N$. La idea es sólo para que se tenga en cuenta que la matriz de $P^N_M$ puede ser escrito como la diferencia de la matriz identidad con la matriz que tiene el $(N-M)\times(N-M)$ de identidad en la parte inferior derecha y ceros en otros lugares; llamarlo $Q^N_M$; es decir, $$P^N_M = I_{N+1} - Q^N_M = \left(\begin{array}{ccccc} 1 & 0 & \cdots & 0 & 0\\\ 0 & 1 & \cdots & 0 & 0\\\ \vdots & \vdots & \ddots & \vdots & \vdots \\\ 0 & 0 & \cdots & 1 & 0\\\ 0 & 0 & \cdots & 0 & 1 \end{array}\right) - \left(\begin{array}{cccccc} 0 & 0 & \cdots & 0 & 0\\\ 0 & 0 & \cdots & 0 & 0\\\ \vdots & \vdots & \ddots & \vdots & \vdots\\\ 0 & 0 & \cdots & 1 & 0\\\ 0 & 0 & \cdots & 0 & 1 \end{array}\right).$$ Entonces usted tiene que $$B_{-a}P^{N}_MB_a = B_{-a}(I-Q^N_M)B_a = (B_{-a}IB_a) - B_{-a}Q^N_MB_a = I-B_{-a}Q^{N}_MB_a.$$ Si $M$, más de la mitad de $N$, entonces habrá un menor número de operaciones a realizar en $B_{-a}Q^N_MB_a$$B_{-a}P^N_MB_a$, debido a $Q^N_MB_a$ sólo ha $N-M$ cero filas, mientras que $P^N_MB_a$ $M+1$ cero filas. Así que usted puede elegir cual de los dos cálculos a hacer: o bien $B_{-a}P^N_MB_a$ o $I-B_{-a}Q^N_MB_a$, y para $N$ $M$ grandes, con $M$ cerca de $N$ con $Q^N_M$ probablemente será más rápido que el uso de $P^N_M$.

2voto

Andrew Puntos 140

Aquí está una Mathematica rutina que es (más o menos) una manera eficiente de realizar Arturo de la propuesta (supongo que la matriz de coeficientes cofs se arregla con término constante de primera, es decir, $p(x)=\sum\limits_{k=0}^n$cofs[[k + 1]]):

polxpd[cofs_?VectorQ, h_, d_] := Module[{n = Length[cofs] - 1, df},
    df = PadRight[{Last[cofs]}, d + 1];
    Do[
      Do[
        df[[j]] = df[[j - 1]] + h df[[j]];
        , {j, Min[d, n - k + 1] + 1, 2, -1}];
      df[[1]] = cofs[[k]] + h df[[1]];
      , {k, n, 1, -1}];
    Do[
      Do[
        df[[k]] -= h df[[k + 1]];
        , {k, d, j, -1}];
      , {j, d}];
    df]

Vamos a probarlo:

polxpd[{c[0], c[1], c[2]}, h, 1] // FullSimplify
{c[0] - h^2*c[2], c[1] + 2*h*c[2]}

polxpd[c /@ Range[0, 5], h, 3] // FullSimplify
{c[0] - h^4*(c[4] + 4*h*c[5]), c[1] + h^3*(4*c[4] + 15*h*c[5]), 
 c[2] - 2*h^2*(3*c[4] + 10*h*c[5]), c[3] + 2*h*(2*c[4] + 5*h*c[5])}

Ahora, Arturo dio lineales algebraicas interpretación de conversión; voy a mirar en esto de los algoritmos de punto de vista:

Véase por ejemplo este (modificado) fragmento de código:

n = Length[cofs] - 1;
df = {Last[cofs]};
Do[
  df[[1]] = cofs[[k]] + x df[[1]]
  , {k, n, 1, -1}];

Esto no es más que el esquema de Horner (alias "división sintética") para evaluar el polinomio en x. Lo que no es tan conocido es que el esquema de Horner puede ser secuestrado por lo que se calcula derivados así como el polinomio de valores. Podemos "diferenciar" el fragmento de código anterior como tal (es decir, la diferenciación automática):

n = Length[cofs] - 1;
df = {Last[cofs], 0};
Do[
  df[[2]] = df[[1]] + x df[[2]]
  df[[1]] = cofs[[k]] + x df[[1]];
  , {k, n, 1, -1}];

donde la regla es $\frac{\mathrm d}{\mathrm dx}$`df[[j]]`$=$df[[j+1]]. "Diferenciar" la línea df = {Last[cofs]} (el líder coeficiente del polinomio) requiere anexar un 0 (la derivada de una constante es $0$); "diferenciar" la evaluación de la línea de df[[1]] = cofs[[k]] + x df[[1]] da df[[2]] = df[[1]] + x df[[2]] (uso de la regla del producto, y el hecho de que $\frac{\mathrm d}{\mathrm dx}$`cofs[[k]]`$=0$). Continuando inductivamente (y la sustitución de la x con h), se obtiene que el primer doble bucle de polxpd[].

En realidad, el contenido de df después de la primera doble bucle son la "escala de derivados"; que es, df[[1]]$=p(h)$, df[[2]]$=p^\prime(h)$, df[[3]]$=\frac{p^{\prime\prime}(h)}{2!}$, ... y así sucesivamente.

Lo que el segundo doble bucle realiza es el "cambio" del polinomio por -h; esto es, de hecho, la división sintética se aplica varias veces a los coeficientes de la salida de la primera doble bucle, como se ha mencionado aquí.

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