Difference between revisions of "Rizkyawan Wibawa"
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)