Mi forma preferida de aproximar una derivada es la diferencia central, es más precisa que la diferencia hacia adelante o hacia atrás, y soy demasiado vago para ir en orden superior. Pero la diferencia central requiere un punto de datos a cada lado del punto que está evaluando. Normalmente esto significa que terminas sin tener una derivada en ninguno de los puntos finales. Para resolverlo, quiero que cambies a la diferencia hacia adelante y hacia atrás en los bordes:
Específicamente, quiero que use una diferencia hacia adelante para el primer punto, una diferencia hacia atrás para el último punto y una diferencia central para todos los puntos en el medio. Además, puede suponer que los valores de x están espaciados uniformemente y centrarse solo en y. Usa estas fórmulas:
¡Buena suerte, estoy deseando ver si a alguien se le ocurre una regla simple que reproduzca los 3 derivados en los lugares correctos!
ENTRADA EX:
0.034 9.62 8.885 3.477 2.38
Usaré FD, CD y BD para denotar qué algoritmo usar en qué punto, por lo que se usan más de 5 puntos para aproximar derivados usando
FD CD CD CD BD
Y luego los valores calculados serían:
9.586 4.4255 -3.0715 -3.2525 -1.097
Puede suponer que siempre habrá al menos 3 puntos de entrada, y puede calcular con precisión simple o doble.
Y como siempre, gana la respuesta más corta.
[a,b,c,d,e] -> [b-a,(c-a)/2,(d-b)/2,(e-c)/2,e-d]
. ¿Puede haber menos de 3 puntos de entrada?Respuestas:
Jalea ,
1310 bytesPruébalo en línea!
Cómo funciona
fuente
MATL,
2115 bytesTryItOnline
Mitades el vector de entrada, y lleva a diferencias sucesivas, para dar
d=[i(2)-i(1) i(3)-i(2) ... i(end)-i(end-1)]/2
y luego hace dos vectores modificados,[d(1) d]
y[d d(end)]
, y los añade.La versión anterior era mejor (por convolución), pero 21 bytes
fuente
(y(i)-y(i-1))+(y(i+1)-y(i))
day(i+1)-y(i-1)
, que es el doble de la diferencia centrada.Python con NumPy, 29 bytes
Este es el comportamiento predeterminado de la
gradient
función de NumPy . Los bytes se contaron de acuerdo con este consenso .fuente
05AB1E,
20191714 bytesExplicado
Pruébalo en línea
Guardado 2 bytes gracias a @Adnan
fuente
Julia, 8 bytes
Inspirado por la respuesta Python de @ MartinEnder . Pruébalo en línea!
fuente
Pyth, 14 bytes
Pruébelo en línea: demostración
Explicación:
fuente
J, 21 bytes
Similar al enfoque utilizado en la solución de @ David .
Uso
Explicación
fuente
Pyth - 29 bytes
Estúpido enfoque simple.
Pruébelo en línea aquí .
fuente
JavaScript (ES6), 62 bytes
fuente
Pyth,
27242321 bytesPruébalo en línea!
fuente