Moim preferowanym sposobem przybliżenia pochodnej jest różnica centralna, jej dokładniejsza niż różnica do przodu lub różnica do tyłu, a ja jestem zbyt leniwy, aby przejść do wyższego rzędu. Ale główna różnica wymaga punktu danych po obu stronach ocenianego punktu. Zwykle oznacza to, że nie masz pochodnej w żadnym punkcie końcowym. Aby rozwiązać ten problem, chcę, abyś przełączył na różnicę do przodu i do tyłu na krawędziach:
W szczególności chcę, abyś użył różnicy do przodu dla pierwszego punktu, różnicy do tyłu dla ostatniego punktu i centralnej różnicy dla wszystkich punktów w środku. Możesz także założyć, że wartości x są równomiernie rozmieszczone i skupiać się tylko na y. Użyj tych wzorów:
Powodzenia, nie mogę się doczekać, aby zobaczyć, czy ktoś wymyśli prostą zasadę, która odtwarza wszystkie 3 pochodne we właściwych miejscach!
WEJŚCIE EX:
0.034 9.62 8.885 3.477 2.38
Użyję FD, CD i BD, aby określić, który algorytm użyć w którym miejscu, więc powyżej 5 punktów używa się do przybliżenia pochodnych za pomocą
FD CD CD CD BD
A następnie obliczone wartości byłyby:
9.586 4.4255 -3.0715 -3.2525 -1.097
Możesz założyć, że zawsze będą co najmniej 3 punkty wejściowe i możesz obliczyć używając pojedynczej lub podwójnej precyzji.
I jak zawsze, najkrótsza odpowiedź wygrywa.
[a,b,c,d,e] -> [b-a,(c-a)/2,(d-b)/2,(e-c)/2,e-d]
. Czy może być mniej niż 3 punkty wejściowe?Odpowiedzi:
Galaretka ,
1310 bajtówWypróbuj online!
Jak to działa
źródło
MATL,
2115 bajtówTryItOnline
Połówki wektora wejściowego i bierze kolejne różnice, aby dać
d=[i(2)-i(1) i(3)-i(2) ... i(end)-i(end-1)]/2
i wtedy robi dwa zmodyfikowane wektory,[d(1) d]
i[d d(end)]
, i dodaje je.Starsza wersja była lepsza (ponieważ splot), ale 21 bajtów
źródło
(y(i)-y(i-1))+(y(i+1)-y(i))
dajey(i+1)-y(i-1)
, co stanowi dwukrotność wyśrodkowanej różnicy.Python z NumPy, 29 bajtów
Jest to domyślne zachowanie funkcji NumPy
gradient
. Bajty zostały policzone zgodnie z tym konsensusem .źródło
05AB1E,
20191714 bajtówWyjaśnione
Wypróbuj online
Zaoszczędzono 2 bajty dzięki @Adnan
źródło
Julia, 8 bajtów
Zainspirowany odpowiedzią Python @ MartinEnder . Wypróbuj online!
źródło
Pyth, 14 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
J, 21 bajtów
Podobne do podejścia zastosowanego w rozwiązaniu @ David .
Stosowanie
Wyjaśnienie
źródło
Pyth - 29 bajtów
Głupie proste podejście.
Wypróbuj online tutaj .
źródło
JavaScript (ES6), 62 bajty
źródło
Pyth,
27242321 bajtówWypróbuj online!
źródło