Topik ini memperkenalkan deret sebagai penjumlahan tak hingga yang suku-sukunya mengikuti satu pola, lalu menerapkan gagasan itu pada deret Taylor yang menghampiri fungsi halus menggunakan polinomial. Perilaku konvergensinya diamati lebih dahulu pada deret geometri, kemudian diuji pada dan dengan pembanding langsung berupa np.exp dan np.sin. Setelah membaca, hampiran Taylor dapat dituliskan dan dihitung, serta jumlah suku yang diperlukan untuk tingkat ketelitian tertentu dapat ditetapkan dari data keluaran kode.
Deret dan jumlah parsial#
Deret (series) adalah penjumlahan tak hingga , dan nilainya didekati melalui jumlah parsial (partial sum), yaitu hasil penjumlahan suku pertama. Deret disebut konvergen apabila jumlah parsialnya menuju satu nilai tetap ketika membesar. Contoh yang paling mudah diukur adalah deret geometri (geometric series) yang setiap sukunya dikalikan satu rasio yang sama,
Pada rasio , deretnya berupa dan rumus di atas menyatakan jumlahnya . Syarat menentukan konvergensi, karena rasio yang besarnya melebihi satu membuat setiap suku semakin besar dan jumlah parsialnya membesar tanpa henti. Program berikut menambahkan sukunya satu per satu untuk memastikan jumlah parsialnya benar-benar bergerak ke arah nilai itu.
import numpy as np
# jumlah parsial deret geometri 1/2 + 1/4 + 1/8 + ... menuju 1
r = 0.5
for N in (1, 2, 4, 8, 16, 32):
S = r * (1.0 - r**N) / (1.0 - r)
print(f"N = {N:2d} : jumlah parsial = {S:.6f}")N = 1 : jumlah parsial = 0.500000
N = 2 : jumlah parsial = 0.750000
N = 4 : jumlah parsial = 0.937500
N = 8 : jumlah parsial = 0.996094
N = 16 : jumlah parsial = 0.999985
N = 32 : jumlah parsial = 1.000000Setiap penggandaan menggerus jarak menuju menjadi setengahnya, sebagaimana terlihat dari pada yang menyusut menjadi pada . Pola penyusutan ini persis sifat deret geometri, karena setiap suku baru seperdua dari sisa jumlah sebelumnya. Deret Taylor menggunakan mekanisme penjumlahan yang sama, tetapi sukunya disusun dari turunan fungsi, bukan dari rasio tetap.
Deret Taylor dan hampiran polinomial#
Deret Taylor (Taylor series) menghampiri fungsi halus di sekitar satu titik pusat menggunakan polinomial yang koefisiennya ditetapkan oleh turunan fungsi di titik itu. Semakin tinggi orde polinomialnya, semakin banyak informasi turunan yang tercakup, dan semakin lebar pula daerah tempat hampirannya meyakinkan. Di sekitar titik nol, bentuknya adalah
Dua fungsi yang digunakan di seluruh komputasi memiliki bentuk Taylor yang rapi, yaitu eksponensial dan sinus. Keduanya dituliskan sebagai deret tak hingga yang benar-benar sama dengan fungsi asalnya pada seluruh garis bilangan,
Hampiran sinus hanya memuat pangkat ganjil dengan tanda berselang-seling, dan setiap orde yang lebih tinggi menambah satu suku baru. Pangkat genap tidak muncul karena seluruh turunan berorde genap dari sinus di titik nol bernilai nol. Program berikut menghitung hampiran tersebut pada tiga titik dengan empat pilihan orde, lalu membandingkannya dengan nilai np.sin pada titik yang sama.
import math
import numpy as np
def taylor_sin(x, orde):
suku = 0.0
for k in range(orde // 2 + 1):
pangkat = 2 * k + 1
suku += (-1.0) ** k * x**pangkat / math.factorial(pangkat)
return suku
for x in (0.5, 1.0, 3.0):
for orde in (1, 3, 5, 7):
hampiran = taylor_sin(x, orde)
print(f"x = {x:3.1f}, orde {orde} : hampiran = {hampiran: .6f}, sin eksak = {np.sin(x):.6f}")
print()x = 0.5, orde 1 : hampiran = 0.500000, sin eksak = 0.479426
x = 0.5, orde 3 : hampiran = 0.479167, sin eksak = 0.479426
x = 0.5, orde 5 : hampiran = 0.479427, sin eksak = 0.479426
x = 0.5, orde 7 : hampiran = 0.479426, sin eksak = 0.479426
x = 1.0, orde 1 : hampiran = 1.000000, sin eksak = 0.841471
x = 1.0, orde 3 : hampiran = 0.833333, sin eksak = 0.841471
x = 1.0, orde 5 : hampiran = 0.841667, sin eksak = 0.841471
x = 1.0, orde 7 : hampiran = 0.841468, sin eksak = 0.841471
x = 3.0, orde 1 : hampiran = 3.000000, sin eksak = 0.141120
x = 3.0, orde 3 : hampiran = -1.500000, sin eksak = 0.141120
x = 3.0, orde 5 : hampiran = 0.525000, sin eksak = 0.141120
x = 3.0, orde 7 : hampiran = 0.091071, sin eksak = 0.141120Pada , hampiran orde tujuh sudah cocok sampai keenam angka desimal, sedangkan pada orde yang sama masih menyisakan selisih sekitar . Hampiran Taylor bersifat lokal, yaitu akurat di dekat titik pusatnya dan melemah ketika menjauh. Serangkaian suku yang lebih banyak tetap memperbaiki hasil pada titik jauh, tetapi jumlah yang diperlukannya membesar, dan pola itu perlu diperhitungkan setiap kali deret digunakan sebagai pengganti fungsi.
Deret eksponensial diperiksa dengan pola yang sama, yaitu menambahkan suku sampai jumlah sukunya memadai. Program berikut menggunakan dua titik, yaitu yang dekat dengan titik pusat dan yang sedikit lebih jauh.
import math
import numpy as np
def taylor_exp(x, suku):
total = 0.0
for k in range(suku):
total += x**k / math.factorial(k)
return total
for x in (1.0, 2.0):
for n in (3, 5, 10, 15):
hampiran = taylor_exp(x, n)
print(f"x = {x:3.1f}, {n:2d} suku : hampiran = {hampiran:.6f}, np.exp = {np.exp(x):.6f}")
print()x = 1.0, 3 suku : hampiran = 2.500000, np.exp = 2.718282
x = 1.0, 5 suku : hampiran = 2.708333, np.exp = 2.718282
x = 1.0, 10 suku : hampiran = 2.718282, np.exp = 2.718282
x = 1.0, 15 suku : hampiran = 2.718282, np.exp = 2.718282
x = 2.0, 3 suku : hampiran = 5.000000, np.exp = 7.389056
x = 2.0, 5 suku : hampiran = 7.000000, np.exp = 7.389056
x = 2.0, 10 suku : hampiran = 7.388713, np.exp = 7.389056
x = 2.0, 15 suku : hampiran = 7.389056, np.exp = 7.389056Sepuluh suku sudah cukup untuk keenam angka desimal pada kedua titik, dan lima belas suku menutup seluruh selisih yang tersisa. Konvergensi berlangsung lebih merata dibandingkan dengan karena sukunya selalu positif dan faktorialnya tumbuh lebih cepat daripada pangkatnya. Perbandingan semacam ini menjadikan jumlah suku sebagai keputusan yang didukung data, bukan tebakan.
Konvergensi pada grafik#
Grafik berikut menggambar beserta empat polinomial Taylor-nya pada rentang yang lebar, dari sampai . Skripnya disimpan sebagai berkas yang dapat disunting, dan keluarannya berupa berkas SVG yang disematkan di bawah. Pola yang perlu dicari adalah rentang tempat setiap kurva masih menempel pada sinus sebelum akhirnya menyimpang jauh di kedua ujung.
import math
import numpy as np
import matplotlib.pyplot as plt
def taylor_sin(x, orde):
suku = np.zeros_like(x)
for k in range(orde // 2 + 1):
pangkat = 2 * k + 1
suku += (-1.0) ** k * x**pangkat / math.factorial(pangkat)
return suku
x = np.linspace(-7, 7, 500)
fig, ax = plt.subplots(figsize=(6, 3.2))
ax.plot(x, np.sin(x), color="#241f31", linewidth=2.5, label="sin(x) eksak")
for orde in (1, 3, 5, 7):
ax.plot(x, taylor_sin(x, orde), linewidth=1.4, label=f"orde {orde}")
ax.set_ylim(-2.5, 2.5)
ax.set_xlabel("x")
ax.set_ylabel("nilai")
ax.set_title("Polinomial Taylor sin(x) di sekitar titik nol")
ax.legend(loc="lower left", fontsize=8)
ax.grid(True, linestyle=":", linewidth=0.6)
fig.savefig("hampiran-taylor.svg")Keempat polinomial menempel rapat pada sinus di sekitar titik nol, kemudian melebar jauh pada ujung kiri dan kanan grafik. Polinomial tidak mungkin berperilaku periodik, sehingga kesesuaian di seluruh garis bilangan memang tidak dapat diharapkan dari satu polinomial. Setiap fungsi juga memiliki radius konvergensi (radius of convergence), yaitu rentang di sekitar titik pusat tempat deretnya masih menuju nilai fungsi tersebut.
Demo interaktif: orde polinomial yang dapat diatur#
Demo berikut menggambar sebagai kurva hitam beserta polinomial Taylor orde pilihan sebagai kurva merah. Geser penggeser orde dari sampai , lalu amati rentang sekitar nol yang makin melebar seiring naiknya orde. Pada orde rendah, kurva merah hanya benar di sekitar nol, sedangkan pada orde kesesuaiannya menjangkau hampir seluruh lebar gambar sebelum akhirnya menyimpang di tepi.
Di mana hal ini ditemui dalam kode#
Deret Taylor bekerja di balik banyak operasi floating point sehari-hari. Banyak library matematis menghitung , , dan pada rentang kecil melalui evaluasi polinomial yang bentuknya diturunkan dari deret Taylor, kemudian dipersempit dengan identitas trigonometri untuk argumen besar. Keluaran pada topik ini memperlihatkan sifat yang dimanfaatkan library tersebut, yaitu beberapa suku pertama sudah cukup bila argumennya dekat dengan titik pusat.
Fungsi aktivasi pada machine learning menggunakan alasan yang sama ketika kecepatan lebih penting daripada presisi penuh. Hampiran tanh berbasis polinomial atau pecahan rasional memangkas biaya perhitungan pada lapisan yang besar, dan nilai errornya dikendalikan dengan jumlah suku, persis tabel orde pada bagian sebelumnya. Kebiasaan yang dibawa dari topik ini adalah menetapkan jumlah suku berdasarkan pengukuran terhadap fungsi pembandingnya, bukan memperkirakannya tanpa data.
Ringkasan#
- Deret dinilai melalui jumlah parsialnya, dan deret geometri konvergen ke untuk .
- Deret Taylor menghampiri fungsi halus dengan polinomial yang koefisiennya berasal dari turunan di satu titik pusat.
- Ketelitian bertambah mengikuti orde, tetapi melemah ketika menjauh dari titik pusat, dan setiap deret memiliki radius konvergensinya sendiri.
- Jumlah suku yang diperlukan ditetapkan dari perbandingan langsung terhadap
np.sindannp.exp, bukan dari perkiraan.
Referensi#
- Calculus Volume 2, 5.2 Infinite Series — OpenStax — Deret, jumlah parsial, dan deret geometri beserta syarat konvergensinya.
- Calculus Volume 2, 6.3 Taylor and Maclaurin Series — OpenStax — Perumusan deret Taylor dan Maclaurin beserta contoh pada fungsi eksponensial dan sinus.
- Mathematics for Machine Learning — Deisenroth, Faisal, dan Ong — Buku terbuka yang menggunakan hampiran fungsi dalam konteks machine learning.