Bermain dengan Python: mencari akar kuadrat secara numerik

Sekilas tentang python

python-logo-master-v3-TMPython, mungkin yang ada di pikiran kita ketika mendengar kata ini adalah ular dengan ukuran yang besar yang mampu melilit dan meremukkan tulang-belulang mangsanya kemudian menelan mangsanya dalam sekali lahap. Bermain dengan Python? Pasti sedikit ngeri jika Python yang dimaksud adalah jenis ular dari famili pythonidae ini. Tapi akan menyenangkan jika bermain dengan Python yang lain, yaitu bahasa pemrograman komputer. Ya, Python adalah satu jenis bahasa pemrograman.

Python adalah bahasa pemrograman tingkat-tinggi. Bahasa pemrograman memiliki tingkatan berdasarkan kedekatannya dengan bahasa manusia, semakin tinggi tingkatannya semakin dekat bahasa pemrograman tersebut dengan bahasa manusia sehingga semakin mudah untuk dipahami. Semakin tinggi tingkat sebuah bahasa pemrograman semakin mudah bagi kita untuk dapat menuliskan instruksi yang akan dijalankan oleh mesin komputer untuk melakukan suatu tugas.

Python populer di kalangan fisikawan dan insinyur yang tidak terlatih secara khusus dalam memprogram komputer  atau tidak terlalu memiliki banyak pengetahuan dalam memprogram komputer. Python banyak digunakan oleh fisikawan untuk membantu melalukukan perhitungan yang panjang dan rumit yang tidak mudah dilakukan oleh manusia. Melalui serangkaian instruksi yang ditulis dalam bahasa Python, perhitungan matematik yang rumit dapat dilakukan oleh mesin penghitung komputer. Python juga banyak digunakan untuk memprogram instrumen-instrumen eksperimen guna melakukan pengukuran dan pengendalian besaran-besaran fisis.

Oleh karena itu, akan sangat mengasyikkan untuk bermain dengan Python melihat kemudahan dan banyaknya manfaat yang dapat diperoleh.

mencari akar kuadrat bilangan secara numerik

Bagi kita yang sudah belajar matematika sejak kecil mencari akar kuadrat dari bilangan bulat mungkin sangat mudah. Sebagian dari kita mungkin sangat hafal dengan nilai akar kuadrat dari beberapa bilangan bulat dan dengan mudah akan dapat menjawab jika ditanya nilai akar kuadrat dari bilangan tertentu seperti 25. Tapi bagaimana jika kita dihadapkan dengan angka-angka yang jumlahnya sangat besar seperti 65536 atau bilangan dengan koma desimal seperti 25,7? Pasti tidak akan mudah untuk menemukan akar kuadrat dari angka-angka tersebut.

Kita dapat mencari angka-angka tersebut secara analitis melalui prosedur-prosedur matematis yang tentunya tidak sesederhana. Selain dapat dicari secara analitis, akar kuadrat dapat pula dicari melalui pendekatan numerik. Angka yang akan didapatkan melalui analisa numerik mungkin tidak selalu eksak, akan tetapi akan mendekati nilai eksak dengan eror yang bisa saja sangat kecil dan sangat mendekati nilai eksaknya.

Salah satu metode numerik sederhana yang dapat digunakan untuk mencari akar kuadrat dari sebuah bilangan adalah metode biseksiSecara harfiah biseksi berarti membagi bagian menjadi dua. Sesuai dengan arti harfiahnya, metode biseksi akan mencari akar kuadarat dengan membagian suatu bagian menjadi dua secara terus menerus sampai didapatkan nilai yang mendekati nilai akar kuadrat suatu bilangan.

Alur berpikir (algoritma) dari metode biseksi untuk mencari akar kuadrat dari suatu bilangan adalah seperti ini:

  1. Akar kuadrat dari sebuah bilangan, misalnya  25, pasti berada di antara 0 dan 25.
  2. biseksi1Kita cari nilai tengah antara 0 (batas bawah) dan 25 (batas atas) dengan menambahkan 0 dan 25 kemudian membaginya dengan 2: \frac{0 + 25}{2,0} = 12,5
  3. Sekarang kita memiliki nilai tengah antara 0 dan 25 yaitu 12,5. Dengan ini juga sekarang kita membagi dua rentang antara 0 dan 25. Bagian kiri (0  sampai dengan 12,5) dan bagian kanan (12,5 sampai dengan 25).
  4. biseksi2Selajutnya kita akan memilih mana diantara dua bagaian (antara 0 dan 12,5 dan antara 12,5 dan 25) yang mengandung nilai akar kuadrat dari 25. Kita akan pilih dengan menguji apakah nilai tengah 12,5 jika dikuadratkan lebih besar atau lebih kecil dari 25.
  5. Jika lebih besar dari 25, berarti nilai akar kuadrat berada di rentang kiri (antara 0 dan 12,5). Jika lebih kecil berarti nilai akar kuadrat bedara di rentang kanan (antara 12,5 dan 25).
  6. Karena kuadrat dari 12,5 adalah 156,25 yang berarti lebih besar dari 25, berarti akar kuadrat berada di bagian kiri yaitu antara 0 dan 12,5. Kita gunakan ini sebagai rentang tebakan akar kuadrat yang baru. Dengan 0 sebagai batas bawah dan 12,5 sebagai batas atas.
  7. biseksi3Kita lakukan hal yang sama dengan nomor 2 dan 3 terhadap rentang baru ini sehingga didapat nilai tengah dan rentang terbagi menjadi dua bagian.
  8. Uji lagi nilai tengah ini seperti nomor 4 dan 5 sehingga didapat rentang baru di mana akar kuadrat terkandung.
  9. Lakukan proses ini secara terus menerus sampai didapatkan angka yang jika dikuadratkan mendekati 25.

Jika kita mengikuti algoritma tersebut dan melakukannya untuk mendapatkan akar kuadrat dari suatu bilangan akan dibutuhkan waktu yang cukup lama dan proses yang panjang. Kita bisa membuat komputer melakukan proses sesuai algoritma biseksi sehingga kita tidak perlu berlelah-lelah menghitung dan mengerjakan proses yang agak panjang.

Untuk dapat membuat komputer melakukan proses pencarian akar melalui metode biseksi kita butuh untuk menerjemahkan algoritma biseksi di atas ke dalam bahasa Python dan biarkan komputer melakukan sisanya. Instruksi-instruksi dalam bahasa Python di bawah akan mencari akar kuadrat dengan menggunakan metode biseksi. Jika kita jalankan instruksi ini dalam interpreter akan ditampilkan rentang-rentang dan tebakan-tebakan akar kuadrat yang dihasilkan.

#Biseksi mencari akar
x = float(raw_input('masukkan angka: '))  #pengguna meng-input-kan angka yang akarnya akan dicari
epsilon = 0.01  #nilai eror yang diinginkan
banyaktebakan = 0  #inisialisasi banyaknya tebakan
atas = x #batas atas dari rentang
bawah = 0.0 #batas bawah dari rentang
akar = (atas + bawah)/2.0  #nilai tengah dari rentang atau nilai akar kuadrat
while abs(akar**2 - x) >= epsilon:  #lakukan algoritma biseksi selama eror lebih besar atau sama dengan nilai epsilon
  print ('bawah = ' + str(bawah) + ' atas = ' + str(atas) + ' akar = ' + str(akar))
  banyaktebakan += 1  #pengitunga jumlah tebakan yang dilakukan
  if akar**2 > x:  #pengujian untuk memilih rentang
    atas = akar
  else:
    bawah = akar
  akar = (bawah + atas)/2.0  #nilai akar kuadrat
print ('banyak tebakan = ' + str(banyaktebakan))
print (str(akar) + ' mendekati akar dari ' + str(x))
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s