Напишите программу, которая выполняет полиномиальную интерполяцию с использованием истинных рациональных чисел произвольной точности. Вход выглядит так:
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7 ...
Вы можете предположить, что есть ровно один пробел до и после =
знака, все числа либо дробные, либо целые. Вы также можете предположить, что все дроби на входе уже неприводимы.
Проверка ошибок не требуется, вы можете предположить, что ввод действителен, и ни один x не удваивается в f (x).
Выходные данные должны быть в LaTeX-совместимой форме, а испускаемый код LaTeX должен давать то же графическое представление, что и выходные данные, приведенные здесь.
f (x) = 123x ^ 2 + \ frac {45} {2} x + \ frac {7} {4}
Фракция должна быть максимально уменьшена, например. что-то подобное \frac{2}{4}
не допускается. Если число целое, не используйте дробь.
Особые правила:
Ваша программа должна ...
- работа для полиномов до степени 12
- завершить менее чем за 1 минуту для разумного ввода
- не используйте функции, которые делают весь расчет за вас
- вывести многочлен наименьшей возможной степени
Testcases:
Данные тесты приведены только для пояснения. Ваша программа должна давать правильный результат для всех правильных входных данных.
вход
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7
Выход
f (x) = - \ frac {4} {105} x ^ 2 + \ frac {26} {105} x + \ frac {16} {35}
вход
f (-12) = 13/2 f (5/3) = 3/5 f (13) = -6 f (1/5) = -3/4
Выход
f (x) = - \ frac {2186133} {239455744} x ^ 3 + \ frac {2741731} {149659840} x ^ 2 + \ frac {26720517} {29201920} x - \ frac {279464297} {299319680}
вход
f (4/3) = 617/81 f (2) = 20/3 f (-8/3) = 6749/81 f (-5) = 7367/12 f (0) = 23/3
Выход
f (x) = \ frac {1} {2} x ^ 4 - 2х ^ 3 + \ frac {7} {4} x ^ 2 + \ frac {23} {3}
вход
f (0) = 5 f (1) = 7 f (2) = 9 f (3) = 11 f (4) = 13
Выход
f (x) = 2x + 5
вход
f (1/2) = -1/2 f (-25) = -1/2 f (-54/12) = -1/2
Выход
f (x) = - \ frac {1} {2}
...
) действительно являются частью ввода?-\frac{37745}{14592}x^4 - \frac{853249}{43776}x^3 + \frac{57809}{7296}x^2 + \frac{225205}{2736}x + \frac{23}{3}
. Я подозреваю, что ввод был предназначен для чего-то другого :)Ответы:
J + sh
J скрипт:
Сценарий:
Запустите скрипт sh:
,
источник
Perl (569 символов)
Детальное объяснение:
Комментарии
Правки
(630 → 585) Понял, что я могу сделать эшелон в одну петлю вместо двух. Добавить объяснение в виде комментариев в коде.
(585 → 583) Только что обнаружил синтаксис пакета, который позволяет мне использовать
'
вместо::
.(583 → 573) Еще немного микрогольфинга
(573 → 569) Более короткое регулярное выражение для разбора ввода
источник
TI-Basic (83/84): 109 символов
Технически 109 символов, TI-Basic считает dim (, For (, ->, rref (, [A]) и перечисляет как «один символ».
Входные данные отформатированы в L1 и L2 в парах (x, y) [ex L1 = (1,2,3,4), L2 = (2,3,5,7)].
источник
Метод Лагранжа, Python, 199 байт
Немного поздно, но ...
источник
Просто сокращенная версия кода Фреда Фрейса. Обратите внимание, что, возможно, можно пропустить передачу D в l, поскольку он может просто вытянуть его из внешней области видимости. Поскольку вы, вероятно, можете сделать то же самое со мной здесь, мы могли бы даже сбрить одну лямбду. Я проверю это однажды.
источник