|
|
(2 intermediate revisions by the same user not shown) |
Line 2: |
Line 2: |
| [[File:Ryanson.jpg|thumb|Ryanson di tahun 2019.]] | | [[File:Ryanson.jpg|thumb|Ryanson di tahun 2019.]] |
| | | |
− | '''Ryanson Jonathan''' (lahir di Jakarta, 5 Mei 2000, umur 19) merupakan seorang mahasiswa [http://eng.ui.ac.id Fakultas Teknik Universitas Indonesia], mengambil jurusan Teknik Mesin. Selain itu, Ryanson juga menjalani kanal [http://www.youtube.com/ryansonjonathan YouTube], dan akan mengeluarkan musik dengan nama Pinterbanget. | + | '''Ryanson Jonathan''' (lahir di Jakarta, 5 Mei 2000, umur 22) merupakan seorang mahasiswa [http://eng.ui.ac.id Fakultas Teknik Universitas Indonesia], dengan jurusan Teknik Mesin. |
− | | |
− | | |
− | ==Metode Numerik==
| |
− | ===Mengapa mahasiswa Teknik Mesin harus mempelajari Kalkulus===
| |
− | Menurut Ryanson, mahasiswa Teknik Mesin harus belajar Kalkulus karena pada dasarnya Kalkulus adalah hal yang paling mendasar yang diperlukan untuk mempelajari hal-hal yang lebih mendalam. Ilmu-ilmu dan konsep yang dipelajari pada Kalkulus pada nantinya akan dipakai di mata kuliah lain, seperti Termodinamika Dasar dan Matematika Teknik.
| |
− | | |
− | ===Mengenal Python===
| |
− | Python adalah sebuah bahasa ''coding'' atau bahasa pemrograman yang digunakan untuk menyelesaikan suatu masalah.
| |
− | | |
− | ===Flowchart===
| |
− | Terdapat sebuah formula:
| |
− | T=(x^2-1)/(x-1)
| |
− | Formula ini dapat diselesaikan menggunakan flowchart, dengan metode sbb:
| |
− | | |
− | [[File:letitflowwrj.jpg|frameless|upright=1.5]]
| |
− | | |
− | ===Memindahkan flowchart kedalam Python===
| |
− | Kemudian, flowchart dapat direpresentasikan dalam kode Python sebagai berikut:
| |
− | | |
− | [[File:ryansonj_tugas1.png]]
| |
− | | |
− | ===Tuples dan Lists===
| |
− | | |
− | Pada pertemuan kedua, dibahas mengenai dasar-dasar Python, yang beberapa sudah saya singgung di kode yang sudah digunakan di atas.
| |
− | Salah satu hal yang dapat dilakukan dalam Python adalah pembentukan Tuples dan Lists, yang mana Tuples berarti data yang terdapat lebih dari 1 dan Lists berarti data dalam bentuk daftar yang nantinya dapat ditambahkan.
| |
− | | |
− | tupel = ("Ryanson", "Jonathan", (5,5,2000))
| |
− | firstname,lastname,date = tupel
| |
− | print("Halo! Nama saya ", firstname, lastname, ". Saya biasa dipanggil ", firstname, ". Saya lahir tanggal", date[0], ", bulan", date[1], ", tahun ", date[2], ".")
| |
− | | |
− | Hasil dari kode diatas: "Halo! Nama saya Ryanson Jonathan. Saya biasa dipanggil Ryanson. Saya lahir tanggal 5, bulan 5, tahun 2000."
| |
− | | |
− | daftar = []
| |
− | daftar.append("Telur")
| |
− | daftar.append("Tepung")
| |
− | daftar.append("Susu")
| |
− | print("Daftar belanja untuk bulan ini: ", daftar)
| |
− | | |
− | Hasil dari kode diatas: "Daftar belanja untuk bulan ini: ['Telur', 'Tepung', 'Susu']"
| |
− | | |
− | ===Deret Fibonacci===
| |
− | | |
− | Pada minggu ketiga, diberikan soal untuk membuat program untuk menyelesaikan deret Fibonacci, sehingga user dapat memasukkan suatu angka (n) dan dapat mengetahui suku ke-n dalam deret Fibonacci.
| |
− | | |
− | Dalam menyelesaikan masalah ini, dapat ditentukan 2 pendekatan:
| |
− | | |
− | '''1. Loop'''
| |
− | | |
− | Metode loop digunakan memakai fungsi def, if, else:
| |
− | | |
− | [[File:ryansonfiboloop.png|300px]]
| |
− | | |
− | '''2. Function'''
| |
− | | |
− | Metode function digunakan memakai rumus yang sudah ada untuk langsung mencari deret Fibonacci:
| |
− | | |
− | [[File:ryansonfibofunc.png|300px]]
| |
− | | |
− | ===Eliminasi Gauss===
| |
− | Lebih lengkapnya dapat dilihat di sini: [[Kelompok 2]]
| |
− | | |
− | ===Runge-Kutta Method===
| |
− | Lebih lengkapnya dapat dilihat di sini: [[Kelompok 2]]
| |
− | | |
− | ===KUIS===
| |
− | | |
− | '''Problem 2.1 no 6'''
| |
− | # Untuk memasukkan modul numpy ke dalam program.
| |
− | from numpy import linalg
| |
− | import numpy as np
| |
− | # Matriks a dipecah menjadi 5 baris, dengan baris pertama dinotasikan sebagai a1, baris kedua a2, dst.
| |
− | # matA sebagai notasi matriks a.
| |
− | a1 = [0,0,2,1,2]
| |
− | a2 = [0,1,0,2,-1]
| |
− | a3 = [1,2,0,-2,1]
| |
− | a4 = [0,0,0,-1,1]
| |
− | a5 = [0,1,-1,1,-1]
| |
− | matA = np.array ([a1,a2,a3,a4,a5])
| |
− | # Masukkan entri pada matriks b. matB sebagai notasi matriks b.
| |
− | matB = np.array ([1,1,-4,-2,-1])
| |
− | # Lakukan perhitungan menggunakan modul Numpy.
| |
− | hasil = linalg.solve (matA,matB)
| |
− | x1 = int(hasil[0])
| |
− | x2 = int(hasil[1])
| |
− | x3 = int(hasil[2])
| |
− | x4 = int(hasil[3])
| |
− | x5 = int(hasil[4])
| |
− | # Memperlihatkan hasil perhitungan kepada user.
| |
− | print ("Hasil perhitungan:")
| |
− | print ("x1=",x1,"x2=",x2,"x3=",x3,"x4=",x4,"dan x5=",x5)
| |
− | # Kode ini dibuat oleh Ryanson Jonathan (1806149293), menggunakan bantuan modul Numpy.
| |
− | | |
− | '''Problem 7.1 no 2'''
| |
− | # Line dibawah ini menunjukkan x0 dan y0 sebagai titik asal, h sebagai increment.
| |
− | # Digunakan h = 0.005.
| |
− | # x = 0.03, sesuai dengan yang diminta soal.
| |
− | x0 = 0
| |
− | y0 = 1
| |
− | h = 0.005
| |
− | x = 0.03
| |
− | # "fungsi" menyatakan fungsi awal dalam soal, yang telah diubah sehingga membentuk persamaan y'.
| |
− | # Mengubah bentuk persamaan dalam soal, y' = x^2-4y.
| |
− | def fungsi(x, y):
| |
− | return (x**2 - 4*y)
| |
− | # Ini merupakan implementasi perhitungan Runge-Kutta, dinotasikan dengan "RK".
| |
− | def RK(x0, y0, x, h):
| |
− | n = (int)((x - x0)/h)
| |
− | y = y0
| |
− | for i in range(1, n + 1):
| |
− | k1 = h * fungsi(x0, y)
| |
− | k2 = h * fungsi(x0 + 0.5 * h, y + 0.5 * k1)
| |
− | k3 = h * fungsi(x0 + 0.5 * h, y + 0.5 * k2)
| |
− | k4 = h * fungsi(x0 + h, y + k3)
| |
− |
| |
− | # untuk y selanjutnya
| |
− | y = y + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4)
| |
− |
| |
− | # untuk x selanjutnya
| |
− | x0 = x0 + h
| |
− | return y
| |
− | #Memperlihatkan hasil perhitungan kepada user.
| |
− | print("Nilai y(", x, ") adalah", RK(x0, y0, x, h))
| |
− | #Kode ini dibuat oleh Ryanson Jonathan (1806149293).
| |
− | | |
− | ===UTS===
| |
− | | |
− | '''Kasus A'''
| |
− | # -*- coding: utf-8 -*-
| |
− | """
| |
− | Created on Wed Oct 23 17:06:11 2019
| |
− |
| |
− | @author: rjsec
| |
− | """
| |
− | # Soal UTS no 1A.
| |
− | # Masukkan modul Numpy ke dalam program.
| |
− | from numpy import linalg
| |
− | import numpy as np
| |
− | # Buat persamaan menjadi suatu matriks, yang kemudian diinvers untuk mencari nilai
| |
− | # T1, T2, dan T3.
| |
− | # Mb1 sebagai matriks baris pertama, Mb2 sebagai matriks baris kedua, dan
| |
− | # Mb3 sebagai matriks baris ketiga.
| |
− | Mb1 = [1,0,0]
| |
− | Mb2 = [-1,1,0]
| |
− | Mb3 = [0,-1,1]
| |
− | matA = np.array ([Mb1,Mb2,Mb3])
| |
− | # Masukkan nilai-nilai M1, M2, dan M3.
| |
− | M1 = float(input("Masukkan nilai M1 (dalam kg): "))
| |
− | M2 = float(input("Masukkan nilai M2 (dalam kg): "))
| |
− | M3 = float(input("Masukkan nilai M3 (dalam kg): "))
| |
− | matB = np.array ([M1,M2,M3])
| |
− | # Lakukan perhitungan menggunakan modul Numpy.
| |
− | hasil = linalg.solve (matA,matB)
| |
− | T1 = int(hasil[0])
| |
− | T2 = int(hasil[1])
| |
− | T3 = int(hasil[2])
| |
− | # Perlihatkan hasil perhitungan kepada pengguna.
| |
− | print ("Hasil perhitungan tegangan tali:")
| |
− | print ("T1 =",T1,"N, T2 =",T2,"N, dan T3 =", T3, "N.")
| |
− | # Kode ini dibuat oleh Ryanson Jonathan (1806149293).
| |
− | # 23 Oktober 2019.
| |
− | | |
− | '''Kasus B'''
| |
− | # -*- coding: utf-8 -*-
| |
− | """
| |
− | Created on Wed Oct 23 17:27:42 2019
| |
− |
| |
− | @author: rjsec
| |
− | """
| |
− | # Soal UTS no 1B.
| |
− | v = float(input("Masukkan top speed (dalam m/s): "))
| |
− | t0 = 0
| |
− | h = 0.01
| |
− | v0 = 0
| |
− | def func(v, t):
| |
− | return (1200*v/12000+0.3*v**1.5)
| |
− | def rungee(v0, t0, v, h):
| |
− | n = (int)((v - v0)/h)
| |
− | t = t0
| |
− | for i in range(1, n + 1):
| |
− | k1 = h * func(v0, t)
| |
− | k2 = h * func(v0 + 0.5 * h, t + 0.5 * k1)
| |
− | k3 = h * func(v0 + 0.5 * h, t + 0.5 * k2)
| |
− | k4 = h * func(v0 + h, t + k3)
| |
− | t = t + (1/6)*(k1 + 2 * k2 + 2 * k3 + k4)
| |
− | v0 = v0 + h
| |
− | return t
| |
− | print("Waktu untuk mencapai top speed adalah", rungee(v0, t0, v, h), "detik.")
| |
− | | |
− | ===Revisi UTS===
| |
− | | |
− | <youtube width="200" height="100">Vy-CfSB6PUM</youtube>
| |
− | | |
− | | |
− | '''Kasus A'''
| |
− | # -*- coding: utf-8 -*-
| |
− | """
| |
− | Created on Wed Oct 23 17:06:11 2019
| |
− |
| |
− | @author: rjsec
| |
− | """
| |
− | # Soal UTS no 1A.
| |
− | # Masukkan modul Numpy ke dalam program.
| |
− | from numpy import linalg
| |
− | import numpy as np
| |
− | # Asumsi yang dibuat: gravitasi (g) = 10 m/s^2, sudut kemiringan (α) = 5.74°,
| |
− | # sehingga sin(α) = 1/10.
| |
− | # Buat persamaan menjadi suatu matriks, yang kemudian diinvers untuk mencari nilai
| |
− | # T1, T2, dan T3.
| |
− | # Mb1 sebagai matriks baris pertama, Mb2 sebagai matriks baris kedua, dan
| |
− | # Mb3 sebagai matriks baris ketiga.
| |
− | Mb1 = [1,0,0]
| |
− | Mb2 = [-1,1,0]
| |
− | Mb3 = [0,-1,1]
| |
− | matA = np.array ([Mb1,Mb2,Mb3])
| |
− | # Masukkan nilai-nilai M1, M2, dan M3.
| |
− | M1 = float(input("Masukkan nilai M1 (dalam kg): "))
| |
− | M2 = float(input("Masukkan nilai M2 (dalam kg): "))
| |
− | M3 = float(input("Masukkan nilai M3 (dalam kg): "))
| |
− | matB = np.array ([M1,M2,M3])
| |
− | # Lakukan perhitungan menggunakan modul Numpy.
| |
− | hasil = linalg.solve (matA,matB)
| |
− | T1 = int(hasil[0])
| |
− | T2 = int(hasil[1])
| |
− | T3 = int(hasil[2])
| |
− | # Perlihatkan hasil perhitungan kepada pengguna.
| |
− | print ("Hasil perhitungan tegangan tali:")
| |
− | print ("T1 =",T1,"N, T2 =",T2,"N, dan T3 =", T3, "N.")
| |
− | # Kode ini dibuat oleh Ryanson Jonathan (1806149293).
| |
− | # 23 Oktober 2019, disempurnakan 28 Oktober 2019.
| |
− | | |
− | '''Kasus B'''
| |
− | # -*- coding: utf-8 -*-
| |
− | """
| |
− | Created on Wed Oct 23 17:27:42 2019
| |
− |
| |
− | @author: rjsec
| |
− | """
| |
− | # Soal UTS no 1B.
| |
− | # vKMH sebagai kecepatan akhir (top speed, dinyatakan dalam km/h).
| |
− | # v sebagai kecepatan akhir (top speed, dinyatakan dalam m/s).
| |
− | # t0 dan v0 sebagai kecepatan dan waktu awal (pada kasus ini 0).
| |
− | # h sebagai increment/side step. Digunakan h = 0.01.
| |
− | vKMH = float(input("Masukkan top speed (dalam km/h): "))
| |
− | v=vKMH/3.6
| |
− | t0 = 0
| |
− | v0 = 0
| |
− | h = 0.01
| |
− | # "func" sebagai fungsi persamaan t dalam v,
| |
− | # dengan v sebagai x dan t sebagai y.
| |
− | # a sebagai persamaan akselerasi.
| |
− | # Asumsi yang dibuat: massa mobil (m) = 1200 kg,
| |
− | # percepatan mobil (a) = 10 m/s^2, gravitasi (g) = 10 m/s^2,
| |
− | # koef gesek ban (Ч) = 0,5, dan koef gesek udara = 0,3.
| |
− | a = 6000-0.3*v**1.5
| |
− | def func(v, t):
| |
− | return (1200*v/a - t)
| |
− | # "rungekutta" sebagai fungsi untuk menghasilkan pendekatan
| |
− | # menggunakan 4th order Runge-Kutta.
| |
− | def rungekutta(v0, t0, v, h):
| |
− | n = (int)((v - v0)/h)
| |
− | t = t0
| |
− | for i in range(1, n + 1):
| |
− | k1 = h * func(v0, t)
| |
− | k2 = h * func(v0 + 0.5 * h, t + 0.5 * k1)
| |
− | k3 = h * func(v0 + 0.5 * h, t + 0.5 * k2)
| |
− | k4 = h * func(v0 + h, t + k3)
| |
− |
| |
− | #untuk t baru
| |
− | t = t + (1/6)*(k1 + 2 * k2 + 2 * k3 + k4)
| |
− |
| |
− | #untuk v baru
| |
− | v0 = v0 + h
| |
− | return t
| |
− | # Menunjukkan hasil perhitungan kepada pengguna.
| |
− | print("Waktu yang diperlukan untuk mencapai top speed adalah", rungekutta(v0, t0, v, h), "detik.")
| |
− | # Kode ini dibuat oleh Ryanson Jonathan (1806149293).
| |
− | # 23 Oktober 2019, disempurnakan 28 Oktober 2019.
| |
− | | |
− | ===Kolom Komentar UTS===
| |
− | <comments />
| |
− | | |
− | '''Kasus Sendiri'''
| |
− | | |
− | Deskripsi kasus: orang yang akan melakukan free-fall dari sebuah ketinggian, dicari kecepatan setelah t detik.
| |
− | # -*- coding: utf-8 -*-
| |
− | """
| |
− | Created on Wed Oct 30 17:22:21 2019
| |
− |
| |
− | @author: rjsec
| |
− | """
| |
− | # Contoh kasus: Orang yang akan melakukan free-fall dari sebuah tempat tinggi.
| |
− | # Program digunakan untuk menghitung kecepatan orang setelah t detik mengudara.
| |
− | # Gaya gesek udara diperhitungkan.
| |
− |
| |
− | # t sebagai waktu orang mengudara, g sebagai gravitasi, m sebagai massa orang,
| |
− | # cd sebagai koefisien gesek udara, t0 dan v0 sebagai waktu dan kecepatan awal,
| |
− | # dan step sebagai increment/step dalam perhitungan Runge-Kutta.
| |
− | t = float(input("Masukkan waktu orang mengudara (dalam detik): "))
| |
− | while t < 0:
| |
− | print("Waktu tidak boleh negatif. Mohon masukkan angka positif.")
| |
− | t = float(input("Masukkan waktu orang mengudara (dalam detik): "))
| |
− | g = 9.80665
| |
− | m = float(input("Masukkan massa orang yang meloncat (dalam kg): "))
| |
− | while m < 0:
| |
− | print("Massa tidak boleh negatif. Mohon masukkan angka positif.")
| |
− | m = float(input("Masukkan massa orang yang meloncat (dalam kg): "))
| |
− | cd = float(input("Masukkan koefisien gesek udara: "))
| |
− | while cd > 1 or cd < 0:
| |
− | print("Koefisien gesek udara harus berada di antara 0 dan 1.")
| |
− | cd = float(input("Masukkan koefisien gesek udara: "))
| |
− | t0 = 0
| |
− | v0 = 0
| |
− | step = 0.01
| |
− | # f(t,v) sebagai fungsi (x,y) dimana t diposisikan sebagai x dan v diposisikan sebagai y.
| |
− | def f(t, v):
| |
− | return ((m*g-cd*v**1.5)/m)
| |
− | # rungekutta sebagai fungsi penghitungan 4th order Runge-Kutta.
| |
− | def rungekutta(t0, v0, t, step):
| |
− | n = (int)((t - t0)/step)
| |
− | v = v0
| |
− | for i in range(1, n + 1):
| |
− | k1 = step * f(t, v)
| |
− | k2 = step * f(t + 0.5 * step, v + 0.5 * k1)
| |
− | k3 = step * f(t + 0.5 * step, v + 0.5 * k2)
| |
− | k4 = step * f(t + step, v + k3)
| |
− |
| |
− | #untuk v baru
| |
− | v = v + (1/6)*(k1 + 2 * k2 + 2 * k3 + k4)
| |
− |
| |
− | #untuk t baru
| |
− | t0 = t0 + step
| |
− | return v
| |
− | # Menunjukkan hasil perhitungan.
| |
− | print("Kecepatan orang setelah", t, "detik mengudara adalah", rungekutta(t0, v0, t, step), "m/s")
| |
− | # Kode dibuat oleh Ryanson Jonathan (1806149293).
| |