Difference between revisions of "Rizkyawan Wibawa"

From ccitonlinewiki
Jump to: navigation, search
Line 207: Line 207:
  
 
*Untuk video coding 1A dan 1B, tidak dapat saya upload sehubungan karena ukurannya terlalu besar.
 
*Untuk video coding 1A dan 1B, tidak dapat saya upload sehubungan karena ukurannya terlalu besar.
 +
 +
'''Coding untuk sistem buatan sendiri menggunakan metode Runge-Kutta'''
 +
*Sebuah rudal ditembakkan dengan kecepatan awal dan sudut awal yang diasumsikan oleh pengguna
 +
*Target: menemukan jarak tempuh horizontal dari rudal saat t = 2 detik
 +
 +
        import math
 +
        import numpy as np
 +
 +
        def F(x,y):
 +
        F = np.zeros(2)
 +
        F[0] = y[1]
 +
        F[1] = y[1] - 9.8*x
 +
        return F
 +
 +
        x = 0.0
 +
        xStop = 2.0
 +
        v = float(input("kecepatan awal rudal: "))
 +
        y = np.array ([v , -9.8])
 +
        h = 0.1
 +
        freq = 2
 +
 +
        def integrate (F,x,y,xStop,h):
 +
        def run_kut4(F,x,y,h):
 +
        K0 = h * F(x,y)
 +
        K1 = h * F(x + h/2.0, y + K0/2.0)
 +
        K2 = h * F(x + h/2.0, y + K1/2.0)
 +
        K3 = h * F(x + h, y + K2)
 +
        return (K0 + K1*2.0 + K2*2.0 + K3)/6.0
 +
 +
        X = []
 +
        Y = []
 +
        X.append(x)
 +
        Y.append(y)
 +
       
 +
        while x < xStop:
 +
        h = min(h, xStop - x)
 +
        y = y + run_kut4(F,x,y,h)
 +
        x = x + h
 +
        X.append(x)
 +
        Y.append(y)
 +
 +
        def printSoln(X,Y,freq):
 +
        def printHead(n):
 +
        print ("\n        x ", end=" ")
 +
        for i in range (n):
 +
        print ("    y[",i,"] ",end=" ")
 +
        print ()
 +
 +
        printSoln(X,Y,freq)

Revision as of 20:25, 5 November 2019

Rizkyawan Wibawa

1606835260

Departemen Teknik Mesin

Kenapa kita belajar Kalkulus?

  • Karena kalkulus adalah salah satu ilmu dasar yang akan digunakan selama belajar di jurusan Teknik Mesin. Aplikasi daripada materi-materi kalkulus sendiri terdapat pada mata kuliah departemen/jurusan, diantaranya Termodinamika Dasar, Mekanika Fluida, dan Kinematika & Dinamika.

Rabu, 4 September 2019: Pertemuan 1

  • Dalam proses pembelajaran, starting point setiap orang bisa berbeda. Output yang diharapkan dari hasil proses belajar-mengajar adalah peningkatan yang terjadi pada end point.
  • Selama pembelajaran metode numerik, mhs akan bersinggungan dengan beberapa aspek, diantaranya: algoritma, flow chart, dan programming.
  • Aplikasi metode numerik, sebagai contoh, terdapat pada perangkat lunak yang dibuat dengan tujuan melakukan CAD, CAM, dan CAE.

Reminder tugas pekan 1

  • Belajar Python
  • Membuat program untuk menyelesaikan soal aritmatika

Pembelajaran awal untuk Python

  • Merupakan salah satu bentuk bahasa pemrograman yang terbilang baru, namun telah cukup banyak digunakan, khususnya di lingkungan kampus MIT (berdasarkan informasi dari Pak Radon).
  • Menggunakan syntax yang relatif mudah dipahami, dan mudah dipelajari di bagian awal untuk membuat program-program sederhana.
  • Contoh program yang dimaksud: Mencetak kalimat di layar, membuat cerita dengan variabel nama karakter dan umur karakter yang dapat diubah-ubah sesuka hati, mencetak bentuk geometri sederhana.
  • Untuk membuat program sederhana yang dapat menyelesaikan suatu fungsi aljabar, kita akan memerlukan beberapa add-on yang dapat memberikan library yang mendukung fungsi-fungsi yang akan kita gunakan dalam memecahkan fungsi aljabar. Add-on yang saya maksud disini salah satunya adalah SymPy, yang memiliki library untuk menyelesaikan fungsi dengan variabel dan simbol-simbol yang umum digunakan pada pembelajaran aljabar.

Rabu, 11 September 2019: Pertemuan 2

  • Breakdown silabus Metode Numerik
  • Target pekan ini: dasar-dasar pemrograman
  • Agenda di kelas: mencetak "hello world", melakukan operasi aritmetika sederhana, mempelajari tentang tuples dan lists, cara mengakses salah satu variabel yang terdapat di dalam tuples dan lists

Rabu, 18 September 2019: Pertemuan 3

  • Kuis pemrograman dengan Python: membuat program yang dapat memunculkan suku ke-n dari deret Fibonacci (n dapat dimasukkan angka berapapun sesuai yang kita inginkan)
  • Pendekatan yang dapat digunakan: loop 'while'
  • Mendefinisikan variabel untuk dua suku pertama dan nilai iterasi, kemudian memerintahkan Python untuk mengulang operasi penjumlahan dua suku sebelumnya sampai pada jumlah suku yang diinginkan untuk dicetak pada layar.
  • Contoh Program:
      a = float(input('length :'))
      x = 1
      y = 1
      i = 0
      while i < a:
      print(x)
      z = x + y
      # Modify values
      x = y
      y = z
      i += 1
  • Loop 'while' ini juga dapat digunakan untuk membuat program yang bisa menentukan suku ke-sekian dalam deret lainnya, misalnya dalam deret geometri dengan faktor pengali 2.
  • Program:
      a = float(input("Suku ke: "))
      x = 1
      i = 1
      while i < a :
      z = x + x
      x = z
      i += 1
      print ("Bilangannya adalah: ")
      print (x)

Rabu,2 Oktober 2019: Pertemuan 5

  • Memahami bagaimana cara menggunakan ilmu metode numerik untuk memodelkan berbagai permasalahan yang ada dalam dunia engineering.
  • Tugas: membaca tentang metode penyelesaian persamaan diferensial.
  • Materi pertemuan: aljabar simultan
  • Mempelajari penggunaan sistem persamaan linier untuk menyelesaikan masalah engineering.
  • Diberikan contoh pemodelan sistem pegas tunggal menjadi suatu sistem persamaan linier dengan menerjemahkan rumus-rumus pegas menjadi variabel pada matriks.
  • Setelahnya, diberikan contoh pemodelan sistem pegas ganda dengan susunan seri, memisahkan bagian-bagian sistem berdasarkan node. Kemudian dibuat matriks variabel konstanta pegas, variabel perpindahan, dan variabel beban.
  • Proses pembuatan matriks untuk sistem pegas yang bukan tunggal: menggunakan superposisi matriks (pelebaran matriks).
  • Dijelaskan mengenai penulisan program pada Python untuk menyelesaikan permasalahan sistem pegas seri.
  • Kemudian dijelaskan juga mengenai penulisan program pada Python untuk menyelesaikan sistem persamaan linier, dengan cara penggunaan modul third-party seperti numpy dan sympy, dan tanpa menggunakan modul third-party.

Rabu, 9 Oktober 2019: Pertemuan 6

  • Inti pembuatan program pada Python/bahasa pemrograman lainnya: memodelkan masalah engineering untuk kemudian diproses perhitungannya melalui komputer.
  • Asumsi dalam pemodelan masalah: benda memiliki sifat continuum, dimana molekul mengisi seluruh ruang pada benda.
  • Persamaan yang berlaku pada benda continuum: persamaan diferensial
  • Contoh persoalan: pada suatu struktur berupa batang yang diberikan gaya tarik F di ujungnya dan ujung lainnya menempel pada pondasi/dinding.
  • Tegangan yang terjadi di setiap bagian pada batang dihitung berdasarkan posisi dan panjang bagian.
  • Menyelesaikan persamaan diferensial metodenya cukup banyak
  • Satu yang dibahas hari ini yang cukup umum digunakan: metode Runge-Kutta
  • Banyak persamaan diferensial yang tidak bisa diselesaikan dengan metode perhitungan eksak, namun bisa diselesaikan dengan metode numerik.
  • Salah satu contoh aplikasi yang berhasil dilakukan: menentukan laju reaksi untuk memproses kelapa sawit menjadi bahan bakar bio-bensin.
  • Setiap metode penyelesaian persamaan diferensial pasti memiliki error, tidak ada yang sepenuhnya benar.
  • Metode Runge-Kutta: dapat diberlakukan untuk persamaan diferensial orde 1,2,3, dan 4.
  • Perbedaan masing-masing orde tersebut berada pada error dari nilai yang didapatkan.
  • Bagian paling penting dari menyelesaikan persamaan diferensial dengan metode numerik: mengetahui persamaan diferensial, dan mengetahui nilai awal.
  • Contoh yang diberikan dikelas: menggunakan metode numerik untuk menyelesaikan persamaan diferensial dalam menghitung kecepatan dan posisi ketinggian bola yang jatuh bebas dari ketinggian 100 meter.
  • Diajarkan cara menentukan perhitungan untuk setiap iterasi dari fungsi kecepatan dan posisi. Diberitahukan juga mengenai perbedaan penggunaan loop for dan loop while pada Python.

Rabu, 16 Oktober 2019: Pertemuan 7

  • Kuis untuk mencoba menyelesaikan problem set 2.1 nomor 6 dan problem set 7.1 nomor 2 di buku
  • Program penyelesaian problem set 2.1 nomor 6:
       import numpy as np
       A = np.array ([[0,0,2,1,2],[0,1,0,2,-1],[1,2,0,-2,1],[0,0,0,-1,1],[0,1,-1,1,-1]])
       b = np.array ([[1],[1],[-4],[-2],[-1]])
       def gaussElimin(A,b):
       n = len(b)
       for k in range (0,n-1):
       for i in range(k+1,n):
       if A[i,k] != 0.0:
       lam = A[i,k]/A[k,k]
       A[i,k+1:n] = A[i,k+1:n] - lam*A[k,k+1:n]
       b[i] = b[i] - lam*b[k]
       for k in range(n-1,-1,-1):
       b[k] = (b[k] - np.dot(A[k,k+1:n],b[k+1:n]))/A[k,k]
       return b
  • Program penyelesaian problem set 7.1 nomor 2:
   def F(x,y):
   return ((x**2 - 4*y))
   def run_kut4(x0,y,x,h):
   n = int((x - x0)/h)
   y = y
   for i in range (1, n+1):
   K0 = h*F(x0,y)
   K1 = h*F(x0 + h/2.0, y + K0/2.0)
   K2 = h*F(x0 + h/2.0, y + K1/2.0)
   K3 = h*F(x0 + h, y + K2)
   y = y + (K0 + 2.0*K1 + 2.0*K2 + K3)/6.0
   return y
   x0 = 0
   y = 1
   x = 0.03
   h = 0.001
   print('nilai y pada x = 0.03 adalah:',run_kut4(x0,y,x,h))

Rabu, 23 Oktober 2019: UTS

  • Kode untuk sistem 1B
   import math
   a = 10
   v = 0
   x = 0
   t = 0
   cd = 0.2
   u = 0.6
   g = 9.8
   dragfric = ((cd * (v + ((a * t)**(3/2)))) + (u * g))
   while dragfric < a:
   v3 = v + a - dragfric
   x = x + ((v3**2 - v**2) / (2 * a))
   v = v3
   t += 1
   print ("waktu tempuh: ",t," s")
   print ("jarak tempuh: ",x," m")
   print ("kecepatan tertinggi : ",v3 / 3.6 ," km/h")
  • Perbaikan untuk kode sistem 1B (terletak pada looping dan definisi dari variabel-variabel yang digunakan)
   import math
   a = float(input("percepatan mobil dalam m/s kuadrat: "))
   v = 0
   x = 0
   t = 0
   cd = float(input("drag coefficient: "))
   u = float(input("koefisien gesek ban dengan jalanan: "))
   g = 9.8
   dragfric0 = 0
   dragfric = ((cd * (v + (a*t)**(3/2))) + (u * g))
   while dragfric0 < a:
   v3 = v + a - dragfric0
   x = x + ((v3**2 - v**2) / (2 * a))
   v = v3
   dragfric0 = dragfric0 + dragfric
   t += 1
   print ("waktu tempuh: ",t," s")
   print ("jarak tempuh: ",x," m")
   print ("kecepatan tertinggi : ",v3 / 3.6 ," km/h")
  • Kode untuk sistem 1A
   import math
   from math import *
   import numpy as np
   m1 = float(input("massa penarik 1: "))
   m2 = float(input("massa penarik 2: "))
   m3 = float(input("massa penarik 3: "))
   m4 = float(input("massa tertarik: "))
   g = 9.8
   a = 5
   sin = m4 / (m1 + m2 + m3)
   print ("nilai sin sudut: ", sin)
   sudut = math.asin (sin) * 57.2958
   print ("nilai sudut: ", sudut)
   T = np.array ([[(m1*a) - (m1*g*sin)],[(m2*a) - (m2*g*sin)],[(m3*a) - (m3*g*sin)],[(m4*a) - (m4*g*sin)]])
   print ("matriks tegangan tali: ", T)

Video Muhasabah

  • Untuk video coding 1A dan 1B, tidak dapat saya upload sehubungan karena ukurannya terlalu besar.

Coding untuk sistem buatan sendiri menggunakan metode Runge-Kutta

  • Sebuah rudal ditembakkan dengan kecepatan awal dan sudut awal yang diasumsikan oleh pengguna
  • Target: menemukan jarak tempuh horizontal dari rudal saat t = 2 detik
       import math
       import numpy as np
       def F(x,y):
       F = np.zeros(2)
       F[0] = y[1]
       F[1] = y[1] - 9.8*x
       return F
       x = 0.0
       xStop = 2.0
       v = float(input("kecepatan awal rudal: "))
       y = np.array ([v , -9.8])
       h = 0.1
       freq = 2
       def integrate (F,x,y,xStop,h):
       def run_kut4(F,x,y,h):
       K0 = h * F(x,y)
       K1 = h * F(x + h/2.0, y + K0/2.0)
       K2 = h * F(x + h/2.0, y + K1/2.0)
       K3 = h * F(x + h, y + K2)
       return (K0 + K1*2.0 + K2*2.0 + K3)/6.0
       X = []
       Y = []
       X.append(x)
       Y.append(y)
       
       while x < xStop:
       h = min(h, xStop - x)
       y = y + run_kut4(F,x,y,h)
       x = x + h
       X.append(x)
       Y.append(y)
       def printSoln(X,Y,freq):
       def printHead(n):
       print ("\n        x ", end=" ")
       for i in range (n):
       print ("     y[",i,"] ",end=" ")
       print ()
       printSoln(X,Y,freq)