Мой предпочтительный способ аппроксимации производной - это центральная разница, более точная, чем прямая или обратная разница, и я слишком ленив, чтобы перейти на более высокий порядок. Но для центрального различия требуется точка данных по обе стороны от точки, которую вы оцениваете. Обычно это означает, что у вас не будет производной в любой конечной точке. Чтобы решить эту проблему, я хочу, чтобы вы переключились на прямую и обратную разность по краям:
В частности, я хочу, чтобы вы использовали прямую разницу для первой точки, обратную разницу для последней точки и центральную разницу для всех точек в середине. Кроме того, вы можете предположить, что значения x расположены равномерно и фокусироваться только на y. Используйте эти формулы:
Удачи, я с нетерпением жду встречи, если кто-то придумает простое правило, которое воспроизводит все 3 производных в правильных местах!
EX INPUT:
0.034 9.62 8.885 3.477 2.38
Я буду использовать FD, CD и BD, чтобы указать, какой алгоритм использовать в каком месте, поэтому более 5 баллов используются для аппроксимации производных с использованием
FD CD CD CD BD
И тогда рассчитанные значения будут:
9.586 4.4255 -3.0715 -3.2525 -1.097
Вы можете предположить, что всегда будет как минимум 3 входные точки, и вы можете рассчитывать с одинарной или двойной точностью.
И как всегда, самый короткий ответ выигрывает.
[a,b,c,d,e] -> [b-a,(c-a)/2,(d-b)/2,(e-c)/2,e-d]
. Может ли быть меньше, чем 3 точки ввода?Ответы:
Желе ,
1310 байтПопробуйте онлайн!
Как это работает
источник
MATL,
2115 байтTryItOnline
Делит входной вектор пополам и принимает последовательные различия, чтобы получить,
d=[i(2)-i(1) i(3)-i(2) ... i(end)-i(end-1)]/2
а затем создает два измененных вектора[d(1) d]
и[d d(end)]
добавляет их.Старая версия была лучше (из-за свертки), но 21 байт
источник
(y(i)-y(i-1))+(y(i+1)-y(i))
даетy(i+1)-y(i-1)
, что в два раза больше центрированной разницы.Python с NumPy, 29 байт
Это происходит по умолчанию для
gradient
функции NumPy . Байты были подсчитаны в соответствии с этим консенсусом .источник
05AB1E,
20191714 байтовРазъяснения
Попробуйте онлайн
Сохранено 2 байта благодаря @Adnan
источник
Юлия, 8 байт
Вдохновленный ответом @ MartinEnder's Python . Попробуйте онлайн!
источник
Pyth, 14 байт
Попробуйте онлайн: Демонстрация
Объяснение:
источник
J, 21 байт
Подобно подходу, используемому в решении @ David .
Применение
объяснение
источник
Pyth - 29 байт
Глупый простой подход.
Попробуйте это онлайн здесь .
источник
JavaScript (ES6), 62 байта
источник
Pyth,
27242321 байтПопробуйте онлайн!
источник