Faizal Rikaz Al Muntaqo

From ccitonlinewiki
Revision as of 15:36, 2 December 2020 by Rikazfaizal (talk | contribs) (Pertemuan 3 (25/11/20))
Jump to: navigation, search

Selamat Datang di laman Wiki saya!

Biodata

Faizal Rikaz Al Muntaqo

Nama  : Faizal Rikaz Al Muntaqo

NPM  : 1806201245

TTL  : Jakarta, 15 Desember 1999

Hobi  : Futsal

Saya adalah seorang mahasiswa Teknik Mesin UI angkatan 2018. Ketertarikan saya kepada Jurusan Teknik Mesin salah satunya didasari oleh rasa penasaran dan kesukaan saya terhadap teknologi yang terus berkembang tiap harinya dan dan juga tidak sedikit saya mendapatkan pengaruh secara tidak langsung dari ayah saya yang juga merupakan seorang Engineer. Saya sangat berharap nantinya ilmu ilmu yang telah saya dapatkan dari perkuliahan dapat diaplikasikan dikehidupan saya kedepannya dan semoga dapat berguna bagi keluarga, agama dan bangsa Indonesia.

Metode Numerik

Tujuan Pembelajaran

Tujuan pembelajaran dari mata kuliah Metode Numerik ini adalah:

  • 1.Memahami konsep dan prinsip dasar dalam metode numerik (contoh:Persamaan aljabar, algorithma, dll)
  • 2. Mengerti dan dapat mengaplikasikan aplikasi metode numerik
  • 3. Mampu menerapkan ilmu-ilmu metode numerik dalam persoalan teknik
  • 4. Mendapat nilai tambah adab sehingga dapat menjadi orang yang lebih beradab

Review Materi(Sebelum UTS)

Beberapa topik yang dibahas pada saat sebelum UTS meliputi:

  • 1. Deret Taylor dan McLaurin
  • 2. Regresi Linear
  • 3. Interpolasi
  • 4. Pseudocode

Pertemuan 1 (11/11/20)

Tugas Pertemuan 1 adalah mempelajari Modelica melalui situs Youtube lalu membuat video pembelajaran tentang Modelica kemudian di-upload di channel Youtube. Saya mempelajari Modelica melalui youtube pada situs berikut:

https://www.youtube.com/watch?v=m0Ahs8fEN28

Dan berikut merupakan Tugas video pembelajaran saya pada aplikasi modelica.

Pertemuan 2 (18/11/20)

Pada pertemuan kali ini kami sharing tugas yang telah diberikan diminggu lalu. Perbedaan Modelica dan Bahasa Coding lainnya (seperti: Phyton, dll) adalah modelica merupakan bahasa permodelan dan berbeda dengan bahasa coding sperti phyton dll. Pada proses simulate Open Modellica cukup lama karena proses dari bahasa modelica ke C lalu baru ke bahasa mesin. Namun ketika kita hanya merubah parameternya saja dengan cara me-resimulate maka proses akan cepat, karena tidak melewati proses perubahan bahasa lagi.

Mengapa menggunakan open modelica?

  • - Cocok dengan engineer
  • - Sistem perhitungan cepat
  • - Banyak penggunanya
  • - Free/ open technology

Tugas Video: https://www.youtube.com/watch?v=nVaCw_QBNaY

Pertemuan 3 (25/11/20)

Pada pertemuan ke 3 ini mempelajari tentang pseoudocode gauss elemination, lalu Pseudocode gauss dijelaskan oleh teman sekelas kami yaitu Christo. Lalu kami juga ditugaskan untuk membuat program sederhana menggunakan Open Modelica untuk menyelesaikan sebuah permasalahan yaitu mengenai Truss. Berikut Tugas Truss yang telah saya kerjakan.

TUGAS TRUSSES

class Tugas_Trusses

parameter Integer N=8; //Global Matrice
parameter Real A=0.001; //Area m2
parameter Real E=200e9; //Pa
Real KG[N,N]; //global
Real KGinitial[N,N]; //global
Real Sol[N]; //global dispplacement
Real X[N]={0,0,-1035.2762,-3863.7033,0,0,-1035.2762,-3863.7033};
Real R[N]; 
Real SolMat[N,1];
Real XMat[N,1];
Real L1=1;
Real L2=1;
Real L3=1.6;
Real L4=1.25;
Real L5=1.6;
Real Tetha1=degtorad(0);
Real Tetha2=degtorad(0);
Real Tetha3=degtorad(231.34);
Real Tetha4=degtorad(270);
Real Tetha5=degtorad(308.66);

//Boundary condition
 Integer b1=1;
 Integer b2=3;

//Truss 1
 Real X1=Tetha1;
 Real k1=A*E/L1;
 Real K1[4,4]; //stiffness matrice
 Real KG1[N,N];
 Integer p1o=1;
 Integer p1i=2;

//Truss 2
 Real X2=Tetha2;
 Real k2=A*E/L2;
 Real K2[4,4]; //stiffness matrice
 Real KG2[N,N];
 Integer p2o=2;
 Integer p2i=3;

//Truss 3
 Real X3=Tetha1;
 Real k3=A*E/L3;
 Real K3[4,4]; //stiffness matrice
 Real KG3[N,N];
 Integer p3o=2;
 Integer p3i=4;

//Truss 4
 Real X4=Tetha4;
 Real k4=A*E/L4;
 Real K4[4,4]; //stiffness matrice
 Real KG4[N,N];
 Integer p4o=1;
 Integer p4i=4;

//Truss 5
 Real X5=Tetha5;
 Real k5=A*E/L5;
 Real K5[4,4]; //stiffness matrice
 Real KG5[N,N];
 Integer p5o=3;
 Integer p5i=4;

algorithm

//Pembuatan Matrice Global
 K1:=Stiffness_Matrices(X1);
 KG1:=k1*Local_Global(K1,N,p1o,p1i);

 K2:=Stiffness_Matrices(X2);
 KG2:=k2*Local_Global(K2,N,p2o,p2i);

 K3:=Stiffness_Matrices(X3);
 KG3:=k3*Local_Global(K3,N,p3o,p3i);

 K4:=Stiffness_Matrices(X4);
 KG4:=k4*Local_Global(K4,N,p4o,p4i);

 K5:=Stiffness_Matrices(X5);
 KG5:=k5*Local_Global(K5,N,p5o,p5i);

 KG:=KG1+KG2+KG3+KG4+KG5;
 KGinitial:=KG;

//Implementing Boundary Condition
 for i in 1:N loop
  KG[2*b1-1,i]:=0;
  KG[2*b1,i]:=0;
  KG[2*b2-1,i]:=0;
  KG[2*b2,i]:=0;
 end for;

 KG[2*b1-1,2*b1-1]:=1;
 KG[2*b1,2*b1]:=1;
 KG[2*b2-1,2*b2-1]:=1;
 KG[2*b2,2*b2]:=1;

//Solving Displacement
 Sol:=Gauss_Jordan(N,KG,X);

//Solving Reaction Force
 SolMat:=matrix(Sol);
 XMat:=matrix(X);
 R:=Reaction_Trusses(N,KGinitial,SolMat,XMat);


end Tugas_Trusses;

Fungsi Degtorad

function Degtorad
 input Real deg;
 output Real rad;
 protected
 constant Real pi = 3.14;
algorithm

rad:=deg*pi/180;

end Degtorad;

Fungsi Stiffness Matrices

function Stiffness_Matrices
 input Real A;
 output Real X[4,4];

protected
 Real Y;
 Real float_error = 10e-10;
 final constant Real pi=2*Modelica.Math.asin(1.0);

algorithm

 Y:=A/180*pi;
    
X:=[(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.cos(Y))^2,- 
Modelica.Math.cos(Y)*Modelica.Math.sin(Y);

Modelica.Math.cos(Y)*Modelica.Math.sin(Y),(Modelica.Math.sin(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),- 
(Modelica.Math.sin(Y))^2;

-(Modelica.Math.cos(Y))^2,-Modelica.Math.cos(Y)*Modelica.Math.sin(Y), 
(Modelica.Math.cos(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y);

-Modelica.Math.cos(Y)*Modelica.Math.sin(Y),-(Modelica.Math.sin(Y))^2,Modelica.Math.cos(Y)*Modelica.Math.sin(Y), 
(Modelica.Math.sin(Y))^2];

 for i in 1:4 loop
 for j in 1:4 loop
   if abs(X[i,j]) <= float_error then
     X[i,j] := 0;
   end if;
 end for;
 end for;

end Stiffness_Matrices;

Fungsi Local Global

function Local_Global
 input Real Y[4,4];
 input Integer B;
 input Integer p1;
 input Integer p2;
 output Real G[B,B];

algorithm

 for i in 1:B loop
 for j in 1:B loop
   G[i,j]:=0;
 end for;
 end for;

G[2*p1,2*p1]:=Y[2,2];
G[2*p1-1,2*p1-1]:=Y[1,1];
G[2*p1,2*p1-1]:=Y[2,1];
G[2*p1-1,2*p1]:=Y[1,2];

G[2*p2,2*p2]:=Y[4,4];
G[2*p2-1,2*p2-1]:=Y[3,3];
G[2*p2,2*p2-1]:=Y[4,3];
G[2*p2-1,2*p2]:=Y[3,4]; 

G[2*p2,2*p1]:=Y[4,2];
G[2*p2-1,2*p1-1]:=Y[3,1];
G[2*p2,2*p1-1]:=Y[4,1];
G[2*p2-1,2*p1]:=Y[3,2];

G[2*p1,2*p2]:=Y[2,4];
G[2*p1-1,2*p2-1]:=Y[1,3];
G[2*p1,2*p2-1]:=Y[2,3];
G[2*p1-1,2*p2]:=Y[1,4];

end Local_Global;

Fungsi Reaction Trusses

function Reaction_Trusses
 input Integer N;
 input Real A[N,N];
 input Real B[N,1];
 input Real C[N,1];
 output Real Sol[N];
protected
 Real X[N,1];
 Real float_error = 10e-10;

algorithm
 X:=A*B-C;

 for i in 1:N loop
 if abs(X[i,1]) <= float_error then
   X[i,1] := 0;
 end if;
 end for;

 for i in 1:N loop
  Sol[i]:=X[i,1];
 end for;

end Reaction_Trusses;

TUGAS GAUSS JORDAN

function Tugas_GaussJordan

input Real [:,:] A;
output Real [:,:] B;

protected // local variable
Integer h = 1;    //pivot row
Integer k = 1;    //pivot coloumn
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

//function input A and output B 
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};
  
    //Search for the bottom row that has the highest pivot value
    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;
    
  //If there are no pivots in this column, move to the next column
  if B[max_row,k] == 0 then
    k:=k+1;
   
  else 
    // switch 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;
    
    //move to pivot column and the next row
    h := h+1;
    k := k+1;
    
  end if;
  
end while;

// from the top right
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 Tugas_GaussJordan;