Ma façon préférée d'approximer un dérivé est la différence centrale, sa plus précise que la différence avant ou la différence arrière, et je suis trop paresseux pour aller dans un ordre supérieur. Mais la différence centrale nécessite un point de données de chaque côté du point que vous évaluez. Normalement, cela signifie que vous n’avez pas de dérivé sur aucun des points de terminaison. Pour le résoudre, je veux que vous passiez à la différence avant et arrière sur les bords:
Plus précisément, je veux que vous utilisiez une différence avant pour le premier point, une différence arrière pour le dernier point et une différence centrale pour tous les points du milieu. En outre, vous pouvez supposer que les valeurs x sont régulièrement espacées et vous concentrer uniquement sur y. Utilisez ces formules:
Bonne chance, j'ai hâte de voir si quelqu'un arrive avec une règle simple qui reproduit les 3 dérivés aux bons endroits!
ENTRÉE EX:
0.034 9.62 8.885 3.477 2.38
J'utiliserai FD, CD et BD pour indiquer quel algorithme utiliser à quel endroit, donc au-dessus de 5 points sont utilisés pour approximer les dérivés en utilisant
FD CD CD CD BD
Et puis les valeurs calculées seraient:
9.586 4.4255 -3.0715 -3.2525 -1.097
Vous pouvez supposer qu'il y aura toujours au moins 3 points d'entrée et vous pouvez calculer en utilisant une précision simple ou double.
Et comme toujours, la réponse la plus courte l'emporte.
[a,b,c,d,e] -> [b-a,(c-a)/2,(d-b)/2,(e-c)/2,e-d]
. Peut-il y avoir moins de 3 points d'entrée?Réponses:
Gelée ,
1310 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
MATL,
2115 octetsTryItOnline
Divise par deux le vecteur d'entrée, et prend des différences successives, pour donner
d=[i(2)-i(1) i(3)-i(2) ... i(end)-i(end-1)]/2
puis crée deux vecteurs modifiés,[d(1) d]
et[d d(end)]
, et les ajoute.L'ancienne version était meilleure (car convolution), mais 21 octets
la source
(y(i)-y(i-1))+(y(i+1)-y(i))
donney(i+1)-y(i-1)
, ce qui est deux fois la différence centrée.Python avec NumPy, 29 octets
Il s'agit du comportement par défaut de la
gradient
fonction NumPy . Les octets ont été comptés selon ce consensus .la source
05AB1E,
20191714 octetsExpliqué
Essayez-le en ligne
Sauvegardé 2 octets grâce à @Adnan
la source
Julia, 8 octets
Inspiré par la réponse Python de @ MartinEnder . Essayez-le en ligne!
la source
Pyth, 14 octets
Essayez-le en ligne: Démonstration
Explication:
la source
J, 21 octets
Similaire à l'approche utilisée dans la solution de @ David .
Usage
Explication
la source
Pyth - 29 octets
Stupide approche simple.
Essayez-le en ligne ici .
la source
JavaScript (ES6), 62 octets
la source
Pyth,
27242321 octetsEssayez-le en ligne!
la source