Mein bevorzugter Weg, eine Ableitung zu approximieren, ist der zentrale Unterschied, der genauer ist als der Vorwärts- oder Rückwärtsunterschied, und ich bin zu faul, um eine höhere Ordnung zu erreichen. Der zentrale Unterschied erfordert jedoch einen Datenpunkt auf beiden Seiten des Punktes, den Sie auswerten. Normalerweise bedeutet dies, dass Sie an keinem der Endpunkte eine Ableitung haben. Um es zu lösen, möchte ich, dass Sie an den Rändern auf Vorwärts- und Rückwärtsdifferenz umschalten:
Insbesondere möchte ich, dass Sie eine Vorwärtsdifferenz für den ersten Punkt, eine Rückwärtsdifferenz für den letzten Punkt und eine zentrale Differenz für alle Punkte in der Mitte verwenden. Sie können auch davon ausgehen, dass die x-Werte gleichmäßig verteilt sind und sich nur auf y konzentrieren. Verwenden Sie diese Formeln:
Viel Glück, ich freue mich darauf zu sehen, ob jemand eine einfache Regel findet, die alle 3 Derivate an den richtigen Stellen reproduziert!
EX INPUT:
0.034 9.62 8.885 3.477 2.38
Ich werde FD, CD und BD verwenden, um anzugeben, welcher Algorithmus an welcher Stelle verwendet werden soll. Daher werden über 5 Punkte verwendet, um Ableitungen mit zu approximieren
FD CD CD CD BD
Und dann wären die berechneten Werte:
9.586 4.4255 -3.0715 -3.2525 -1.097
Sie können davon ausgehen, dass immer mindestens 3 Eingabepunkte vorhanden sind, und Sie können mit einfacher oder doppelter Genauigkeit berechnen.
Und wie immer gewinnt die kürzeste Antwort.
[a,b,c,d,e] -> [b-a,(c-a)/2,(d-b)/2,(e-c)/2,e-d]
. Kann es weniger als 3 Eingabepunkte geben?Antworten:
Gelee ,
1310 BytesProbieren Sie es online aus!
Wie es funktioniert
quelle
MATL,
2115 BytesTryItOnline
Hälften der Eingangsvektor, und nimmt aufeinanderfolgende Unterschiede zu geben ,
d=[i(2)-i(1) i(3)-i(2) ... i(end)-i(end-1)]/2
und dann macht zwei modifizierte Vektoren,[d(1) d]
und[d d(end)]
, und addiert sie.Die ältere Version war besser (wegen Faltung), aber 21 Bytes
quelle
(y(i)-y(i-1))+(y(i+1)-y(i))
gibty(i+1)-y(i-1)
, was doppelt so groß ist wie der zentrierte Unterschied.Python mit NumPy, 29 Bytes
Dies ist das Standardverhalten der NumPy-
gradient
Funktion. Die Bytes wurden gemäß diesem Konsens gezählt .quelle
05AB1E,
20191714 BytesErklärt
Probieren Sie es online aus
2 Bytes dank @Adnan gespeichert
quelle
Julia, 8 Bytes
Inspiriert von @ MartinEnders Python-Antwort . Probieren Sie es online aus!
quelle
Pyth, 14 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
J, 21 Bytes
Ähnlich wie bei der Lösung von @ David .
Verwendungszweck
Erläuterung
quelle
Pyth - 29 Bytes
Blöder einfacher Ansatz.
Probieren Sie es hier online aus .
quelle
JavaScript (ES6), 62 Byte
quelle
Pyth,
27242321 BytesProbieren Sie es online aus!
quelle