Hikaru Trinita Salsabila

From ccitonlinewiki
Revision as of 23:23, 2 December 2020 by Hikaru.trinita (talk | contribs) (Kuis Flowchart dan Class Diagram)
Jump to: navigation, search

Biodata

IMG-20191103-WA0193.jpg

Nama  : Hikaru Trinita Salsabila

NPM  : 1806149122

TTL  : Kawasaki, 25 Juli 2000

Tempat Tinggal: Depok

Golongan Darah: A

Hobi  : Membaca

Saat ini, saya adalah mahasiswa semester 5 program studi Teknik Mesin Universitas Indonesia. Saya memilih jurusan ini atas saran dari kedua orang tua, yang mana ayah saya juga merupakan dosen di DTM UI. Saya bersyukur bisa menjadi mahasiswa Teknik Mesin Universitas Indonesia, karena kampus ini merupakan salah satu kampus terbaik. Semoga ilmu yang saya dapatkan di perkuliahan bisa menjadi bekal untuk masa depan. Besar harapan agar saya bisa menjadi orang yang bermanfaat bagi diri sendiri dan juga orang lain. Aamiin.


Metode Numerik

Perkuliahan Metode Numerik minggu ke 1-UTS diisi oleh Bapak Dr. Ir. Engkos A. Kosasih, M.T. Beberapa topik yang dibahas yaitu:

  • Pseudocode
  • Sistem Persamaan
  • Turunan Numerik
  • Metode Newton Rhapson, Secant, dan Bisection
  • Regresi Linear
  • Interpolasi

Setelah UTS, perkuliahan Metode Numerik diisi oleh Bapak Dr. Ir. Ahmad Indra Siswantara


Minggu 1 (11 November 2020)

Pada pertemuan minggu ini, dipaparkan tujuan-tujuan pembelajaran metode numerik, yaitu: Tujuan:

  • 1.Memahami konsep-konsep dan prinsip-prinsip dasar dalam metode numerik, Contoh:Persamaan aljabar, algorithma, pencocokan kurva, persamaan diferensial parsial, dll.
  • 2.Mengerti aplikasi metode numerik.
  • 3.Mampu menerapkan metode numerik dallam persoalan teknik.
  • 4.Mendapat nilai tambah/adab sehingga kita menjadi orang yang lebih beradab.

Tugas Minggu 1

Untuk tugas pertama, kami diminta mempelajari Open Modelica, yaitu sebuah aplikasi untuk membuat modelling dan simulasi. Aplikasi ini biasa digunakan digunakan di bidang industri maupun akademis. Untuk mempelejari aplikasi tersebut, saya menonton beberapa video dari youtube:

Saya mencoba membuat model sederhana yaitu sistem katrol(untuk mencari nilai tegangan tali dan percepatan) dan interpolasi (untuk mencari nilai diantara dua buah nilai yang sudah diketahui). Video pembelajaran adalah sebagai berikut:

  • Sistem Katrol Tetap
  • Interpolasi

Minggu 2 (18 November 2020)

Di awal pertemuan disampaikan oleh Pak Dai, jika kita sebagai manusia harus memiliki perubahan setiap harinya, hari ini harus lebih baik dari hari kemarin. Sebelum memasuki materi, kami diminta mereview fungsi pembelajaran aljabar linear dan hubungannya dengan metode numerik. Kemudian, kami diminta menceritakan pengalaman mempelajari aplikasi Open Modelica. Aplikasi ini dibuat dengan tujuan bahasa pemodelan, bukan coding. Akan tetapi, ketika melakukan perhitungan, code yang ditulis harus dalam bahsa C++. Salah satu alasan pemilihan penggunaan aplikasi ini adalah karena Open Modelica dibuat free, sehingga bisa digunakan oleh siapa saja. Open Modelica mempunyai beberapa fitur, seperti membuat model, class, function, dan lain-lain. Aplikasi ini object oriented, kita bisa membuat beberapa class fungsi dan class eksekusi, kemudian menggabungkannya menjadi satu model.

Sebagai contoh pembelajaran, kami dipandu oleh Pak Dai membuuat sebuah function dan class yang akan dihubungkan. Function yang dibuat adalah "Fungsi Tambah X1"dengan X sebagai input, Y sebagai output, dan fungsi yang dibuat adalah Y=10+x. Dibuat dalam Open Modelica sebagai berikut:

Fungsitambahx1.png

Selanjutnya dibuat class "Panggil"yang berfungsi "memanggil" fungsi tambah X1 tersebut. Pada class ini, kita dapat mengubah-ubah nilai input X1.

Classpanggil.png

Dengan gabungan class dan function ini, kita dapat mencari nilai output Y dengan memasukkan nilai input X1. Sebagai contoh, dimasukkan nilai X1 sebesar 5 maka sesuai fungsi Y=10+X, akan didapatkan nilai Hasil tambah X1=10+X1=10+5=15.

Hasiltambahx1.png

Nilai X1 dapat diubah-ubah kemudian dilakukan re-simulate untuk mendapatkan nilai outputnya.

Tugas Minggu 2

Untuk tugas minggu ini kami diminta membuat sebuah fungsi berupa persamaan aljabar simultan dengan variabel array kemudian membuat class untuk memanggil fungsi tersebut. Persamaan aljabar simultan adalah sebuah persoalan matematika yang kompleks sehingga dengan menggunakan tools, penyelesaiannya dapat dibuat lebih sederhana. Metode yang dapat digunakan untuk menyelesaikan persamaan aljabar simultan adalah metode Gauss, Gauss-Jordan, Crammer, dan Gauss-Seidel. Sedangkan variabel array adalah sebuah variabel yang di dalamnya terdapat banyak data. Sebagai contoh, jika kita memiliki data X1, X2, dan X3, dengan menggunakan variabel array cukup dituliskan X[3] saja. Pada tugas kali ini, saya mencoba menyelesaikan persoalan yang saya ambil dari buku Incropera (mata kuliah Heat Transfer) pada bab 4 mengenai penyelesaian distribusi temperatur pada beberapa node.

Hikaru1.png

Kemudian persoalan tersebut akan dibuat ke dalam 8 persamaan 8 variabel sebagai berikut:

Screenshot (394).png

Dengan menggunakan OpenModelica dan metode Gauss, didapatkan hasil T1 hingga T8 yang diwakilkan dengan X:

Screenshot (396).png

Berikut video cara menyelesaikan distribusi temperatur menggunakan Open Modelica:

Minggu 3 (25 November 2018)

Pada pertemuan minggu ke-3, dibahas aplikasi metode numerik pada permasalahan eknik. Beberapa metode yang dapat digunakan yaitu CFD, Stokastik, dan FEA. Dalam menyelesaikan masalah teknik, angkah yang harus dilakukan adalah melakukan analisis, membuat model matematis, menggunakan metode numerik untuk penyelesain (menggunakan computer), dan didapatkan solusi dari permasalahan. Salah satu permasalahan teknik yang kami pelajari adalah Truss.Sebelum kelas, kami diminta berlatih mengerjakan Example 3.1 mengenai Truss. Berikut example 3.1 yang saya coba kerjakan:

3.1-1.png

Langkah pertama yaitu mencari matriks kekakuan global dengan code sebagai berikut:

3.1-2.png
3.1-3.png
3.1-4.png

Setelah disimulate, didapatkan nilai-nilai kekakuan global dan dituangkan kedalam matriks:

3.1-5.png
3.1-6.png

Kemudian, mencari nilai displacement dan reaksi dari truss:

3.1-7.png
3.1-8.png

Persoalan tersebut dibuat kedalam function dan class pada Open Modelica:

3.1-10.png
3.1-11.png

Setelah code tidak ada error, dilakukan simulate dan didapatkan hasil displacement serta reaksi dari truss:

3.1-9.png
Revisi 3.1-12.png
Revisi 3.1-13.png

Gauss Jordan

Ketika kelas, kami kembali dijelaskan mengenai aljabar simultan, variable array, dan metode Gauss. Agar lebih mengerti mengenai aplikasi metode numerik dan pengaplikasiannya dalam Open Modelica. Christo, salah satu mahasiswa menjelaskan mengenai code untuk menyelesaikan eliminasi Guass Jordan, berikut code modelica untuk Gauss Jordan.

function GaussJordan
input Real [:,:] A;//matriks awal
output Real [:,:] B;//matriks tereduksi
protected 
Integer h = 1;    //pivot row
Integer k = 1;    //pivot coloumn
Integer m = size(A,1); //jumlah baris
Integer n = size(A,2); //jumlah kolom
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
B := A;
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;
//Finding pivot 
 pivot_column:= {B[i,h] for i in h:m};
   //Baris terbawah yang mempunyai dengan pivot tertinggi
   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 - max_row
   temp_array := B;
   temp_array[h] := B[max_row];
   temp_array[max_row] := B[h];
   B:= temp_array;
   //devide pivot row by 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 kolom 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; 
//finding 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;
 // no pivot in this row, move to next row
 if B[h,k] == 0 then 
   h:= h-1;
 else
   //perform row operatation
   for i in 1:(h-1) loop
     r := B[i,k];
     B[i] := B[i] - B[h] *r;
   end for;
   //move to next pivot row dan column
   h:=h+1;
   k:=k+1;
 end if; 
end while;    
end GaussJordan;

Naive Gauss

Selain itu, kami diminta membuat code untuk menyelesaikan persamaan 9.12 pada buku Chapra yaitu mengenaik eliminasi Naïve Gauss. Pseudocode untuk eliminasi Naïve Gauss diberikan pada Fig.9.4:

HIkaru 9.4.png

Kemudian, pseudocode tersebut dibuat kedalam bahasa Open Modelica:

function NaiveGauss
input Real [3,3] A; 
input Real [3] B;   
output Real [3] x;  
protected
Real [3,3] a;
Real [3] b;
Integer m = size(A,1); // jumlah kolom 
Integer n = size(A,2); // jumlah baris
Real k = 1;      
Real i = 1;       
Real j = 1;       
Real factor = 1; 
Real sum = 1;   
 
algorithm
a := A;
b := B;
// Forward Elimination
for k in 1:(n-1) loop
  for i in (k+1):n loop
    factor := a[i,k] / a[k,k];
    for j in (k+1):n loop
      a[i,j] := a[i,j] - (factor * a[k,j]);
    end for;
    b[i] := b[i] - (factor * b[k]);
  end for;
end for;
// Back Substitution
x[n] := b[n] / a[n,n];
for i in (n-1):(-1) loop
  sum := b[i];
  for j in (i+1):n loop
    sum := sum - (a[i,j] * x[j]);
  end for;
  x[i] := sum / a[i,i];
end for;

end NaiveGauss;
Hikaru 9.5-1.png

Function Naïve Gauss yang sudah dibuat tersebut dibuktikan dengan menyelesaikan example 9.5 pada buku Chapra:

Hikaru 9.5-3.png
Hikaru 9.5-2.png

Setelah code tidak mengalami error, dilakukan simulate dan didapatkan hasil yang sama dengan pembahasan pada buku:

9.5-4.png
9.5-5.png

Tugas 3

Sebagai tugas 3 kami diminta menyelesaikan permalasahan truss berikut:

Pr3-1.png

Untuk menyelesaikan soal truss tersebut, terlebih dahulu saya membuat FBD untuk mengetahui properties masing-masing batang sehingga bisa didapatkan matriks kekakuan lokal dan global.

Pr3 manual bener.jpg

Setelah itu dibuat dalam OpenModelica, disimulasikan, dan didapatkan matriks kekakuan global(KG) untuk truss tersebut:

Screenshot (464).png
Screenshot (465).png
Screenshot (466).png

Untuk mencari displacement, perlu diperhatikan boundary dan external load yang ada dan dibuat kedalam matriks A. Karena titik 1 dan 3 merupakan pinned, maka tidak ada displacement pada titik 1 dan 3(U1x=U1Y=U3X=U3Y=0). External load berada pada titik 2 dan 4 (pada arah x sebesar -4000Cos(15) sedangkan pada arah y sebesar 4000Cos(15)). Pada Open Modelica, menggunakan persamaan A*U=F dan R=(KG*U)-R untuk mencari displacement dan reaction setiap titik:

Screenshot (468).png

Sehingga didapatkan nilai displacement dan reaction(jika diambil error sebesar e-10):

Screenshot (467).png
Pr3 hasil.jpg

Mencari KG

model TugasNo4
parameter Real A=0.001;//luas
parameter Real E=200*10^9;//modulus elastisitas
parameter Real L1=1;//Panjang batang 1,2
parameter Real L2=1.25;//Panjang batang 4
parameter Real L3=1.6;//panjang batang 3,5
parameter Real t1=0;//sudut batang 1.Node 1 dan 2.
parameter Real t2=0;//sudut batang 2. Node 2 dan 3.
parameter Real t3=4.04;//sudut batang 3.Node 3 dan 4.
parameter Real t4=4.7;//sudut batang 4. Node 2 dan 4.
parameter Real t5=5.4;//sudut batang 5. Node 1 dan 4.
Real d1[8,8]=[(cos(t1))^2,sin(t1)*cos(t1),-(cos(t1))^2,-sin(t1)*cos(t1),0,0,0,0;
              sin(t1)*cos(t1),(sin(t1))^2,-sin(t1)*cos(t1),-(sin(t1))^2,0,0,0,0;
              -(cos(t1))^2,-sin(t1)*cos(t1),(cos(t1))^2,sin(t1)*cos(t1),0,0,0,0;
              -sin(t1)*cos(t1),-(sin(t1))^2,sin(t1)*cos(t1),(sin(t1))^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];           
Real d2[8,8]=[0,0,0,0,0,0,0,0;
             0,0,0,0,0,0,0,0;
             0,0,(cos(t2))^2,sin(t2)*cos(t2),-(cos(t2))^2,-(sin(t2)*cos(t2)),0,0;
             0,0,sin(t2)*cos(t2),(sin(t2))^2,-(sin(t2)*cos(t2)),-(sin(t2))^2,0,0;
             0,0,-(cos(t2))^2,-(sin(t2)*cos(t2)),(cos(t2))^2,sin(t2)*cos(t2),0,0;
             0,0,-(sin(t2)*cos(t2)),-(sin(t2))^2,sin(t2)*cos(t2),(sin(t2))^2,0,0;
             0,0,0,0,0,0,0,0;
             0,0,0,0,0,0,0,0];
Real d3[8,8]=[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(t3))^2,sin(t3)*cos(t3),-(cos(t3))^2,-sin(t3)*cos(t3);
             0,0,0,0,sin(t3)*cos(t3),(sin(t3))^2,-sin(t3)*cos(t3),-(sin(t3))^2;
             0,0,0,0,-(cos(t3))^2,-sin(t3)*cos(t3),(cos(t3))^2,sin(t3)*cos(t3);
             0,0,0,0,-sin(t3)*cos(t3),-(sin(t3))^2,sin(t3)*cos(t3),(sin(t3))^2];               
Real d4[8,8]=[0,0,0,0,0,0,0,0;
              0,0,0,0,0,0,0,0;
             0,0,(cos(t4))^2,sin(t4)*cos(t4),0,0,-(cos(t4))^2,-sin(t4)*cos(t4);
             0,0,sin(t4)*cos(t4),(sin(t4))^2,0,0,-sin(t4)*cos(t4),-(sin(t4))^2;
             0,0,0,0,0,0,0,0;
             0,0,0,0,0,0,0,0;
             0,0,-(cos(t4))^2,-sin(t3)*cos(t4),0,0,(cos(t4))^2,sin(t4)*cos(t4);
             0,0,-sin(t4)*cos(t4),-(sin(t4))^2,0,0,sin(t4)*cos(t4),(sin(t4))^2];             
Real d5[8,8]=[cos(t5)^2,sin(t5)*cos(t2),0,0,0,0,-(cos(t5))^2,-(sin(t5)*cos(t5));
             sin(t5)*cos(t5),(sin(t5))^2,0,0,0,0,-(sin(t5)*cos(t5)),-(sin(t5))^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(t5))^2,-(sin(t5)*cos(t5)),0,0,0,0,(cos(t5))^2,sin(t5)*cos(t5);
            -(sin(t5)*cos(t5)),-(sin(t5))^2,0,0,0,0,sin(t5)*cos(t5),(sin(t5))^2];
Real k1;
Real k2;
Real k3;
Real K1[8,8];
Real K2[8,8];
Real K3[8,8];
Real K4[8,8];
Real K5[8,8];
Real KG[8,8];
equation
k1=A*E/L1;
k2=A*E/L2;
k3=A*E/L3;
K1=k1*d1;
K2=k1*d2;
K3=k3*d3;
K4=k2*d4;
K5=k3*d5;
KG=K1+K2+K3+K4+K5;
end TugasNo4;

Mencari U dan R

class UdanRTugasNo4
parameter Real A[8,8]=[10^6,0,0,0,0,0,0,0;
                      0,10^6,0,0,0,0,0,0;
                     -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6;
                      0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8;
                      0,0,0,0,10^6,0,0,0;
                      0,0,0,0,0,10^6,0,0;
                      -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6;
                      6.13*10^6,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8];//apply boundary
parameter Real B[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//external load
parameter Real KG[8,8]=[2.5*10^8,-9.6*10^7,-2*10^8,0,0,0,-5*10^7,6.13*10^7;
                      -6.1*10^7,7.46*10^7,0,0,0,0,6.13*10^7,-7.4*10^7;
                     -2*10^8,0,4*10^8,1.98*10^6,-2*10^8,0,-0.0245566,-1.9*10^6;
                      0,0,1.98*10^6,1.59*10^8,0,0,-1.9*10^6,-1.5*10^8;
                      0,0,-2*10^8,0,2.48*10^8,6.09*10^7,-4.8*10^7,-6*10^7;
                      0,0,0,0,6.09*10^7,7.65*10^7,-6*10^7,-7.6*10^7;
                      -5*10^7,6.13*10^7,-0.0245566,-1.5*10^6,-4.8*10^7,-6*10^7,9.88*10^7,1.58*10^6;
                      6.13*10^7,-7.4*10^7,-1.9*10^6,-1.5*10^8,-6*10^7,-7.6*10^7,1.58*10^6,3.11*10^8];                         
parameter Real F[8]={0,0,-1035.27618,3863.703305,0,0,-1035.27618,3863.703305};//force
Real U[8];//displacement
Real R[8];//reaction
equation
U=NaiveGauss(A,B);
R=(KG*U)-F;
end UdanRTugasNo4;

Minggu 4

Kuis Flowchart dan Class Diagram

Pada minggu ke 4, kami diberikan kuis untuk membuat flowchart dan class diagram dari coding penyelesaian truss. Terdapat 5 coding yaitu penyelesaian keseluruhan, matriks kekakuan, matriks kekakuan global, matriks reaksi truss, dan Gauss Jordan untuk mendapat nilai displacement.

638758.jpg
Yuks.jpg
Yuk2.jpg
Yuk3.jpg
Yuk4.jpg