Escriba un programa que realice la interpolación polinómica usando números racionales de precisión arbitraria verdadera. La entrada se ve así:
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7 ...
Puede suponer que hay exactamente un espacio en blanco antes y después del =
signo, todos los números son fracciones o enteros. También puede suponer que todas las fracciones en la entrada ya son irreductibles.
No es necesario verificar errores, puede suponer que la entrada es válida y que no x se duplica en f (x).
La salida debe estar en una forma compatible con LaTeX, el código emitido de LaTeX debe producir la misma representación gráfica que la salida dada aquí.
f (x) = 123x ^ 2 + \ frac {45} {2} x + \ frac {7} {4}
La fracción debe reducirse tanto como sea posible, por ejemplo. Algo así \frac{2}{4}
no está permitido. Si el número es entero, no use una fracción.
Reglas especiales:
Tu programa debería ...
- trabajar para polinomios hasta grado 12
- completar en menos de 1 minuto para una entrada razonable
- no use ninguna función que haga todo el cálculo por usted
- salida del polinomio de menor grado posible
Casos de prueba:
Los casos de prueba dados son solo para aclaración. Su programa debe producir el resultado correcto para todas las entradas correctas.
Entrada
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7
Salida
f (x) = - \ frac {4} {105} x ^ 2 + \ frac {26} {105} x + \ frac {16} {35}
Entrada
f (-12) = 13/2 f (5/3) = 3/5 f (13) = -6 f (1/5) = -3/4
Salida
f (x) = - \ frac {2186133} {239455744} x ^ 3 + \ frac {2741731} {149659840} x ^ 2 + \ frac {26720517} {29201920} x - \ frac {279464297} {299319680}
Entrada
f (4/3) = 617/81 f (2) = 20/3 f (-8/3) = 6749/81 f (-5) = 7367/12 f (0) = 23/3
Salida
f (x) = \ frac {1} {2} x ^ 4 - 2x ^ 3 + \ frac {7} {4} x ^ 2 + \ frac {23} {3}
Entrada
f (0) = 5 f (1) = 7 f (2) = 9 f (3) = 11 f (4) = 13
Salida
f (x) = 2x + 5
Entrada
f (1/2) = -1/2 f (-25) = -1/2 f (-54/12) = -1/2
Salida
f (x) = - \ frac {1} {2}
...
) realmente parte de la entrada?-\frac{37745}{14592}x^4 - \frac{853249}{43776}x^3 + \frac{57809}{7296}x^2 + \frac{225205}{2736}x + \frac{23}{3}
. Sospecho que la entrada tenía la intención de ser algo diferente :)Respuestas:
J + sh
J script:
sh script:
Ejecute el script sh:
.
fuente
Perl (569 caracteres)
Explicación detallada:
Comentarios
Ediciones
(630 → 585) Me di cuenta de que puedo hacer la forma escalonada en un bucle en lugar de dos. Agregue explicaciones como comentarios en el código.
(585 → 583) Acabo de descubrir la sintaxis del paquete que me permite usar en
'
lugar de::
.(583 → 573) Algunos microgolfing más
(573 → 569) Expresión regular más corta para analizar la entrada
fuente
TI-Basic (83/84): 109 caracteres
Técnicamente 109 caracteres, TI-Basic cuenta dim (, For (, ->, rref (, [A], y se enumera como "un carácter".
La entrada se formatea en L1 y L2, en pares (x, y) [ex L1 = (1,2,3,4), L2 = (2,3,5,7)].
fuente
Método Lagrange, Python, 199 bytes
Un poco tarde, pero ...
fuente
Solo una versión abreviada del código de Fred Freys. Tenga en cuenta que probablemente se podría omitir pasar D a l, ya que solo puede extraerlo del alcance externo. Como probablemente pueda hacer lo mismo con yo aquí, incluso podríamos afeitarnos una lambda. Lo probaré algún día.
fuente