Elvin

From ccitonlinewiki
Revision as of 02:45, 29 October 2019 by Elvin (talk | contribs) (Pertemuan 8 (UTS))
Jump to: navigation, search
 "Everything will be 大丈夫" 
Profile
Elvin Picture 1.jpg Nama Elvin
NPM 1706036381
Jurusan Teknik Mesin

Progress Tugas Merancang - Elvin

Pertemuan 1 (4 September 2019)

1. Pengenalan Kelas Metode Numerik

Perkenalkan nama saya Elvin, saya adalah seorang mahasiswa teknik mesin di Universitas Indonesia yang sedang mengambil mata kuliah Metode Numerik yang diajarkan Bapak Dr. Ir. Ahmad Indra Siswantara dan Bapak Dr. Eng. Radon Dhelika. Pada kelas ini, mahasiswa diberi pertanyaan "Mengapa harus mempelajari kalkulus?" oleh Bapak DAI (Dr. Ahmad Indra). Kalkulus merupakan ilmu dasar yang banyak digunakan pada banyak bidang ilmu lainnya, serta juga digunakan untuk membuat model matematika untuk pendekatan suatu kasus nyata serta menganalisa dan proses agar dapat mencapai penyelesaian. Dari kelas Metode Numerik ini sendiri, kami sebagai mahasiswa teknik mesin diharapkan dapat menyelesaikan masalah model matematika secara manual ataupun melalui pembelajaran bahasa pemrograman seperti bahasa C++, Python, Javascript, dan lainnya. Pada kelas Metode Numerik ini, pembelajaran kami akan berfokus pada bahasa pemrograman python yang sudah banyak digunakan secara internasional dan juga dipelajari oleh perguruan tinggi luar negeri seperti Massachusets Institute of Technology dan lainnya.


2. Bahasa Pemrograman Python

Python adalah sebuah bahasa pemrograman tingkat tinggi yang biasa digunakan oleh programmer untuk menulis rangkaian kode logik yang kemudian dapat digunakan sebagai sebuah program yang bekerja sesuai dengan keinginan atau tujuan programmer itu sendiri.


3. Tugas

Tugas yang diberikan pada 4 September 2019 adalah membuat algoritma dan program di Python untuk menyelesaikan persamaan berikut.

 T(x) = (x^2 - 1) / (x - 1)               (1) 

secara manual, persamaan (1) dapat diselesaikan dengan mudah dengan penggunaan limit ataupun l'hopital. Akan tetapi, dikarenakan tugas ini diwajibkan untuk menggunakan Phyton, saya sendiri perlu mempelajari phyton secara keseluruhan terlebih dahulu. Dari hal sederhana seperti print ("Hello World") hingga bagaimana mengoperasikan sebuah kalkulator dengan variabel, string, operator aritmatika, conditionals (if, else, dan elif).

Untuk menyelesaikan persamaan (1), saya merancang algoritma yang diperlukan terlebih dahulu seperti pada gambar berikut.

Algoritma 1 Elvin.png

Proses dimulai dari mendefinisikan masalah terlebih dahulu yaitu persamaan (1). Setelah itu nilai x dimasukkan ke persamaan (1) untuk mendapatkan hasil. Berdasarkan hasil yang didapatkan akan terdapat 2 pilihan. Jika hasil terdefinisi (tidak 0/0), maka perhitungan dilanjutkan seperti biasa. Akan tetapi, jika hasil tidak terdefinisi (0/0), maka perhitungan dilanjutkan dengan menggunakan limit x mendekati 1. Setelah itu, proses akan berakhir dengan mendapatkan nilai akhir dari persamaan.

Berdasarkan algoritma yang dirancang, saya menggunakan language interpreter Spyder untuk membuat rangkaian kode sebagai berikut.

Code Elvin x=1.png

Pada kode ini saya mendefinisikan persamaan (1) sebagai fungsi h(x)=f(x)/g(x) dimana fungsi f(x)=x^2-1 dan fungsi g(x)=x-1. Kemudian, mendefinisikan nilai x yang ingin dimasukkan ke persamaan. Berdasarkan nilai x tersebut, jika terjadi pembagian dengan 0 (tidak terdefinisikan), maka penyelesaian menggunakan limit yang diimport dari library sympy. berdasarkan gambar diatas yang menggunakan nilai x = 1, didapatkan hasil berikut yang terprint pada console spyder.

Console Elvin x=1.png

Sebaliknya, jika tidak terjadi pembagian dengan 0 (terdefinisikan), maka perhitungan dilanjutkan dengan biasa seperti pada gambar kode dan hasil pada console yang dibawah yang menggunakan nilai x = 5 dan mendapatkan hasil 6.

Code Elvin x=5.pngConsole Elvin x=5.png


Pertemuan 2 (11 September 2019)

1. Wawasan oleh Pak DAI

Pertemuan kelas Metode Numerik pada minggu ke-2 melanjutkan pembelajaran dalam bahasa pemrograman python. Sebelum memasuki materi tersebut, Pak DAI memberikan beberapa wawasan yang penting dan menarik yang berkaitan mengenai pembelajaran metode numerik python dan pemrograman secara umum dari sudut luar pandang mahasiswa. Seperti yang kita tahu, Metode Numerik dapat digunakan untuk menyelesaikan masalah model matematika apapun dengan pendekatan yang menyerupai kondisi nyata. Hal ini dapat dibantu melalui penggunaan pemrograman contohnya python. Selain itu, manfaat dari pemrograman tidak hanya terbatas pada aplikasi metode numerik tetapi juga banyak digunakan untuk menghasilkan berbagai aplikasi/perangkat lunak yang banyak digunakan oleh manusia. Aplikasi ataupun perangkat lunak ini berisi berbagai algoritma dan rangkaian kode yang diisi oleh programmer yang membuatnya. Contoh secara umum adalah permainan catur digital yang banyak dimainkan memiliki puluhan ribu langkah yang diprogram untuk mengalahkan pemain. Di kasus ini, semakin banyak pemrograman ataupun langkah yang dibuat oleh programmer untuk programnya, maka semakin banyak hal atau langkah yang dapat dilakukan program tersebut hingga dapat disebut sebagai Artificial Intelligence (AI). Pak DAI sendiri mengatakan bahwa AI merupakan serangkaian logika yang dibuat oleh manusia yang mempunyai peran sebagai Natural Intelligence. Terlebih dari itu, Pak DAI juga mengatakan bahwa kita perlu memahami batasan yang dimiliki masing-masing sehingga kita dapat memanfaatkan perkembangan teknologi secara pesat seperti dari revolusi industri 1.0 hingga 4.0 sekarang. Dan kemudian, kita dapat memanfaatkan teknologi tersebut agar dapat ter-empower sehingga pada revolusi industri 5.0 berikutnya.


2. Python: List and Tuples

Materi Python yang diberi oleh Pak Radon pada pertemuan ini berfokus pada pengenalan python dari dasar. Selain itu, kami dianjurkan dari Pak Radon dan Pak DAI untuk aktif dan intensif untuk mempelajari phyton diluar jam mata kuliah. Dengan mencari sumber yang sesuai dengan cara pembelajaran masing-masing dari buku, video, ataupun website pembelajaran. Salah satu website yang dianjurkan adalah introtopython.org dimana web ini memiliki materi python yang sangat lengkap mengenai pemakaian dasar hingga kompleks. Materi hari ini difokuskan agar mahasiswa minimal sudah mengalami pemrograman python dengan memrogram print ("Hello World"). Setelah itu, materi dilanjutkan ke pembelajaran Tuples dan List.


Tuples Tuples adalah struktur data yang digunakan untuk mengelompokkan data yang terpisahkan oleh sebuah tanda koma (','). data ini kemudian dapat di ditetapkan sebagai suatu kode contohnya pada line 2 dan 3 gambar interpreter dibawah. Dengan demikian kita dapat me-print data spesifik yang dibutuhkan seperti kode yang terdapat dibawah beserta hasil yang diconsole.


Tuples Code Elvin.JPG List Code Elvin.JPG


Lists Lists adalah struktur data yang digunakan untuk mengelompokkan data yang dapat diubah posisi ataupun nilainya. setiap data (item) yang terdapat pada lists ini juga memiliki pasangan angka yang terhitung dari 0 hingga seterusnya. Contoh-contoh pemakaian list terdapat pada gambar interpreter dan console berikut.

Tuples Console Elvin.JPG List Console Elvin.JPG

Tuples dan Lists ini mungkin terlihat menyerupai satu sama lain. Akan tetapi, perbedaan utama antara dua struktur data ini adalah data yang terdapat pada list dapat diubah (mutable) sedangkan data yang terdapat pada tuples tidak dapat diubah. selain itu, tuples menggunakan tanda kurung ( ) sedangkan lists menggunakan tanda kurung kotak [ ]


Pertemuan 3 (18 september 2019)

1. Kuis

Pada pertemuan kelas Metode Numerik 18 September 2019, Pak DAI dan Pak Radon memberikan kuis untuk menguji pemahaman mahasiswa dalam bahasa pemrograman Python.

Soal yang diberikan adalah sebagai berikut

 1, 1, 2, 3, 5, 8, 13, 21, ...., n-1, n 
Dari deret Fibonacci diatas, buatlah algoritma, flowchart, serta Program Python untuk menghasilkan angka dari suku yang diinginkan

Soal ini dapat diselesaikan dengan menggunakan loop ataupun function pada python

1.a. Loop

Algoritma

  • Definisikan nilai a = 0 dan b = 1 (a dan b berturut-turut akan menjadi suku ke-0 dan ke-1 serta menjadi dasar untuk penjumlahan fibonacci)
  • Input suku ke - n Fibonacci yang diinginkan
  • jika n=0 maka hasil adalah a
  • jika n=1 maka hasil adalah b
  • jika n lebih dari 1 maka c = a + b, nilai a akan diubah menjadi b, nilai b akan diubah menjadi c. Proses akan di loop hingga mencapai nilai n yang diinginkan

Flowchart

FlowchartV2 Fibonacci Elvin.png


Program Python

LoopV2 Fibonacci Elvin.JPGLoop Fibonacci Elvin Console.JPG


1.b. Function

Algoritma

  • Definisikan fungsi f(n) = f(n-1) + f(n-2)
  • Nilai n hanya berlaku untuk n >= 0, jika n < 0 maka print "error"
  • Jika n = 0 atau n = 1 maka print nilai n tersebut
  • Jika n > 1 maka input nilai tersebut ke fungsi f(n)

Flowchart

Flowchart Fibonacci Function Elvin.png


Program Python

Function Fibonacci Elvin.JPGFunction Fibonacci Elvin Console.JPG


2. Tugas

Selain kuis yang diberikan, Pak DAI dan Pak Radon mengelompokkan mahasiswa dengan satu sama lain agar proses pembelajaran lebih baik. Setelah itu, tugas untuk mennyelesaikan salah satu soal eliminasi gauss yang terdapat pada buku referensi mata kuliah Metode Numerik.

Pengerjaan tugas ini dapat dilihat pada Page Kelompok 12


Pertemuan 4 (25 September 2019)

1. Pemodelan

Pada pertemuan kelas Metode Numerik kali ini, Pak Dai memberikan materi mengenai pemodelan. Model merupakan suatu representasi, simplifikasi atau asumsi dari sebuah benda ataupun sistem yang dibuat untuk mendekati benda ataupun kondisi nyata. Model diperlukan agar kita dapat melaksanakan analisis ataupun eksperimen secara lebih mudah tanpa menghabiskan sumber daya yang ada. Model yang dibuat hanya mendekati kondisi nyata sehingga eksperimen atau simulasi yang dilakukan tidak selalu menunjukkan hasil yang 100% akurat. Seperti berbagai bidang ilmu lainnya, arsitek dengan maket, sipil dengan jembatan miniatur, dan teknik aerodinamika dengan wind tunnel, semua model dibuat agar dapat diuji terlebih dahulu tanpa menghasilkan dampak yang besar. Model harus ada karena saat kita mendesign, kita harus memastikan apa yang kita design itu berfungsi, bekerja dan reliable.


2. Tugas

Tugas yang diberikan minggu ini adalah aplikasi eliminasi gauss untuk melaksanakan Finite Element Analysis.

Pengerjaan tugas ini dapat dilihat pada Page Kelompok 12


Pertemuan 5 (2 Oktober 2019)

1. Membuat Program Simulasi dengan Eliminasi Gauss

Pertemuan hari ini diisi dengan penjelasan materi oleh bang Edo dan Bang Timothy asisten dosen untuk kelas Metode Numerik. Mereka menjelaskan kembali bagaimana membuat program simulasi dengan eliminasi gauss yang merupakan tugas dari minggu sebelumnya. Materi ini dijelaskan dengan pendekatan menggunakan pegas sebagai elemen untuk finite element analysis yang akan dilakukan. Kemudian mereka juga menjelaskan beda mengkode dengan bantuan module numpy, sympy, dan manual di python. Dapat dilihat bahwa panjang dan kerumitan dari kode yang ditulis berbeda-beda berdasarkan tidak atau digunakannya module tersebut.


2. Rangkuman Bab 4 buku Numerical Methods Python

Masalah dimana kita harus menentukan nilai x agar f(x) = 0 sering ditemukan di analisis ilmu teknik yang kemudian dapat dikenal sebagai akar dari persamaan atau nilai nol dari fungsi f(x). sebuah fungsi terdiri atas 3 komponen, yaitu input (x), output (y), dan aturan f untuk mendapatkan hasil y. untuk mendapatkan suatu akar dari persamaan, terdapat berbagai metode yang mencakupi:

  • Metode Incremental Search

Cara yang paling baik untuk memperkirakan nilai suatu akar adalah dengan menggambarkan fungsi itu sendiri. Jika suatu f(x1) dan f(x2) memiliki nilai yang berlawanan (+-) maka terdapat setidaknya satu nilai akar pada interval x1 hingga x2. Jika intervalnya sangat kecil, maka sangat memungkinkan untuk terdapat 1 akar. Sehingga nilai 0 dari fungsi f(x) dapat ditemukan dengan mengevaluasi fungsi pada interval tersebut.

Masalah yang terdapat pada metode ini adalah:

a. Sangat mungkin untuk melewatkan 2 nilai akar dengan interval yang lebih kecil dari interval x1-x2

b. Akar ganda tidak akan terdeteksi

c. Beberapa pole dapat dikeliru sebagai akar.

  • Metode Bisection

Metode bisection bekerja dengan mengurangi separuh nilai akar yang terdapat pada interval x1 dan x2 hingga sangat kecil. Metode ini juga merupakan metode yang sangat cepat dan dapat diandalkan. Metode ini mempunyai proses yang sama dengan incremental scratch dimana jika terdapat sebuah akar pada interval x1 dan x2 maka f(x1) dan f(x2) memiliki tanda yang berlawanan. Untuk mengurangi separuh nilai interval, kita menghitung f(x3) dimana x3 = 1/2*(x1+x2). Kemudian jika nilai f(x2) dan f(x3) mempunyai nilai yang berlawanan maka akar terdapat pada interval x2 dan x3, jika tidak maka akar terdapat pada interval x1 dan x3. Kemudian proses diulang hingga nilai interval menjadi suatu nilai P yang sangat kecil dimana,

|x2 – x1| =< P
  • Metode Secant and False Position

Metode secant dan false position sangat mirip satu sama lain dimana kedua metode ini membutuhkan estimasi mula untuk mencari nilai akar, dengan demikian nilai x3 dari akar dapat diestimasi dari interpolasi antara x1 dan x2.

Metode false position membutuhkan nilai x1 dan x2 untuk mendapatkan interval yang berisi akar. Setelah kita mendapatkan nilai x3 hasil interpolasi, kita dapat menggantikan salah satu nilai x1 atau x2 dengan nilai x3. Kemudian, jika f(x3) mempunyai tanda yang sama dengan nilai f(x1) maka x1 <- x3; sebaliknya kita memilih x2 <- x3. Prosedur diulang hingga suatu konvergen tercapai

Metode Secant berbeda dari false position dimana ia tidak perlu interval x1 dan x2 dan menggantikan nilai estimasi tertua dari akar (x1 <- x2 dan x2 <- x3)


  • Metode Ridder

Metode ini merupakan modifikasi dari metode false position dimana jika akar terdapat pada interval x1 dan x2, maka kita dapat menghitung f(x3) dari x3 hasil interpolasi dimana x3 adalah titik tengah dari interval. Kemudian kita dapat menggunakan fungsi

g(x) = f(x)e^(x-x)Q

dimana Q adalah konstanta yang ditentukan dari mendapatkan nilai (x1, g1), (x2, g2), dan (x3, g3) seperti pada gambar (b). Nilai akar yang baru kemudian akan didapatkan dari interpolasi linear dari nilai-nilai g(x).

SS metnum 1.png

dari persamaan g(x) kita mendapatkan bahwa h=(x2-x1)/2. Syarat agar ketiga titik di gambar (b) terletak pada sebuah garis lurus adalah

SS metnum 2.png

yang merupakan sebuah persaman kuadrat pada e^hQ dengan solusi

SS metnum 3.png

Dengan me-interpolasi linear titik (x1,g1) dan (x2,g2) maka kita mendapatkan akar baru dengan persamaan berikut

SS metnum 4.png

  • Metode Newton-Raphson

Metode ini menggunakan turunan f’(x) dari fungsi dan fungsi f(x) itu sendiri. Kemudian metode ini hanya bisa digunakan jika f’(x) dapat dihitung.

Metode ini didapatkan dengan menurunkan rumus dari seri taylor f(x)

SS metnum 5.png

jika xi+1 adalah akar dari f(x) = 0 maka persamaan diatas menjadi

SS metnum 7.png

dengan mengasumsi xi mendekati nilai xi+1, kita dapat menghapus bilangan terakhir pada persamaan dan mendapatkan persamaan berikut

SS metnum 6.png

Kita hanya perlu mengulangi kalkulasi persamaan diatas dengan nilai awal x0 hingga mencapai suatu kriteria konvergen

|xi+1 - xi| < E


Pertemuan 6 (9 Oktober 2019)

Pertemuan 7 (16 Oktober 2019)

Program Python untuk Solusi Aljabar Simultan

import numpy as np

# Definisikan Matriks A
A = np.array([[1, 2, 0, -2, 0],
              [0, 1, -1, 1, -1],
              [0, 1, 0, 2, -1],
              [0, 0, 2, 1, 2],
              [0, 0, 0, -1, 1]], float)

#Definisikan Matriks B
b = np.array([[-4], 
             [-1], 
             [1],
             [1],
             [-2]], float)

Ab = np.hstack([A, b])
print (Ab, "\n") 

n = len(b) 

#Fase Eliminasi
for i in range(0, n-1):
    for j in range(i + 1, n):
        if Ab[i,i] != 0.0:
            lam = Ab[i,i] / Ab[j,i]
            Ab[j] = Ab[i] - lam * Ab[j]
       
print ("Hasil Fase Eliminasi \n", Ab, "\n")

#Fase Substitusi
for i in range(n - 1, -1, -1):
    Ab[i] = Ab[i] / Ab[i, i]
    for j in range(i - 1, -1, -1):
        lam = Ab[i,i] / Ab[j,i]
        Ab[j] = Ab[i] - lam * Ab[j]

print ("Hasil Fase Substitusi \n", Ab, "\n")

x = Ab[:, 3]

print ("nilai x Transpose \n", x)


Program Python untuk Solusi Aljabar Simultan

def rungeKutta(t0, y0, t, h):
    def dydx(x, y): # mendefinisikan persamaan yang ingin dicari jawabannya
        if x < 2:
            return ((x**2) - (4*y))
      
    # hitung jumlah iterasi data
    n = (int)((t - t0)/h) 
    y = y0 
    for i in range(1, n + 1): 
        k1 = h * dydt(t0, y0)
        k2 = h * dydt(t0 + 0.5 * h, y0 + 0.5 * k1)
        k3 = h * dydt(t0 + 0.5 * h, y0 + 0.5 * k2)
        k4 = h * dydt(t0 + h, y0 + k3)
  
        # memperbarui nilai y
        y = y0 + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4) 
  
        # memperbarui nilai x berdasarkan step height 
        x = x + h
    return y 
 
#masukkan nilai x, y, x0, dan h
x0 = 0 
y = 1 
t = 0.03
h = 0.01
print ('nilai y:', rungeKutta(x0, y, x, h))


Pertemuan 8 (UTS)

Koding untuk Eliminasi Gauss Tegangan Tali


import numpy as np
import math


# input nilai-nilai yang perlu didefinisikan

m1 = eval(input("nilai m1 :"))
m2 = eval(input("nilai m2 :"))
m3 = eval(input("nilai m3 :"))
g = 9.81
alpha = eval(input("nilai derajat kemiringan :"))
myu = eval(input("nilai koefisien gesek :"))

sudut = alpha*22/(7*180)

theta = sin ((sudut))

u1 = m1*g*(theta-myu)
u2 = m2*g*(theta-myu)
u3 = m3*g*(theta-myu)

# Definisikan Matriks A
A = np.array([[1, 0, 0],
              [-1, 1, 0],
              [0, -1, 1]], float)

#Definisikan Matriks B
b = np.array([[u1], 
              [u2],
              [u3]], float)


def EG(A, b, Pivot = True):
    n = len(A)
    #Fase Eliminasi
    for k in range(n-1):
        if Pivot:       #Fase Pivot
            j = abs(A[k:,k]).argmax() + k
            if A[j, k] == 0:
                raise ValueError("Matriks bersifat singular")
            if j != k:
                Ak , j = Aj , k
                bk , j = bj , k
        #Eliminasi
        for i in range(k+1, n):
            lam = A[i,k]/A[k,k]
            A[i, k:] = A[i, k:] - lam*A[k, k:]
            b[i] = b[i] - lam*b[k]
        
    #Fase Substitusi
    x = np.zeros(n)
    for k in range(n-1, -1, -1):
        x[k] = (b[k] - np.dot(A[k,k+1:], x[k+1:]))/A[k,k]

    return x
    
print ("nilai t1, t2, dan t3 adalah :", EG (A,b))

Asumsi nilai yang ingin dimasukkan

m1 = 10 kg

m2 = 20 kg

m3 = 30 kg

derajat kemiringan = 30°

koefisien gesek = 0,1


kita akan mendapatkan hasil t1, t2, dan t3

t1 = 39.25790347 t2 = 117.7737104 t3 = 235.54742079

UTS Elvin Console.png


Koding Untuk Runge Kutta Top Speed Mobil

m = eval(input("massa mobil : "))
g = 9.81
a = eval(input("percepatan awal mobil : "))
cd = eval(input("koefisien drag udara : "))
myu = eval(input("koefisien gesek jalan : "))
v0 = 0
t0 = 0
dt = 1 #tinggi step atau waktu
error = 100
p = a - g*myu
q = cd/m 

lst = []

def dvdt(t, v): 
    return 
while error > 0.000250: 
    k1 = dt * dvdt(t0, v0) 
    k2 = dt * dvdt(t0 + 0.5 * dt, v0 + 0.5 * k1)
    k3 = dt * dvdt(t0 + 0.5 * dt, v0 + 0.5 * k2) 
    k4 = dt * dvdt(t0 + dt, v0 + k3) 
    v1 = v0 + (1.0 / 6.0)*(k1 + 2 * k2 + 2 * k3 + k4)
    
    t0 = t0 + dt
    error = ((v1 - v0) / v1)*100 #persentase error
    v0 = v1
    lst.append(v1)
    print (k1, k2, k3, k4, "\n")

waktu = len(lst)

print ("waktu untuk mencapai velocity maksimal adalah: ", waktu+1)
print ("velocity maksimal adalah: ", v1)


Asumsi nilai yang ingin dimasukkan

massa mobil = 1000 kg

percepatan awal mobil = 10 m/2

koefisien drag udara = 0.2

koefisien gesek jalan = 0.1

kecepatan awal = 0 m/s

dengan

dt (tinggi step) = 1

t0 = 0

v0 = 0 m/s (diam)

kita akan mendapatkan nilai terminal velocity

vt = 48,42248 m/s

dengan waktu untuk mencapai terminal velocity adalah 25 s


berikut adalah grafik waktu terhadap kecepatan dimana kita bisa melihat waktu yang dicapai terminal velocity dengan kondisi yang diasumsikan

UTS runge kutta Elvin grafik.png