Anda di halaman 1dari 18

Laporan Praktikum

Komputasi Numerik

AP - 2

Solusi Persamaan Non-linier

Nama : Kevin Bazli Santoso


NPM : 140310220033
Hari/Tanggal : Jumat/ 17 maret 2023
Waktu : 07:30 - 16:30
Asisten : Azhar Aiman Dzulfiqar

LABORATORIUM KOMPUTASI

DEPARTEMEN FISIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS PADJADJARAN

2023
LEMBAR PENGESAHAN

KN 02

Deret Taylor

Nama : Kevin Bazli Santoso

NPM : 140310220033

Hari / Tanggal : Jumat/10 maret 2023

Waktu / Sesi : 07:30 - 16:30

Asisten : Azhar Aiman Dzulfiqar

Pretest Laporan Akhir

Jatinangor, Tanggal Bulan 2022


Asisten
I. Tujuan
a. Mahasiswa diharapkan mampu menemukan solusi persamaan non-
linier menggunakan
b. metode terbuka dan tertutup, mengetahui bagaimana menentukan laju
konvergensi setiap
c. metode, serta mengetahui perbedaan dan cara penggunaan setiap
metode.

II. Percobaan
Buatlah program dengan menggunakan bahasa Python untuk menentukan
solusi dari persamaan non-linier berikut menggunakan metode Bisection,
iterasi titik tetap, dan NewtonRaphson :

a. x 2 − 3𝑥 − 10 = 0 untuk −1 ≤ 𝑥 ≤ 1
i. Listing Program
 Untuk bisection
import math as mt
from sympy import *

a = float(input("Masukkan parameter 1: "))


b = float(input("Masukkan parameter 2: "))
E = 1

fa = a**2 - 3*a -10


fb = b**2 - 3*b -10

while (abs(E)>0.000001):
c = (a+b)/2
fc = c**2 - 3*c -10
E = abs((b-a)/2)
if(fa*fc)<0:
b = c
fb = fc
else:
a = c
fa = fc
print("%f \t %f" %(c,E))
print("Nilai akar polinom yang dicari adalah {}
dengan galat: {} ".format(c,E))
 Untuk fixed point iteration
import math as mt

a = float(input('masukan nilai tebakan awal: '))


E = 1
while (E>0.000001):
f = (3*a+10)/a
E = abs(f-a)
a = f
print(('%f \t %f' % (a , E)))
print('nilai akar yang dicari adalah : %.8f
dengan galat : %.8f' % (a, E))

 Untuk Metode Newton-Raphson


def func(x):
return x**2-3*x-10

def diff(x):
return 2*x - 3

x0 = 1
e = 0.00001
max = 100

for iterasi in range(max):


x1 = x0 - (func(x0)/diff(x0))
if abs(func(x1)) < e:
hasil = x1
print("Hasil hampiran akar:
{}".format(hasil))
print("mencapai Konvergen pada:
{}".format(iterasi))
break
else:
x0 = x1

ii. Tampilan Program


 Untuk bisection

 Untuk fixed point iteration


 Untuk Metode Newton-Raphson

−π π
b. sin(𝑥) = 0 untuk ≤x ≤
4 2
i. listing program
 Untuk metode bisection
import math as mt
from sympy import *
from math import pi, sin

a = -pi/4
b = pi/2

E = 1

fa = mt.sin(a)
fb = mt.sin(b)

while (abs(E)>0.000001):
c = (a+b)/2
fc = mt.sin(c)
E = abs((b-a)/2)
if(fa*fc)<0:
b = c
fb = fc
else:
a = c
fa = fc
print("%f \t %f" %(c,E))
print("Nilai akar polinom yang dicari adalah
{} dengan galat: {} ".format(c,E))
 Untuk metode Fixed iteration point
import math as mt

a = mt.pi/2
E = 1
while (E>0.001):
f = mt.sin(a)
E = abs(f-a)
a = f
print(('%f \t %f' % (a , E)))
print('nilai akar yang dicari adalah :
%.8f dengan galat : %.8f' % (a, E))

 Untuk metode Newton-raphson


import math
import numpy as np

def f(x):
return sin(x)
def f_aksen(x):
return cos(x)

x0 = float(pi/2)
e = 0.00001
N = float(input('Jumlah iterasi maksimum:
'))
n = 0

while True:
n += 1
x1 = x0 - f(x0) / f_aksen(x0)
galat = abs(x1-x0)
if galat < e or n >= N:
print('Jumlah iterasi sampai
konvergen: ', n)
break
x0 = x1

if n >= N:
print('Iterasi maksimum telah tercapai')
else:
print('Akar dari f(x) adalah %f dengan
galat %f' %(x1, galat))
ii. Tampilan program
 Untuk metode Bisection
 Untuk Fixed iteration point
 Untuk metode Newton-raphson

c. x 3−3 x−20=0 untuk 1 ≤ 𝑥 ≤ 4


i. Listing Program
import math as mt
from math import sqrt

a = float(input('masukan nilai tebakan awal: '))


E = 1
while (E>0.000001):
f = sqrt(3*a + 20)
E = abs(f-a)
a = f
print(('%f \t %f' % (a , E)))
print('nilai akar yang dicari adalah : %.8f dengan
galat : %.8f' % (a, E))

ii. Tampilan Program

d. e−2 x −4 x untuk 0 ≤ x ≤1
i. Listing Program
import math as mt
from sympy import *
from math import pi, sin

a = float(input("Masukkan parameter 1: "))


b = float(input("Masukkan parameter 2: "))
E = 1

fa = (exp(1**-2*a)) -4*a
fb = (exp(1**-2*b)) -4*b

while (abs(E)>0.000001):
c = (a+b)/2
fc = (exp(1**-2*c)) -4*c
E = abs((b-a)/2)
if(fa*fc)<0:
b = c
fb = fc
else:
a = c
fa = fc
print("%f \t %f" %(c,E))
print("Nilai akar polinom yang dicari adalah {}
dengan galat: {} ".format(c,E))
ii. Tampilan Program
e. x e−x − cos(2𝑥) 𝑢𝑛𝑡𝑢𝑘 0 ≤ 𝑥 ≤ 1 𝑑𝑎𝑛 1 ≤ 𝑥 ≤ 2 𝑑𝑎𝑛 − 1 ≤ 𝑥 ≤ 1

i. Listing Program
import math as mt
from sympy import *
from math import pi, sin

a = float(input("Masukkan parameter 1: "))


b = float(input("Masukkan parameter 2: "))
E = 1

fa = a*exp(-a) + cos(2*a)
fb = b*exp(-b) + cos(2*b)

while (abs(E)>0.000001):
c = (a+b)/2
fc = c*exp(-c) + cos(2*c)
E = abs((b-a)/2)
if(fa*fc)<0:
b = c
fb = fc
else:
a = c
fa = fc
print("%f \t %f" %(c,E))
print("Nilai akar polinom yang dicari adalah {}
dengan galat: {} ".format(c,E))
ii. Tampilan Program
 Untuk 0 ≤ 𝑥 ≤ 1
 Untuk 1 ≤ 𝑥 ≤ 2
 Untuk − 1 ≤ 𝑥 ≤ 1

Analisa
 Metode Bisection
Pada awal kode baris 1 dan 2, kode Kode tersebut mengimpor beberapa
modul, yaitu; math dengan alias mt: modul yang berisi fungsi-fungsi
matematika, seperti fungsi eksponensial (exp) dan cosinus (cos).
sympy: modul untuk komputasi simbolik.pi dan sin dari modul math. Pada
baris 4 dan 5 kode meminta input dari pengguna dalam bentuk float untuk
parameter 1 (a) dan parameter 2 (b). Pada baris ke 6 kode tersebut
memberi nilai awal untuk galat (E) dengan 1. Pada baris ke 8 dan 9 Kode
tersebut menghitung nilai fungsi pada titik a dan b, yang fungsinya diganti
dengan
a. x 2 − 3𝑥 − 10 = 0 untuk −1 ≤ 𝑥 ≤ 1
−π π
b. sin(𝑥) = 0 untuk ≤x ≤
4 2
c. x 3−3 x−20=0 untuk 1 ≤ 𝑥 ≤ 4
d. e−2 x −4 x untuk 0 ≤ x ≤1
e. xe^(-x) − cos(2𝑥) 𝑢𝑛𝑡𝑢𝑘 0 ≤ 𝑥 ≤ 1 𝑑𝑎𝑛 1 ≤ 𝑥 ≤ 2 𝑑𝑎𝑛 − 1 ≤ 𝑥 ≤ 1

Pada baris ke 11 – 19, kode tersebut melakukan iterasi menggunakan


metode biseksi hingga nilai galat (E) kurang dari 0.000001. Pada setiap
iterasi, nilai tengah (c) dihitung sebagai rata-rata dari a dan b. Kemudian,
nilai fungsi pada titik c (fc) dihitung. Selanjutnya, nilai galat (E) dihitung
sebagai setengah selisih antara b dan a. Jika nilai fungsi pada titik a dan c
memiliki tanda yang berbeda, maka nilai b diubah menjadi c dan nilai fb
diubah menjadi fc. Sebaliknya, jika nilai fungsi pada titik a dan c memiliki
tanda yang sama, maka nilai a diubah menjadi c dan nilai fa diubah
menjadi fc. Pada setiap iterasi, nilai c dan E dicetak. Pada baris terahir
kode tersebut mencetak nilai akar yang ditemukan beserta nilai galat akhir

 Metode fixed_position_iteration
Pada awal kode baris pertama mengimpor modul math dan memberi alias
mt, sama seperti baris pertama baris kedua mengimpor fungsi sqrt dari
modul math. Baris ke 4 kode mengambil input tebakan awal dari pengguna
dan mengonversinya ke tipe data float. Baris ke lima kode tersebut
memberi nilai awal untuk galat (E). pada baris ke 7 terdapat kode
perulangan while yang akan berjalan jika E>0,000001 dan pada baris
kedelapan fungsi yang dicari menggunakan metode fixed position iteration
dapat dimasukan. Pada 9nilai galat atau e diberi nilai baru dari rumus E =
abs(f-a). baris ke 10 kode mngupdate nilai a dengan nilai f, sehingga titik
awal iterasi pada iterasi berikutnya akan berubah. Dan baris ke 11 akan
mencetak nilai a dan E pada setiap iterasi, dengan format string yang
menggabungkan kedua nilai tersebut dengan menggunakan \t sebagai
pemisah. Pada baris ke 12 mengakhiri loop while. Baris ke 14 mencetak
nilai akhir a dan E dengan format string yang menampilkan kedua nilai
tersebut dengan delapan angka di belakang koma. Pesan yang dihasilkan
mencakup nilai akar dan galatnya.
 Metode Newton_Raphson
Pada baris pertama kode mengimpor modul math yang akan digunakan
untuk memanggil fungsi trigonometri sin dan cos. Dan juga modul numpy
pada baris kedua. Pada baris 4 dan 5 fungsi (x) yang akan dicari nilainya
dapat diinput di baris 4 dan turunannya pada bari 5. Pada baris ke 7 kode
menginisialisasi nilai awal tebakan x0 dengan pi/2, yang merupakan titik
awal pencarian akar.dan pada baris 8 kode enginisialisasi nilai toleransi
galat e dengan 0.00001. pada baris ke 9 kode minta input pada user untuk
iterasi. Pada baris ke 10 variabel n diberikan nilai 0 sebagai pembatas
untuk perulangan while pada baris 12 yang dimana perulangan tersebut
akan terus berjalan jika galat < e atau n >= N. pada isi nya perulangan ini
akan menghitung x1 = x0 - f(x0) / f_aksen(x0). Galat dicari dengan
abs(x1-x0). Selama perulangan akan terprint ('Akar dari f(x) adalah %f
dengan galat %f' %(x1, galat)).
III. TUGAS AKHIR
a. Turunkan Persamaan 2.5 mengunakan pendekatan deret Taylor.
Pertama uraikan f( x i+1 ¿ di sekitar x i ke dalam Deret Taylor
seperti berikut :

𝑓( x i+1 ) = 𝑓( x i ) + ( x i+1 – x i) f ' ( x )+ 0


i

Bila dipotong sampai orde ke-2 maka :

𝑓( x i+1 ) = 𝑓( x i ) + ( x i+1 – x i) f ' ( x )


i

Karena perintah soal mencari akar, maka fungsi 𝑓( x i+1 ) = 0 jadi :

0 = 𝑓( x i ) + ( x i+1 – x i) f ' ( x )
i

Berdasarkan persamaan tersebut rumus metode Newton Raphson


yaitu;

f ( xi )
x i+1=x i ' ( xi )
f
Dengan 𝑖 = 0,1,2,3, …. dan 𝑓′(𝑥𝑖 ) ≠ 0.
b. Hitunglah berapa iterasi yang diperlukan untuk mencapai konvergensi
dalam mencari solusi persamaan 𝑥 2 − 3𝑥 − 10 = 0menggunakan
metode Bisection dengan tingkat kesalahan yang diperbolehkan
bernilai 10−3 serta nilai 𝑎 = 1 dan 𝑏 = 3,5. Bandingkan dengan hasil
yang didapat jika dikerjakan secara analitik menggunakan Persamaan
2.1
Jawaban :
i. Listing program
a = 1
b = 3.5
while b-a >= 0.001 :
x = (a+b)/2
if x**2 - 3*x - 10 < 0:
a = x
if x**2 - 3*x -10 > 0:
b = x
else:
print("Akar persamaannya => ", x)
break
print("Akar yang paling dekat => ", x)
ii. Tamnpilan Program

iii. Analisa
Pada x 2 – 3 x – 10 solusi analitiknya adalah
−b ± √ b 2−4 ac
Akar =
2a
Masukan nilai :
3± √ (−3 ) − ( 4 )( 1 ) (−10 )
2

2( 1)
Sehingga mendapatkan hasilnya :
x 1 , x 2 = (−2,5)

Dengan demikian dapat dibuktikan bahwa x 2 – 3 x – 10 tidak


memiliki interval dianatara 1 hingg 3,5. Akar persamaan untuk
fungsi tersebut berada di -2 dan 5 pada sumbu x.

c. Buatlah program dengan menggunakan bahasa Python untuk


menentukan solusi dari persamaan non-linier pada bagian
Percobaan 4 menggunakan metode Secant dan Regula Falsi
 Listing Program
 Untuk metode secant
import math as mt

def fungsi(x):
return mt.exp(-2*x)-(4*x)

x0 = 4.0
x1 = -1.0
e = 0.00001
max = 100
for iterasi in range(max):
x_olah = x0 - ((x0-x1)*fungsi(x0)/(fungsi(x0)-
fungsi(x1)))
if abs(fungsi(x_olah)) < e:
hasil = x_olah
print("Hasil hampiran akar:
{}".format(x_olah))
print("mencapai iterasi ke:
{}".format(iterasi))
break
else:
x1 = x0
x0 = x_olah
 Metode Regulas falsi
import math as mt

def f(x):
return np.exp(-2*x)-4*x

a = float(input('Masukkan batas rentang bawah:


'))
b = float(input('Masukkan batas rentang atas:
'))
e = 0.00001
N = int(input('Masukkan jumlah maksimum iterasi:
'))
n = 0

while True:
n += 0
fa = f(a)
fb = f(b)
c = (a*fb-b*fa)/(fb-fa)
fc = f(c)
galat = abs(fc)
if galat < e or n >= N:
break
if fa*fc < 0:
b = c
else:
a = c
print('%f \t %f' %(c,e))
if n >= N:
print('Iterasi maksimum telah tercapai')
else:
print('Akar dari f(x) adalah %f dengan galat
%f' %(c, galat))
 Tampilan Program
 Untuk Regulas Falsi

 Untuk metode secant

 Analisa Program
Kedua metode merupaka metode yang mirip jika dilihat namun
jika ditinjau kembali dapat diketahui perbedaan yang paling
terlihat dari keduanya adalah regula falsi meggunakan dua titik
batas dan nilai dari fungsi yang dimasukan dua titik tersebut
akan dicari dan digunakan untuk menentukan pendekatan baru
metode ini menggunakan pendekatan baru sebagai
perpotongan garis antara dua titik awal dengan garis yang
menghubungkan nilai fungsi di dua titik tersebut sedangkan
metode secant menghitung pendekatan baru dari nilai fungsi
berdasarkan duat titik batas dan menggunakan pendekatan baru
sebagai perpotongan garis anatara dua titik awal sumbu x.
d. Buatlah tabel perbandingan untuk metode Bisection, iterasi titik
tetap, NewtonRaphson, Secant, dan Regula Falsidalam
menentukan solusi persamaan 𝑒 −2𝑥 − 4𝑥 = 0 dengan parameter
yang sama (error, toleransi, batas/tebakan awal, dan hasilnya
apakah konvergen/divergen)untuk setiap metode. Sertakan pula
jumlah langkah/jumlah iterasiyang terjadi saat melakukan proses
perhitungan. Kemudian buatlah analisa berdasarkan tabel tersebut.

Anda mungkin juga menyukai