Tugas Program Komnum 2025 Final Project Komputasi Numerik yang dikerjakan oleh saya Ahmad Loka sebagai salah satu anggota dari kelompok A03
f = input("Masukkan fungsi f(x) nya: ")
f = sympify(f)
xl = float(input("Masukkan batas bawahnya (XL): "))
xu = float(input("Masukkan batas atasnya (XU): "))
x_real = float(input("Masukkan X sebenarnya: "))
bagi_dua(xl, xu, x_real, f)- Masukkan input buat fungsinya dalam bentuk string, contoh:
f = x*3 + 10*x*2 - 7*x - 196 - Jadikan inputan fungsi tersebut menjadi operasi matematika menggunakan
sympify - Input nilai (float)
Xl,Xu, danXsebenarnya - Masuk ke sub-fungsi
bagi_dua
def error_true(x_real, xr):
return abs((x_real - xr) / x_real) * 100- Untuk menemukan nilai Error True, yang mana nilai yang didapat dibandingkan dengan nilai variabel sebenarnya
def error_aprox(xr, xr_old):
return abs((xr - xr_old) / xr) * 100 if xr != 0 else float('inf')- Untuk menemukan nilai Error Aprox, yang mana nilai yang didapat dibandingkan dengan nilai sebelumnya
- Pastikan bahwa
Xr != 0, jika tidakfloat('inf')karena angka 0 bisa menjadi pembagi
def bagi_dua(xl, xu, x_real, f):
x = symbols('x')
xr_old = 0
i = 0
while True:
xr = round((xl + xu) / 2, 2)
f_xl = f.subs(x, xl).evalf()
f_xr = f.subs(x, xr).evalf()
et_value = round(error_true(x_real, xr), 2)
if f_xl * f_xr < 0:
xu = xr
elif f_xl * f_xr > 0:
xl = xr
else:
if i == 0:
print(f"iterasi {i+1}: xr = {xr}, Et = {et_value}, Ea = Belum bisa dicari")
else:
ea_value = round(error_aprox(xr, xr_old), 2)
print(f"iterasi {i+1}: xr = {xr}, Et = {et_value}, Ea = {ea_value}")
break
if i == 0:
print(f"iterasi {i+1}: xr = {xr}, Et = {et_value}, Ea = Belum bisa dicari")
else:
ea_value = round(error_aprox(xr, xr_old), 2)
print(f"iterasi {i+1}: xr = {xr}, Et = {et_value}, Ea = {ea_value}")
if 0 <= et_value < 1:
break
xr_old = xr
i += 1- Mengubah
Xdalam bentuk string menjadi bentuk variabel math - Set
Xr_old = 0, hal ini berguna untuk menentukanEananti while True, dan diakhiri ketika0 < Et < 1xrdiperoleh dari(Xl + Xu) / 2, lalu dibulatkan dengan syntaxroundf_xldanf_xrdimasukkan ke dalam fungsi memakaif.subsdan dihitung menggunakanevalf()- Mencari
Et valuedengan masuk ke subfungsiEtlalu dibulatkan - Kalau semisal
f_xl * f_xr < 0, maka pada iterasi selanjutnyaxu = xr; sebaliknya,xl = xr - Selanjutnya ngeprint setiap iterasi, dan ada special case di
Eaketika index-nya masih 0 - Lalu cari
Ea value - Perbarui nilai
Xr_oldatauXrsebelumnya - Increment index