Cara yang saya sukai untuk memperkirakan turunan adalah perbedaan utama, ini lebih akurat daripada perbedaan maju atau perbedaan mundur, dan saya terlalu malas untuk naik ke tingkat yang lebih tinggi. Tetapi perbedaan pusat membutuhkan titik data di kedua sisi titik yang Anda evaluasi. Biasanya ini berarti Anda akhirnya tidak memiliki turunan di kedua titik akhir. Untuk mengatasinya, saya ingin Anda beralih ke perbedaan maju dan mundur di tepi:
Secara khusus, saya ingin Anda menggunakan perbedaan maju untuk poin pertama, perbedaan mundur untuk poin terakhir, dan perbedaan pusat untuk semua poin di tengah. Juga, Anda dapat mengasumsikan nilai x berjarak secara merata, dan fokus hanya pada y. Gunakan formula ini:
Semoga beruntung, saya tak sabar untuk melihat apakah seseorang datang dengan aturan sederhana yang mereproduksi ketiga turunannya di tempat yang tepat!
INPUT EX:
0.034 9.62 8.885 3.477 2.38
Saya akan menggunakan FD, CD, dan BD untuk menunjukkan algoritma yang digunakan di tempat mana, jadi di atas 5 poin digunakan untuk memperkirakan turunan menggunakan
FD CD CD CD BD
Dan kemudian nilai yang dihitung adalah:
9.586 4.4255 -3.0715 -3.2525 -1.097
Anda dapat mengasumsikan bahwa akan selalu ada setidaknya 3 titik input, dan Anda dapat menghitung menggunakan presisi tunggal atau ganda.
Dan seperti biasa, jawaban terpendek menang.
[a,b,c,d,e] -> [b-a,(c-a)/2,(d-b)/2,(e-c)/2,e-d]
. Bisakah ada lebih sedikit dari 3 titik input?Jawaban:
Jelly ,
1310 byteCobalah online!
Bagaimana itu bekerja
sumber
MATL,
2115 byteTryItOnline
Membagi dua input vektor, dan mengambil perbedaan berturut-turut, untuk memberi
d=[i(2)-i(1) i(3)-i(2) ... i(end)-i(end-1)]/2
dan kemudian membuat dua vektor yang dimodifikasi,[d(1) d]
dan[d d(end)]
, dan menambahkannya.Versi yang lebih lama lebih baik (karena konvolusi), tetapi 21 byte
sumber
(y(i)-y(i-1))+(y(i+1)-y(i))
memberiy(i+1)-y(i-1)
, yang merupakan dua kali perbedaan terpusat.Python dengan NumPy, 29 byte
Ini merupakan perilaku default
gradient
fungsi NumPy . Byte dihitung berdasarkan konsensus ini .sumber
05AB1E,
20191714 byteDijelaskan
Cobalah online
Disimpan 2 byte berkat @Adnan
sumber
Julia, 8 byte
Terinspirasi oleh jawaban Python @ MartinEnder . Cobalah online!
sumber
Pyth, 14 byte
Cobalah online: Peragaan
Penjelasan:
sumber
J, 21 byte
Mirip dengan pendekatan yang digunakan dalam solusi @ David .
Pemakaian
Penjelasan
sumber
Pyth - 29 byte
Pendekatan sederhana yang bodoh.
Cobalah online di sini .
sumber
JavaScript (ES6), 62 byte
sumber
Pyth,
27242321 byteCobalah online!
sumber