Dado un polinomio p(x)
con coeficientes integrales y un término constante de p(0) = 1 or -1
, y un entero no negativo N
, devuelve el N
coeficiente enésimo del seris de potencia (a veces llamado "serie de Taylor") de f(x) = 1/p(x)
desarrollado en x0 = 0
, es decir, el coeficiente del monomio de grado N
.
Las condiciones dadas aseguran que la serie de potencias exista y que sus coeficientes sean enteros.
Detalles
Como siempre, el polinomio puede aceptarse en cualquier formato conveniente, por ejemplo, una lista de coeficientes, por ejemplo, p(x) = x^3-2x+5
podría representarse como [1,0,-2,5]
.
La serie de poderes de una función f
desarrollada en 0
está dada por
y el N
enésimo coeficiente (el coeficiente de x^N
) viene dado por
donde denota la n
enésima derivada def
Ejemplos
El polinomio
p(x) = 1-x
da como resultado la serie geométrica,f(x) = 1 + x + x^2 + ...
por lo que la salida debería ser1
para todosN
.p(x) = (1-x)^2 = x^2 - 2x + 1
da como resultado la derivada de la serie geométricaf(x) = 1 + 2x + 3x^2 + 4x^3 + ...
, por lo que la salida paraN
esN+1
.p(x) = 1 - x - x^2
da como resultado la función generadora de la secuencia de Fibonaccif(x) = 1 + x + 2x^2 + 3x^3 + 5x^4 + 8x^5 + 13x^6 + ...
p(x) = 1 - x^2
da como resultado la función generadora de1,0,1,0,...
ief(x) = 1 + x^2 + x^4 + x^6 + ...
p(x) = (1 - x)^3 = 1 -3x + 3x^2 - x^3
da como resultado la función generadora de los números triangularesf(x) = 1 + 3x + 6x^6 + 10x^3 + 15x^4 + 21x^5 + ...
que significa que elN
enésimo coeficiente es el coeficiente binomial(N+2, N)
p(x) = (x - 3)^2 + (x - 2)^3 = 1 + 6x - 5x^2 + x^3
resultados enf(x) = 1 - 6x + 41x^2 - 277x^3 + 1873x4 - 12664x^5 + 85626x^6 - 57849x^7 + ...
fuente
[1,-1,0,0,0,0,...]
?Respuestas:
Mathematica,
2423 bytesGuardado 1 byte gracias a Greg Martin
Función pura con dos argumentos
#
y#2
. Asume que el polinomio#2
satisfacePolynomialQ[#2,x]
. Por supuesto, hay una función incorporada para esto:fuente
#
es el enteroN
y#2
el polinomio.Matlab,
81 7975 bytesA diferencia de las dos respuestas anteriores, esto no hace uso de cálculos simbólicos. La idea es que puede calcular iterativamente los coeficientes:
Pruébalo en línea!
Explicación
fuente
GeoGebra , 28 bytes
La entrada se toma de las celdas A1 y B1 de la hoja de cálculo de un polinomio y un número entero respectivamente, y cada línea se ingresa por separado en la barra de entrada. La salida es por asignación a la variable
a
.Aquí hay un gif que muestra la ejecución:
Usar builtins es mucho más largo, a 48 bytes:
fuente
Haskell, 44 bytes
Un cálculo directo sin incorporaciones algebraicas. Toma de entrada como una lista infinita de coeficientes de series de potencias, como
p = [1,-2,3,0,0,0,0...]
(es decirp = [1,-2,3] ++ repeat 0
) para1-2*x+x^2
. Llámalo comop%3
, que da-4.0
.La idea es que si p es un polinomio y q = 1 / p es inverso, entonces podemos expresar la igualdad p · q = 1 término por término. El coeficiente de x n en p · q es dada por la convolución de los coeficientes de p y q :
p 0 · q n + p 1 · q n-1 + ... + p n · q 0
Para que p · q = 1 se mantenga, lo anterior debe ser igual a cero para todo n> 0 . Por aquí, podemos expresar q n recursivamente en términos de q 0 , ..., q n-1 y los coeficientes de p .
q n = - 1 / p 0 · (p 1 · q n-1 + ... + p n · q 0 )
Esto es exactamente lo que se calcula en la expresión
sum[p!!i*p%(n-i)|i<-[1..n]]/head p
, conhead p
el coeficiente principal p 0 . El coeficiente inicial q 0 = 1 / p 0 se maneja aritméticamente en la misma expresión usando0^n
como indicador paran==0
.fuente
J, 12 bytes
Utiliza el adverbio
t.
que toma un polinomiop
en forma de verbo en el LHS y un entero no negativok
en el RHS y calcula el coeficientek
th de la serie Taylor dep
atx = 0
. Para obtener la serie de potencia,p
se toma el recíproco de antes de aplicarlo.Pruébalo en línea!
fuente
Arce,
5826 bytesEsta es una función sin nombre que acepta un polinomio
x
y un enteroN
.EDITAR: acabo de notar que hay un incorporado:
fuente
MATL , 19 bytes
Traducción de la gran respuesta de Matlab de @flawr .
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6), 57 bytes
La respuesta del puerto de Haskell de @xnor. Originalmente probé una versión iterativa, pero resultó ser de 98 bytes, sin embargo, será mucho más rápido para N grande, ya que estoy recordando efectivamente las llamadas recursivas:
n+1
se requieren términos, que se guardan en la matrizr
. Inicialmente, son ceros lo que permite reducir toda la matrizr
de una vez, ya que los ceros no afectarán el resultado. El último coeficiente calculado es el resultado final.fuente
PARI / GP,
3127 bytesfuente