Anda di halaman 1dari 9

Nama : Anisa Nurul Azizah

NIM : 18/427661/PA/18621
Tugas Praktikum Pengantar Teori Optimisasi

Soal :
Carilah tiitk optimum dari fungsi berikut, kemudian tampilkan grafiknya dalam dua dan tiga
dimensi:

1. f (x)=( x 12−2 x 1 +4 x22−8 x 2 )2

Jawab
Syntax:

import sympy as sym
import numpy as np
import pandas as pd

#function grad
def grad(f,nilai,n):
  G=[]
  
  for i in range (n):
    G.append(sym.diff(f,x[i])) #turunan parsial pertama dari f terha
dap x_i
    G[i] = sym.lambdify(x,G[i]) #ubah turunan jadi function
    calc='G[%d](%f' %(i, nilai[0,0]) 
    for j in range (1,n):
      calc=calc+',%f' %nilai[0,j]
    calc=calc+')'
    G[i]=eval(calc)

  G = np.matrix(G).transpose()
  return (G)

#function hessian
def hessian(f,nilai,n):
  H=[]

  for i in range(n):
    row = []
    for j in range (n):
      row.append(sym.diff(sym.diff(f,x[i]),x[j]))
      row[j] = sym.lambdify(x,row[j])

      calc = 'row[%d](%f' %(j, nilai [0,0])
      for k in range (1,n):
        calc = calc +',%f' %nilai[0,k]
      calc= calc+')'
      row[j]=eval(calc)

    H.append(row)

  H=np.matrix(H)
  return (H)

#inisialisasi variabel
x_awal = np.matrix([0,3])
n = x_awal.shape[1]
tol = 0.0001

#ubah x0,x1,... menjadi simbol
x = []
for i in range(n):
  x.append(sym.Symbol('%d' %i))

f = ((x[0])**2 -2*x[0] +4*(x[1])**2 -8*x[1])**2
f_func = sym.lambdify(x,f)
e = [None]
xk = [x_awal]

calc = 'f_func(%f' %x_awal[0,0]
for i in range (1,n):
  calc=calc+',%f' %x_awal[0,i]
calc=calc+')'
fxk = [eval(calc)]

#hitung metode newton iterasi pertama
G = grad(f,x_awal,n)
H = hessian(f,x_awal,n)
x_berikutnya = x_awal-(np.linalg.inv(H)*G).transpose()
xk.append(x_berikutnya)
e.append(np.linalg.norm(x_berikutnya-x_awal))

calc = 'f_func(%f' %x_berikutnya[0,0]
for i in range (1,n):
  calc = calc + ',%f' %x_berikutnya[0,i]
calc = calc+')'
fxk.append(eval(calc))

#jalankan metode newton
i=1
while e[i]>tol:
  G = grad(f,xk[i],n)
  H = hessian(f,xk[i], n)
  x_berikutnya = xk[i]-(np.linalg.inv(H)*G).transpose()
  xk.append(x_berikutnya)
  e.append(np.linalg.norm(xk[i+1]-xk[i]))

  calc = 'f_func(%f' %x_berikutnya[0,0]
  for j in range (1,n):
    calc = calc + ',%f' %x_berikutnya[0,j]
  calc = calc+')'
  fxk.append(eval(calc))

  i = i+1

#output
xp = xk[i]
fxp = fxk[i]
print ("Titik Optimum dari f adalah ",xp)
print("Nilai Optimum dari f adalah ", fxp)

data ={'x':xk, 'f(x)':fxk, 'e':e}
print(pd.DataFrame(data))

Output:

Syntax Grafik 2d:


#plot grafik 2d jika dilihat dari atas
import matplotlib.pyplot as plt
def f(x,y):
  return (x**2 -2*x +4*y**2 -8*y)**2

x=np.linspace(-100,100)
y=np.linspace(-100,100)

X,Y=np.meshgrid (x,y)
G=f(X,Y)
#plt.scatter(xp[0],xp[1])
plt.contour(X,Y,G,10)
plt.title('Grafik Fungsi 2 Dimensi')
plt.grid()
plt.show()

Output:

Syntax Grafik 3d:

x=np.linspace(-100, 100, 100)
y=np.linspace(-100, 100, 100)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)
                   
ax = plt.axes(projection = '3d')
ax.contour3D(X, Y, Z, 100)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.title('Grafik Fungsi 3 Dimensi')
Output:
Interpretasi:
Dengan menggunakan Metode Newton n Variabel, diperoleh titik optimum dari
2
fungsi f ( x )=( x 12 −2 x 1 +4 x 22−8 x 2 ) dengan toleransi 0,0001 dan titik awal [0 3] yaitu
[[0.45767401 2.08465188]] dan nilai Optimum dari f adalah 7.103866736488418e-12.

2. f (x)=2 x 12+ x22 + x 1 x 2−x 1−3 x 2

Jawab
Syntax:
import sympy as sym
import numpy as np
import pandas as pd

#function grad
def grad(f,nilai,n):
  G=[]
  
  for i in range (n):
    G.append(sym.diff(f,x[i])) #turunan parsial pertama dari f t
erhadap x_i
    G[i] = sym.lambdify(x,G[i]) #ubah turunan jadi function
    calc='G[%d](%f' %(i, nilai[0,0]) 
    for j in range (1,n):
      calc=calc+',%f' %nilai[0,j]
    calc=calc+')'
    G[i]=eval(calc)

  G = np.matrix(G).transpose()
  return (G)

#function hessian
def hessian(f,nilai,n):
  H=[]

  for i in range(n):
    row = []
    for j in range (n):
      row.append(sym.diff(sym.diff(f,x[i]),x[j]))
      row[j] = sym.lambdify(x,row[j])

      calc = 'row[%d](%f' %(j, nilai [0,0])
      for k in range (1,n):
        calc = calc +',%f' %nilai[0,k]
      calc= calc+')'
      row[j]=eval(calc)
    H.append(row)

  H=np.matrix(H)
  return (H)

#inisialisasi variabel
x_awal = np.matrix([0,3])
n = x_awal.shape[1]
tol = 0.0001

#ubah x0,x1,... menjadi simbol
x = []
for i in range(n):
  x.append(sym.Symbol('%d' %i))

f = 2*(x[0])**2 +x[1]**2 +x[0]*x[1] -x[0] -3*x[1]
f_func = sym.lambdify(x,f)
e = [None]
xk = [x_awal]

calc = 'f_func(%f' %x_awal[0,0]
for i in range (1,n):
  calc=calc+',%f' %x_awal[0,i]
calc=calc+')'
fxk = [eval(calc)]

#hitung metode newton iterasi pertama
G = grad(f,x_awal,n)
H = hessian(f,x_awal,n)
x_berikutnya = x_awal-(np.linalg.inv(H)*G).transpose()
xk.append(x_berikutnya)
e.append(np.linalg.norm(x_berikutnya-x_awal))

calc = 'f_func(%f' %x_berikutnya[0,0]
for i in range (1,n):
  calc = calc + ',%f' %x_berikutnya[0,i]
calc = calc+')'
fxk.append(eval(calc))

#jalankan metode newton
i=1
while e[i]>tol:
  G = grad(f,xk[i],n)
  H = hessian(f,xk[i], n)
  x_berikutnya = xk[i]-(np.linalg.inv(H)*G).transpose()
  xk.append(x_berikutnya)
  e.append(np.linalg.norm(xk[i+1]-xk[i]))
  calc = 'f_func(%f' %x_berikutnya[0,0]
  for j in range (1,n):
    calc = calc + ',%f' %x_berikutnya[0,j]
  calc = calc+')'
  fxk.append(eval(calc))

  i = i+1

#output
xp = xk[i]
fxp = fxk[i]
print ("Titik Optimum dari f adalah ",xp)
print("Nilai Optimum dari f adalah ", fxp)

data ={'x':xk, 'f(x)':fxk, 'e':e}
print(pd.DataFrame(data))

Output:

Syntax Grafik 2d:


#plot grafik 2d jika dilihat dari atas
import matplotlib.pyplot as plt
def f(x,y):
  return 2*x**2 +y**2 +x*y -x -3*y

x=np.linspace(-100,100)
y=np.linspace(-100,100)

X,Y=np.meshgrid (x,y)
G=f(X,Y)
#plt.scatter(xp[0],xp[1])
plt.contour(X,Y,G,10)
plt.title('Grafik Fungsi 2 Dimensi')
plt.grid()
plt.show()
Output:

Syntax Grafik 3d:


#plot grafik 3d
x=np.linspace(-100, 100, 100)
y=np.linspace(-100, 100, 100)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)
                   
ax = plt.axes(projection = '3d')
ax.contour3D(X, Y, Z, 100)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.title('Grafik Fungsi 3 Dimensi')

Output:

Interpretasi:
Dengan menggunakan Metode Newton n Variabel, diperoleh titik optimum dari
fungsi f (x)=2 x 12+ x22 + x 1 x 2−x 1−3 x 2dengan toleransi 0,0001 dan titik awal [0 3] yaitu
[[-0.14285729 1.57142814]] dan nilai Optimum dari f adalah -2.2857142857139996

Anda mungkin juga menyukai