Napisz program, który wykonuje interpolację wielomianową przy użyciu prawdziwych liczb wymiernych o dowolnej dokładności. Dane wejściowe wyglądają następująco:
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7 ...
Możesz założyć, że przed =
znakiem i po nim jest dokładnie jedna biała spacja , wszystkie liczby są ułamkami lub liczbami całkowitymi. Możesz również założyć, że wszystkie ułamki na wejściu są już nieredukowalne.
Nie jest wymagane sprawdzanie błędów, można założyć, że dane wejściowe są prawidłowe i x nie jest podwojone w f (x).
Dane wyjściowe powinny być w formie zgodnej z LaTeX, emitowany kod LaTeX powinien dawać taką samą graficzną reprezentację jak dane wyjściowe podane tutaj.
f (x) = 123x ^ 2 + \ frac {45} {2} x + \ frac {7} {4}
Ułamek musi zostać zredukowany tak bardzo, jak to możliwe, np. coś takiego \frac{2}{4}
jest niedozwolone. Jeśli liczba jest liczbą całkowitą, nie używaj ułamka.
Zasady specjalne:
Twój program powinien ...
- praca dla wielomianów do stopnia 12
- ukończenie w mniej niż 1 minutę dla rozsądnego wkładu
- nie używaj żadnych funkcji, które wykonują całe obliczenia za Ciebie
- wyprowadza wielomian najmniejszego możliwego stopnia
Przypadki testowe:
Podane przypadki testowe służą jedynie wyjaśnieniu. Twój program powinien dać poprawny wynik dla wszystkich poprawnych danych wejściowych.
Wejście
f (1) = 2/3 f (2) = 4/5 f (3) = 6/7
Wynik
f (x) = - \ frac {4} {105} x ^ 2 + \ frac {26} {105} x + \ frac {16} {35}
Wejście
f (-12) = 13/2 f (5/3) = 3/5 f (13) = -6 f (1/5) = -3/4
Wynik
f (x) = - \ frac {2186133} {239455744} x ^ 3 + \ frac {2741731} {149659840} x ^ 2 + \ frac {26720517} {29201920} x - \ frac {279464297} {299319680}
Wejście
f (4/3) = 617/81 f (2) = 20/3 f (-8/3) = 6749/81 f (-5) = 7367/12 f (0) = 23/3
Wynik
f (x) = \ frac {1} {2} x ^ 4 - 2x ^ 3 + \ frac {7} {4} x ^ 2 + \ frac {23} {3}
Wejście
f (0) = 5 f (1) = 7 f (2) = 9 f (3) = 11 f (4) = 13
Wynik
f (x) = 2x + 5
Wejście
f (1/2) = -1/2 f (-25) = -1/2 f (-54/12) = -1/2
Wynik
f (x) = - \ frac {1} {2}
...
) są naprawdę częścią danych wejściowych?-\frac{37745}{14592}x^4 - \frac{853249}{43776}x^3 + \frac{57809}{7296}x^2 + \frac{225205}{2736}x + \frac{23}{3}
. Podejrzewam, że wejście miało być czymś innym :)Odpowiedzi:
J + sh
Skrypt J:
skrypt sh:
Uruchom skrypt sh:
.
źródło
Perl (569 znaków)
Szczegółowe wyjaśnienie:
Komentarze
Edycje
(630 → 585) Uświadomiłem sobie, że mogę wykonać formularz echelon w jednej pętli zamiast dwóch. Dodaj wyjaśnienie jako komentarze w kodzie.
(585 → 583) Właśnie odkryłem składnię pakietu, która pozwala mi używać
'
zamiast::
.(583 → 573) Jeszcze więcej mikrogolfowania
(573 → 569) Krótsze wyrażenie regularne do analizowania danych wejściowych
źródło
TI-Basic (83/84): 109 znaków
Technicznie 109 znaków, TI-Basic liczy dim (, For (, ->, rref (, [A]) i wymienia jako „jeden znak”.
Dane wejściowe są sformatowane w L1 i L2, parami (x, y) [ex L1 = (1,2,3,4), L2 = (2,3,5,7)].
źródło
Metoda Lagrange'a, Python, 199 bajtów
Trochę późno, ale ...
źródło
Tylko skrócona wersja kodu Freda Freysa. Zauważ, że prawdopodobnie można pominąć przekazanie D do l, ponieważ można po prostu wyciągnąć go z lunety zewnętrznej. Ponieważ prawdopodobnie możesz zrobić to samo z i tutaj, moglibyśmy nawet ogolić jedną lambda. Przetestuję to kiedyś.
źródło