John Patrick Anhar

From ccitonlinewiki
Revision as of 22:06, 8 December 2020 by John.patrick (talk | contribs) (Pertemuan Minggu 4 (2 Desember 2020))
Jump to: navigation, search
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.

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:

ContohSoalGauss2.png

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:

Pr3-1.png

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.

Kuis Diagram Class dan Flowchart

Q jp.jpg
Classdiajp.jpeg