John Patrick Anhar
Biodata Diri
Nama : John Patrick Anhar
NPM : 1806201062
TTL : Jakarta, 21 Oktober 2000
Hobi : Berenang
Saya adalah mahasiswa FTUI angkatan 2018 dari jurusan Teknik Mesin dan saya adalah salah satu ciptaan terbaik dari Tuhan Yang Maha Esa, karena pada prinsipnya Tuhan Yang Maha Esa itu mendesain manusia dengan sebaik-baiknya makhluk.
Saya mengikuti kuliah Teknik Mesin karena saya menyukai di bidang otomotif sejak saya kecil dan jurusan ini sungguh berkaitan dengan bidang tersebut. Di jurusan Teknik Mesin ini ada banyak mata kuliah yang saya ikuti, salah satunya yaitu mata kuliah Metode Numerik.
Contents
Metode Numerik
Tujuan dari mempelajari metode numerik adalah:
- Memahami konsep dasar metode numerik dengan baik.
- Mampu menerapkan konsep metode numerik.
- Mampu menerapkan metode numerik untuk menyelesaikan berbagai persoalan teknik.
- Mendapat nilai tambah/adab agar menjadi manusia yang beradab.
Saya telah mengikuti mata kuliah ini selama setengah semester dan saya sudah mempelajari beberapa hal, seperti apa itu penyelesaian matematika menggunakan metode numerik, error-error dalam perhitungan secara numerik, turunan forward centered dan backward, cara-cara melakukan interpolasi dan regresi, serta cara mencari akar dari suatu persamaan secara numerik seperti menggunakan metode Newton-Raphson, metode Bisection, dan metode Secant.
Pertemuan Minggu 1 (11 November 2020)
Pada pertemuan minggu pertama ini, saya belajar bahwa sebagai manusia kita sebaiknya dapat mengetahui apa saja hal-hal yang kita pahami dan tidak kita pahami. Lalu berikutnya saya juga belajar bahwa komputer dapat membantu kita manusia untuk menyelesaikan berbagai persoalan. Namun meskipun teknologi komputer dan pengetahuan manusia saat ini sudah sangat berkembang, manusia dan komputer masih memiliki limitasi tertentu seperti contohnya tidak mampu menentukan nilai 1/0 dimana hanya Tuhan yang tahu nilainya. Oleh karena itu manusia tidak boleh melupakan Tuhan sebab hanya Tuhan yang Maha Tahu.
Tugas Minggu 1
Pada minggu ini, mahasiswa diberikan tugas untuk membuat video mengenai tutorial penggunaan software OpenModelica. Berikut ini video tutorial dasar-dasar penggunaan OpenModelica yang saya buat:
Pertemuan Minggu 2 (18 November 2020)
Pada pertemuan minggu kedua ini, kami diminta memberikan penjelasan mengenai apa yang sudah kami kerjakan pada pertemuan minggu pertama dan apa saja hal-hal yang sudah kami lakukan menggunakan OpenModelica.
Pada pertemuan ini juga kami dijelaskan oleh Pak Dai alasan mengapa aplikasi yang digunakan adalah OpenModelica dan bukan aplikasi lainnya seperti Python. Alasannya adalah karena OpenModelica merupakan aplikasi yang fungsi utamanya adalah modelling dan bukan programming, dimana sebenarnya modelling ini lebih tepat untuk seorang engineer. Simulasi yang dilakukan OpenModelica memang sedikit lebih lama dibandingkan aplikasi lainnya, karena bahasa yang ditulis di OpenModelica akan dikonversi terlebih dahulu kedalam bahasa C++ baru diproses datanya sebab OpenModelica tidak memiliki bahasa pemrograman tersendiri.
Lalu, kami pun diajarkan mengenai jenis-jenis file pada OpenModelica. Pada kesempatan kali ini kami mempelajari mengenai jenis file function dan file class. Contoh fungsi yang kami buat adalah sebagai berikut: FungsiTambahX1.mo
function FungsiTambahX1 input Real X; output Real Y; algorithm Y:=X+10; end FungsiTambahX1;
Lalu, kami juga diajarkan cara untuk memanggil fungsi tersebut ke dalam suatu class, yaitu contohnya seperti berikut ini:
Panggil.mo
class Panggil parameter Real X1=5; Real Hasil10TambahX1; equation Hasil10TambahX1=FungsiTambahX1(X1); end Panggil;
Dalam fungsi 'FungsiTambahX1.mo' input nya adalah sebuah variabel misalnya X dan output dari fungsinya adalah Y yang merupakan hasil penjumlahan X+10. Ketika fungsi ini dipanggil ke class 'Panggil.mo', nilai input fungsi ini diisi dengan nilai X1.
Tugas Minggu 2
Pada minggu ini, mahasiswa diberikan tugas untuk mencoba memanggil suatu fungsi kedalam suatu class seperti yang sudah dicontohkan, namun menggunakan persamaan aljabar simultan dan variable array. Persamaan aljabar simultan merupakan persamaan yang kompleks dimana persamaan ini terdiri dari banyak variabel yang perlu dicari valuenya. Variable array merupakan kumpulan variabel yang disimpan dalam nama yang sama namun tetap memiliki nilai yang berbeda-beda.
Untuk itu, pada tugas ini saya akan mencoba menyelesaikan 4 persamaan dengan 4 variabel yang akan dicari nilai dari masing-masing variabel tersebut. Contoh yang saya ambil ialah sebagai berikut:
Untuk menjawab persoalan tersebut pertama-tama saya membuat fungsi Gauss seperti berikut ini: FungsiGauss.mo
function FungsiGauss input Real U[4,4]; input Real V[4]; output Real O[4]; algorithm W:=Modelica.Math.Matrices.solve(U,V); end FungsiGauss;
Fungsi tersebut saya panggil kedalam class berikut ini: ClassGauss.mo
class ClassGauss parameter Real A[4,4]=[1,-4,2,3;2,1,3,-1;4,1,2,-3;3,-4,-2,2]; parameter Real B[4]={2,0,1,8}; Real O[4]; equation O=FungsiGauss(A,B); end ClassGauss;
Berikut video penjelasan yang saya buat:
Pertemuan Minggu 3 (25 November 2020)
Pada pertemuan kali ini, saya mempelajari banyak hal baru. Salah satunya yaitu belajar tentang cara membuat fungsi sendiri tanpa menggunakan fitur yang disediakan oleh OpenModelica. Pada kesempatan ini saya diberikan penjelasan oleh beberapa teman saya yaitu Josiah Enrico dan Christopher Salendu Erwin mengenai fungsi array dengan menggunakan metode Newton Raphson dan juga cara membuat fungsi Gauss Jordan di OpenModelica dengan sangat jelas. Pseudocode fungsi yang dijelaskan oleh Christopher adalah sebagai berikut: GaussJordan.mo
function GaussJordan input Real [:,:] A; //matrix yang ingin di OBE output Real [:,:] B; //matrix yang sudah diproses OBE protected // untuk local variable Integer h = 1; //pivot row Integer k = 1; //pivot column Integer m = size(A,1); //Number of row Integer n = size(A,2); //Number of column Integer c = 0; Integer max_row; // Row index of max number in pivot column Real [:] pivot_column; Real [:] pivot_row; Real [:,:] temp_array; Real r; Real float_error = 10e-10; algorithm //input A ke matrix B B := A; //dealing with error while h <= m and k <= n loop for i in 1 : m loop for j in 1 : n loop if abs(B[i,j]) <= float_error then B[i,j] := 0; end if; end for; end for; //Mencari pivot pivot_column:= {B[i,h] for i in h:m}; //Mencari baris terbawah yang mempunyai nilai pivot terbesar c:=h-1; for element in pivot_column loop c:= c+1; if abs(element)== max(abs(pivot_column)) then max_row :=c; end if; end for; //Jika tidak ada pivot di kolom ini, pindah ke kolom selanjutnya if B[max_row,k] == 0 then k:=k+1; else //tukar row h dengan max_row temp_array := B; temp_array[h] := B[max_row]; temp_array[max_row] := B[h]; B:= temp_array; //bagi pivot row dengan pivot number B[h] := B[h]/B[h,k]; for i in (h+1) :m loop r := B[i,k]/B[h,k]; B[i,k]:=0; for j in (k+1) : n loop B[i,j] := B[i,j]-B[h,j] * r; end for; end for; //pindah ke pivot column dan row selanjutnya h := h+1; k := k+1; end if; end while; // proses dari kanan atas h :=m; k :=n; while h >=1 and k>=1 loop //dealing with error for i in 1:m loop for j in 1:n loop if abs(B[i,j]) <=float_error then B[i,j]:=0; end if; end for; end for; //mencari pivot pivot_row := {B[h,i] for i in 1:k}; //Get position index k of pivot c := 0; for element in pivot_row loop c := c+1; if element <> 0 then break; end if; end for; k:= c; // jika tidak ada pivot, maka pindah ke row berikutnya if B[h,k] == 0 then h:= h-1; else for i in 1:(h-1) loop r := B[i,k]; B[i] := B[i] - B[h] *r; end for; //pindah ke pivot row dan column berikutnya h:=h+1; k:=k+1; end if; end while; end GaussJordan;
Tugas Minggu 3
Pada pertemuan minggu ini juga kami diberikan tugas untuk membuat program sederhana menggunakan OpenModelica untuk menyelesaikan suatu kasus terkait struktur seperti pada gambar berikut:
Maka, saya membuatnya menggunakan cara seperti yang dicontohkan di buku untuk example 3.1 dan pseudocodenya seperti ini: Truss.mo
class Truss parameter Real E=200e9; parameter Real A=0.001; Real L1=1; Real L2=1; Real L3=1.6; Real L4=1.25; Real L5=1.6; Real tetha1=DEGtoRAD(0); //DEGtoRAD untuk mengubah satuan sudut Real tetha2=DEGtoRAD(0); Real tetha3=DEGtoRAD(231.34); Real tetha4=DEGtoRAD(270); Real tetha5=DEGtoRAD(308.66); Real U[8]; //Displacement Real R[8]; //Reaction //Hitung K masing-masing Truss //Truss1 Real [8,8] K1 = (E*A/L1)* [(cos(tetha1))^2,(cos(tetha1)*sin(tetha1)),-(cos(tetha1))^2,-(cos(tetha1)*sin(tetha1)),0,0,0,0; (cos(tetha1)*sin(tetha1)),(sin(tetha1))^2,-(cos(tetha1)*sin(tetha1)),-(sin(tetha1))^2,0,0,0,0; -(cos(tetha1))^2,-(cos(tetha1)*sin(tetha1)),(cos(tetha1))^2,(cos(tetha1)*sin(tetha1)),0,0,0,0; -(cos(tetha1)*sin(tetha1)),-(sin(tetha1))^2,(cos(tetha1)*sin(tetha1)),(sin(tetha1))^2,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0]; //Truss2 Real [8,8] K2 = (E*A/L2)* [0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,(cos(tetha2))^2,(cos(tetha2)*sin(tetha2)),-(cos(tetha2))^2,-(cos(tetha2)*sin(tetha2)),0,0; 0,0,(cos(tetha2)*sin(tetha2)),(sin(tetha2))^2,-(cos(tetha2)*sin(tetha2)),-(sin(tetha2))^2,0,0; 0,0,-(cos(tetha2))^2,-(cos(tetha2)*sin(tetha2)),(cos(tetha2))^2,(cos(tetha2)*sin(tetha2)),0,0; 0,0,-(cos(tetha2)*sin(tetha2)),-(sin(tetha2))^2,(cos(tetha2)*sin(tetha2)),(sin(tetha2))^2,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0]; //Truss3 Real [8,8] K3 = (E*A/L3)* [0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,(cos(tetha3))^2,(cos(tetha3)*sin(tetha3)),-(cos(tetha3))^2,-(cos(tetha3)*sin(tetha3)); 0,0,0,0,(cos(tetha3)*sin(tetha3)),(sin(tetha3))^2,-(cos(tetha3)*sin(tetha3)),-(sin(tetha3))^2; 0,0,0,0,-(cos(tetha3))^2,-(cos(tetha3)*sin(tetha3)),(cos(tetha3))^2,(cos(tetha3)*sin(tetha3)); 0,0,0,0,-(cos(tetha3)*sin(tetha3)),-(sin(tetha3))^2,(cos(tetha3)*sin(tetha3)),(sin(tetha3))^2]; //Truss4 Real [8,8] K4 = (E*A/L4)* [0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,(cos(tetha4))^2,(cos(tetha4)*sin(tetha4)),0,0,-(cos(tetha4))^2,-(cos(tetha4)*sin(tetha4)); 0,0,(cos(tetha4)*sin(tetha4)),(sin(tetha4))^2,0,0,-(cos(tetha4)*sin(tetha4)),-(sin(tetha4))^2; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,-(cos(tetha4))^2,-(cos(tetha4)*sin(tetha4)),0,0,(cos(tetha4))^2,(cos(tetha4)*sin(tetha4)); 0,0,-(cos(tetha4)*sin(tetha4)),-(sin(tetha4))^2,0,0,(cos(tetha4)*sin(tetha4)),(sin(tetha4))^2]; //Truss5 Real [8,8] K5 = (E*A/L5)* [(cos(tetha5))^2,(cos(tetha5)*sin(tetha5)),0,0,0,0,-(cos(tetha5))^2,-(cos(tetha5)*sin(tetha5)); (cos(tetha5)*sin(tetha5)),(sin(tetha5))^2,0,0,0,0,-(cos(tetha5)*sin(tetha5)),-(sin(tetha5))^2; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; 0,0,0,0,0,0,0,0; -(cos(tetha5))^2,-(cos(tetha5)*sin(tetha5)),0,0,0,0,(cos(tetha5))^2,(cos(tetha5)*sin(tetha5)); -(cos(tetha5)*sin(tetha5)),-(sin(tetha5))^2,0,0,0,0,(cos(tetha5)*sin(tetha5)),(sin(tetha5))^2]; //Buat ke KGlobal Real KGlobal [8,8] = K1+K2+K3+K4+K5; //Masukkan Boundary Condition Real KGlobalBoundary [8,8]= [10^6,0,0,0,0,0,0,0; 0,10^6,0,0,0,0,0,0; -2e7,0,4e7,38223.5,-2e7,0,-91.3155,-38223.5; 0,0,38223.5,1.5e7,0,0,-38223.5,-1e7; 0,0,0,0,10^6,0,0,0; 0,0,0,0,0,10^6,0,0; -4e6,-6e6,-91.3155,-38223.5,-4e6,-6e6,9.7e6,51373.2; 6e6,-7e6,-38223.5,-1e7,-6e6,-7e6,51373.2,3.1e7]; //Karena 1 dan 3 static maka F1x,F1y,F3x,F3y = 0 //F2x=F*sin15 //F2y=F*cos15 //F4x=F*sin15 //F4y=F*cos15 Real F[8] = {0,0,-1035.276,3865.703,0,0,-1035.276,3863.703}; equation U=FungsiGaussJordan(KGlobalBoundary,F); R=KGlobal*U-F; end Truss;
Pertemuan Minggu 4 (2 Desember 2020)
Pada pertemuan kali ini, saya diberikan kuis oleh Pak DAI untuk membuat class diagram & flowchart setiap class untuk coding yang dibuat oleh Josiah Enrico.