Anda di halaman 1dari 5

Nama : Frissa Anindita Alan

NPM : 2115031008

Kelas : TE C

TUGAS METODE NUMERIK

Buatlah contoh perhitungan menggunakan metode golden section dengan menggunakan program
python atau ms. Excel

(Soal) Menentukan interval, batas atas dan batas bawah, dimana diprediksi hanya memiliki 1 nilai
optimum/ekstremum

f ( x )=4 x−1,8 x 2+ 1,2 x 3−0,3 x 4


Tahap 1 : menentukan batas atas dan bawah

a (batas bawah) = 1 dan b (batas atas) = 3

Tahap 2 :menghitung setiap fungsi dari masing-masing batas

f ( x )=4 x−1,8 x 2+ 1,2 x 3−0,3 x 4


X = 1, f ( x )=3,1

X = 3, f ( x )=3,9

Tagap 3 : hitung nilai tengah X1 dan X2

GR=
√ 5−1 =0,618
2
d=GR. ( b−a )
¿ 0,61 8 ( 3−1 )=1,236
x 1=b−d=3−1,236=1,764

x 2=a+ d=1+1,236=2,236

Tahap 4 : Evaluasi nilai fungsi dari x 1 dan x 2


2 3 4
f ( x )=4 x−1,8 x + 1,2 x −0,3 x
x 1=1,764 , f ( x 1 )=5,137

x 2=2,236 , f ( x 2 )=5 , 86
Jika f ( x 1 ) > f ( x 2 ) maka titik optimum berada diantara a dan x 2

Jika f ( x 1 ) < f ( x 2 ) maka titik optimum berada diantara b dan x 1

Tahap 5 : Literasi 1 selesai, hilangkan area yang lebih kecil dan pindahkan nilai batas

Jika f ( x 1 ) > f ( x 2 ), maka eliminasi semua x > x 2, x 2 menjadi nilai b yang baru, nilai a tetap, hitung nilai
x 1 baru

Jika f ( x 1 ) < f ( x 2 ), maka eliminasi semua x > x 1, x 1 menjadi nilai a yang baru, nilai b tetap, hitung nilai
x 2 baru

Ulangi tahap 1-5 hingga nilai menjadi konvergen

Literasi 2

Jika f ( x 1 ) > f ( x 2 ), maka eliminasi semua x > x 2, x 2 menjadi nilai b yang baru, nilai a tetap, hitung nilai
x 1 menjadi x 2 baru

Jika f ( x 1 ) < f ( x 2 ), maka eliminasi semua x > x 1, x 1 menjadi nilai a yang baru, nilai b tetap, hitung nilai
x 2 menjadi x 1 baru

Literasi 3

Jika f ( x 1 ) > f ( x 2 ), maka eliminasi semua x > x 2, x 2 menjadi nilai b yang baru, nilai a tetap, hitung nilai
x 1 menjadi x 2 baru

Jika f ( x 1 ) < f ( x 2 ), maka eliminasi semua x > x 1, x 1 menjadi nilai a yang baru, nilai b tetap, hitung nilai
x 2 menjadi x 1 baru

Dengan menggunakan python

Metode golden section


import numpy as np
import matplotlib.pyplot as plt
from IPython.display import clear_output
import time

def func_fx(x):
fx=np.sin(x)
return fx
def check_pos(x1,x2):
if x2<x1:
label='right'
else:
label=''
return label
def update_interior(x1,xu):
d=((np.sqrt(5)-1)/2)*(xu-x1)
x1=x1+d
x2=xu-d
return x1,x2

#mencari fungsi maksimum


def find_max(x1,xu,x,x2,label):
fx1=func_fx(x1)
fx2=func_fx(x2)
if fx2>fx1 and label=='right':
x1=x1
xu=x1
new_x=update_interior(x1,xu)
x1=new_x[0]
x2=new_x[1]
xopt=x2
else:
x1=x2
xu=xu
new_x=update_interior(x1,xu)
x1=new_x[0]
x2=new_x[1]
xopt=x1
return x1,xu,xopt

#mencari fungsi minimum


def find_min(x1,xu,x,x2,label):
fx1=func_fx(x1)
fx2=func_fx(x2)
if fx2>fx1 and label=='right':
x1=x2
xu=xu
new_x=update_interior(x1,xu)
x1=new_x[0]
x2=new_x[1]
xopt=x1
else:
x1=x1
xu=x1
new_x=update_interior(x1,xu)
x1=new_x[0]
x2=new_x[1]
xopt=x2
return x1,xu,xopt

#fungsi plot
def plot_graph(x1,xu,x2):
clear_output(wait=True)

#plot grafik sinus


plt.plot(x,y)
plt.plot([0,6],[0,0],'k')

#plot point x1
plt.plot(x1,func_fx(x1),'ro',label='1')
plt.plot([x1,x1],[0,func_fx(x1)],'k')

#plot x2 point
plt.plot(x2,func_fx(x2),'bo',label='x2')
plt.plot([x2,x2],[0,func_fx(x2)],'k')
#plot xl line
plt.plot([xl,xl],[0,func_fx(xl)])
plt.annotate('xl',xy=(xl-0.01,-0.2))

#plot xu line
plt.plot([xu,xu],[0,func_fx(xu)])
plt.annotate('xu',xy=(xu-0.01,-0.2))

#plot x1 line
plt.plot([x1,x1],[0,func_fx(x1)],'k')
plt.annotate('x1',xy=(x1-0.01,-0.2))

#plot x2 line
plt.plot([x2,x2],[0,func_fx(x2)],'k')
plt.annotate('x2',xy=(x2-0.01,-0.2))

#y-axis limit
plt.ylim([-1.2,1.2])
plt.show()

def golden_search(xl,xu,mode,et):
it=0
e=1
while e>=et:
new_x=update_interior(xl,xu)
x1=new_x[0]
x2=new_x[1]
fx1=func_fx(x1)
fx2=func_fx(x2)
label=check_pos(x1,x2)
clear_output(wait=True)
plot_graph(xl,xu,x1,x2) #PLOTTING
plt.show()

#SELECTING AND UPDATING BOUNDARY-INTERIOR POINTS


if mode=='max':
new_boundary=find_max(xl,xu,x1,x2,label)
elif mode=='min':
new_boundary=find_min(xl,xu,x1,x2,label)
else:
print('Please define min/max mode')
break #exit if mode not min or max
xl=new_boundary[0]
xu=new_boundary[1]
xopt=new_boundary[2]

it+=1
print ('Iteration: ',it)
r=(np.sqrt(5)-1)/2 #GOLDEN RATIO
e=((1-r)*(abs((xu-xl)/xopt)))*100 #Error
print('Error:',e)
time.sleep(1)

#GENERATE POINT FOR SINE GRAPH


x=np.linspace(0,6,100)
y=func_fx(x)

#EXECUTING GOLDEN SEARCH FUNCTION


golden_search(0,6,'max',0.05)

Anda mungkin juga menyukai