Escreva um programa que execute a interpolação polinomial usando números racionais de precisão arbitrária verdadeira. A entrada fica assim:
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7 ...
Você pode assumir que há exatamente um espaço em branco antes e depois do =
sinal, todos os números são frações ou números inteiros. Você também pode assumir que toda a fração da entrada já é irredutível.
Nenhuma verificação de erro é necessária, você pode assumir, que a entrada é válida e nenhum x é dobrado no f (x).
A saída deve estar em um formato compatível com LaTeX, o código LaTeX emitido deve produzir a mesma representação gráfica que a saída fornecida aqui.
f (x) = 123x ^ 2 + \ frac {45} {2} x + \ frac {7} {4}
A fração deve ser reduzida o máximo possível, por exemplo. algo como \frac{2}{4}
não é permitido. Se o número for inteiro, não use uma fração.
Regras especiais:
Seu programa deve ...
- trabalhar para polinômios até o grau 12
- completo em menos de 1 minuto para uma entrada razoável
- não use nenhuma função que faça todo o cálculo para você
- produzir o polinômio do menor grau possível
Casos de teste:
Os casos de teste fornecidos são apenas para esclarecimentos. Seu programa deve produzir o resultado correto para todas as entradas corretas.
Entrada
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7
Resultado
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
Resultado
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
Resultado
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
Resultado
f (x) = 2x + 5
Entrada
f (1/2) = -1/2 f (-25) = -1/2 f (-54/12) = -1/2
Resultado
f (x) = - \ frac {1} {2}
...
) realmente fazem parte da entrada?-\frac{37745}{14592}x^4 - \frac{853249}{43776}x^3 + \frac{57809}{7296}x^2 + \frac{225205}{2736}x + \frac{23}{3}
. Eu suspeito que a entrada foi destinado a ser algo diferente :)Respostas:
J + sh
Script J:
script sh:
Execute o script sh:
.
fonte
Perl (569 caracteres)
Explicação detalhada:
Comentários
Editar% s
(630 → 585) Percebi que posso fazer a forma de escalão em um loop em vez de dois. Adicione explicações como comentários no código.
(585 → 583) Acabei de descobrir a sintaxe do pacote que me permite usar em
'
vez de::
.(583 → 573) Um pouco mais de microgolfe
(573 → 569) Expressão regular mais curta para analisar a entrada
fonte
TI-Basic (83/84): 109 caracteres
Tecnicamente, 109 caracteres, o TI-Basic conta dim (, For (, ->, rref (, [A] e lista como "um caractere").
A entrada é formatada em L1 e L2, em pares (x, y) [ex L1 = (1,2,3,4), L2 = (2,3,5,7)].
fonte
Método Lagrange, Python, 199 bytes
Um pouco tarde, mas ...
fonte
Apenas uma versão abreviada do código de Fred Freys. Observe que é possível pular a passagem de D para l, pois ela pode ser retirada do escopo externo. Como você provavelmente pode fazer o mesmo com i aqui, podemos até raspar uma lambda. Vou testar algum dia.
fonte