Program metode bisection menggunakan python

Assalamualikum Wr. Wb.Setelah pada postingan sebelumnya kita membahas metode bisection dalam kasus penyelesaian persamaan tak linear secara teori dan masih berupa tulisan. Maka pada kesempatan kali ini saya mencoba menjelaskan program yang saya buat dari bahasa pemrograman python. Program yang saya buat ini mengikuti penjelasan dari metode bisection dalam kasus penyelesaian persamaan tak linear. Jadi mari kita simak apa saja.

Source Code :

# bisection method,
# sufyan97 (xsufyan@gmail.com)

def inputdata(a,b):
    a= float(input("Masukan data awal a : "))
    b= float(input("Masukan data awal b : "))
    return (a,b)

def y(x):
    return (x**3-(7*x)+1)

def checkAB(a,b):
    if(y(a)*y(b)<0):
        return True
    else:
        return False

def updateData(a,b):
    c= (a+b)/2
    if(y(a)*y(c)<0):
        b = c
    else :
        a = c
    return (a,b)

def process(a,b,prc):
    while(abs(y(a))>prc or abs(y(b))>prc):
        a,b = updateData(a,b)

    if(abs(y(a))>abs(y(b))):
        return b
    else:
        return a
    # return (a,b)
   

def main():
    a= 0
    b= 0
    prc= 0
    result = 0
    a,b = inputdata(a,b)
    if(checkAB(a,b)):
        print ("Data sesuai bisa dilanjutkan")
        prc = float(input("Masukan nilai presisinya : "))
        result = process(a,b,prc)
        print ("Hasil = ",result," Dengan nilai y(x) ",y(result))
    else:
        print ("Data tidak sesuai tidak bisa dilanjutkan")
main()

Hasil Running :

  • a = 0, b =1, presisi = 10^-5
  • a = 0, b =1, presisi = 10^-12

Penjelasan Source Code:

# bisection method,
# sufyan97 (xsufyan@gmail.com)
Sebuah komentar menjelaskan identitas dari source code tersebut, biasanya meliputi program apa, siapa yang buat, dan kontak yang bisa dihubungi.

def inputdata(a,b):
    a= float(input("Masukan data awal a : "))
    b= float(input("Masukan data awal b : "))
    return (a,b)
Saya membuat fungsi untuk menginputkan data. Fungsinya bernama inputdata, dengan 2 parameter a dan b. Kemudian si variabel a ini akan menampung inputan dari a= float(input("Masukan data awal a : ")) yang nilai awalnya berupa string kemudian saya ubah menjadi tipe data float agar bisa dihitung dalam angka pecahan yang banyak mengandung angka di belakang koma. begitu juga variabel b sama fungsinya seperti penjelasan variabel b. Variabel a dan b ini fungsinya sebagai pencatat prediksi awal jika bingung coba baca artike berikut metode bisection.

def y(x):
    return (x**3-(7*x)+1)
fungsi y ini sebenarnya merepresentasikan fungsi dari soal yang ada metode bisection. Yaitu f(x) = x^3-7x+1

def checkAB(a,b):
    if(y(a)*y(b)<0):
        return True
    else:
        return False
fungsi ini digunakan untuk mengecheck apakah nilai a dan b yang kita inputkan pada fungsi inputdata(). itu bisa digunakan atau sesuai dengan syarat bahwa diantara kedua nilai tersebut nilai yang membuat f(x) menjadi 0. Nah nanti jika nilai a dan b memenuhi syarat dia akan menghasilkan nilai True sebagai output dari fungsi checkAB() ini. Begitu pula sebaliknya dia akan memberi nilai False apabila nilai a dan b tidak memenuhi syarat.

def updateData(a,b):
    c= (a+b)/2
    if(y(a)*y(c)<0):
        b = c
    else :
        a = c
    return (a,b)
fungsi updateData() digunakan untuk mengupdate nilai pembatas dalam pencarian. jadi kita lebih mengerucutkan lagi nilai-nilai yang mendekati 0. Untuk penjelasan secara teori fungsi ini ada pada step no. 3 sesuai postingan berikut metode bisection.

 def process(a,b,prc):
    while(abs(y(a))>prc or abs(y(b))>prc):
        a,b = updateData(a,b)

    if(abs(y(a))>abs(y(b))):
        return b
    else:
        return a
    # return (a,b)
fungsi process() sendiri merupakan core utama dari program ini. Jadi urutannya :
  • Jika nilai yang dicari belum ketemu, dalam artian tidak lebih kecil dari pada nilai presisi. Berarti juga nilai mutlak dari y(a) atau y(b) >0. maka dia akan terus melooping sampai menemukan nilai yang pas dan sesuai. Makannya saya menggunakan looping while agar sederhana.
  • Nah a,b = updateData(a,b) disesuaikan dengan teori. Jika kita belum menemukan nilai yang diinginkan kita terus mencari sesuai dengan step-step di fungsi updateData().
  • Setelah looping selesai. Berarti dia menemukan nilai yang diinginkan selanjutnya kita check. Karena kita belum tahu mana yang sesuai apakah nilai y(a) atau nilai y(b). Makanya kita menggunakan fungsi if. Terus kenapa kita menggunakan nilai mutlak ? karena kita lebih beriorientasi nilai yang mendekati 0 atau mendekati batas presisi. -2 lebih kecil 0.5 tetapi 0.5 lebih mendekati nilai 0
  • Nah jika abs(y(a))>abs(y(b)). berarti nilai b lebih kecil maka jawaban ada di b. Begitu pula sebaliknya. 
def main():
    a= 0
    b= 0
    prc= 0
    result = 0
    a,b = inputdata(a,b)
    if(checkAB(a,b)):
        print ("Data sesuai bisa dilanjutkan")
        prc = float(input("Masukan nilai presisinya : "))
        result = process(a,b,prc)
        print ("Hasil = ",result," Dengan nilai y(x) ",y(result))
    else:
        print ("Data tidak sesuai tidak bisa dilanjutkan")
fungsi main() digunakan untuk menjelaskan urutan pengerjaannya.
  • mulai dari penyiapan variabel seperti a,b, dan prec.
  • kemudian variabel a dan b menampung nilai dair hasil fungsi inputData(). pada syntax a,b = inputdata(a,b).
  • terus ternyata kita butuh mengecheck juga menggunakan if dan fungsi checkAB. Jika hasilnya True maka program selanjutnya akan jalan. Jika tidak program berhenti.
  • result menampung nilai jawaban dari hasil fungsi process(). sekaligus jawaban yang dibutuhkan pada program ini. kemudian jawaban dicetak hasilnya agar kita bisa membacanya.
main()
artinya kita memanggil fungsi main() dan langsung menjalankannya di program python ini.

Sekian dari saya kurangnya mohon maaf jika ada pertanyaan tulis aja di kolom komentar. Wassalamualikum Wr. Wb.

2 komentar untuk "Program metode bisection menggunakan python"

Berilah komentar, saran, dan kritik dengan bijak