Kalkulus 2.1

 avatar
unknown
python
2 years ago
1.8 kB
3
Indexable
import numpy as np
def g(x):
  y = np.e**(x**2/2)
  return y

# Latihan 2.1 bagian a
def euler(x_end, step_size):
  def f(x, y):
    return x*y

  x = 0
  xfin = x_end
  y = 1
  h = step_size
  xlist = []
  ylist = [1.0]

  j = 0
  while j >= 0:
    xj = x + j*h
    if xj > xfin:
      break
    xlist.append(xj)
    j += 1

  for i in range(len(xlist)-1):
    yi = y + f(x, y)*h
    x += h
    ylist.append(yi)
    y = yi

  return [xlist, ylist]

xlist_euler5 = euler(2, 0.5)[0]
ylist_euler5 = euler(2, 0.5)[1]

ylistanl1 = []
for k in xlist_euler5:
  ylistanl1.append(g(k))

print(33*"-") ; print(2*" ", "METODE EULER DENGAN H = 0.5", 2*" ") ; print(33*"-")
dict1 = {}
for l in range(len(xlist_euler5)):
  dict1[l+1] = [xlist_euler5[l], ylist_euler5[l], ylistanl1[l]]
print ("{:<4} {:<6} {:<10} {:<10}".format('No','x','y numerik','y analitik'))
for n, v in dict1.items():
    x, y_numerik, y_analitik = v
    print ("{:<4} {:<6} {:<10} {:<10.5f}".format(n, x, y_numerik, y_analitik))
print('')

# Latihan 2.1 bagian b
xlist_euler2 = euler(2, 0.2)[0]
ylist_euler2 = euler(2, 0.2)[1]

ylistanl2 = []
for k in xlist_euler2:
  ylistanl2.append(g(k))

print(33*"-") ; print(2*" ", "METODE EULER DENGAN H = 0.2", 2*" ") ; print(33*"-")
dict2 = {}
for l in range(len(xlist_euler2)):
  dict2[l+1] = [xlist_euler2[l], ylist_euler2[l], ylistanl2[l]]
print ("{:<4} {:<6} {:<10} {:<10}".format('No','x','y numerik','y analitik'))
for n, v in dict2.items():
    x, y_numerik, y_analitik = v
    print ("{:<4} {:<6.1f} {:<10.5f} {:<10.5f}".format(n, x, y_numerik, y_analitik))
print('')

# Latihan 2.1 bagian c
import matplotlib.pyplot as plt

xfine = np.linspace(0, 2, 100)
yfine = g(xfine)

plt.plot(xlist_euler5, ylist_euler5, 'o-r', xlist_euler2, ylist_euler2, 'x-g', xfine, yfine, '-k')
plt.legend(['h = 0.5', 'h = 0.2', 'Analitik'])
plt.show()
Editor is loading...