Difference between revisions of "Muhammad Faja Taufiqurrahman"

From ccitonlinewiki
Jump to: navigation, search
Line 84: Line 84:
 
<youtube width="200" height="100">hz1JH31AkQc</youtube>
 
<youtube width="200" height="100">hz1JH31AkQc</youtube>
 
</div>
 
</div>
 +
 +
=== Pertemuan Ketiga (Rabu, 25 November 2020) ===
 +
 +
Pada pertemuan ketiga, Pak Dai menjelaskan mengenai tiga aplikasi metode numerik yang sering digunakan dalam menyelesaikan permasalahan teknik
 +
*1. Computation Fluid Dynamics (CFD)
 +
*2. Finite Element Analysis
 +
*3. Metode Stokastik.
 +
Dalam menyelesaikan masalah teknik, langkah 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.
  
 
Pak Dai kemudian menugaskan untuk membuat fungsi mengenai gauss jordan, kemudian dijelaskan oleh christofer dengan fungsi sebagai berikut :
 
Pak Dai kemudian menugaskan untuk membuat fungsi mengenai gauss jordan, kemudian dijelaskan oleh christofer dengan fungsi sebagai berikut :
  
<syntaxhighlight lang="modelica">
 
 
  // Gauss-Jordan Algorithm
 
  // Gauss-Jordan Algorithm
 
  // Transforms input matrix A into reduced row echelon form matrix B
 
  // Transforms input matrix A into reduced row echelon form matrix B
Line 94: Line 101:
 
  output Real [:,:] B;    // Output matrix in reduced row echelon form
 
  output Real [:,:] B;    // Output matrix in reduced row echelon form
 
  // Local variables
 
  // Local variables
 
 
  protected
 
  protected
 
  Integer h = 1;          // Initialize pivot row
 
  Integer h = 1;          // Initialize pivot row
Line 102: Line 108:
 
  Integer c = 0;          // Index counter
 
  Integer c = 0;          // Index counter
 
  Integer max_row;        // Row index of max number in pivot column
 
  Integer max_row;        // Row index of max number in pivot column
 
 
  Real [:] pivot_column;  // Vector containing pivot column data
 
  Real [:] pivot_column;  // Vector containing pivot column data
 
  Real [:] pivot_row;    // Vector containing backwards pivot row data
 
  Real [:] pivot_row;    // Vector containing backwards pivot row data
 
  Real [:,:] temp_array;  // Stores matrix data when switching rows
 
  Real [:,:] temp_array;  // Stores matrix data when switching rows
 
  Real r;                // Ratio value used for row operations
 
  Real r;                // Ratio value used for row operations
 
 
  // Limit to handle floating point errors
 
  // Limit to handle floating point errors
 
  Real float_error = 10e-10;
 
  Real float_error = 10e-10;
 
 
  algorithm
 
  algorithm
 
 
  // Transfer input matrix A into variable B
 
  // Transfer input matrix A into variable B
 
  B := A;
 
  B := A;
 
 
  while h <= m and k <= n loop
 
  while h <= m and k <= n loop
 
 
 
  // Dealing with floating point errors
 
  // Dealing with floating point errors
 
  for i in 1:m loop
 
  for i in 1:m loop
Line 126: Line 126:
 
     end for;
 
     end for;
 
   end for;
 
   end for;
 
 
   // Finding the pivot
 
   // Finding the pivot
 
     pivot_column := {B[i,h] for i in h:m};
 
     pivot_column := {B[i,h] for i in h:m};
 
 
 
     // Get position index of lowest row with greatest pivot number
 
     // Get position index of lowest row with greatest pivot number
 
     c:= h-1;
 
     c:= h-1;
Line 138: Line 136:
 
       end if;
 
       end if;
 
     end for;
 
     end for;
 
 
 
   // No pivot in this column, move on to next column
 
   // No pivot in this column, move on to next column
 
   if B[max_row, k] == 0 then
 
   if B[max_row, k] == 0 then
 
     k := k+1;
 
     k := k+1;
 
+
  else
  else
 
 
     // Swap Rows h <-> max_row
 
     // Swap Rows h <-> max_row
 
     temp_array := B;
 
     temp_array := B;
Line 149: Line 145:
 
     temp_array[max_row] := B[h];
 
     temp_array[max_row] := B[h];
 
     B:= temp_array;
 
     B:= temp_array;
   
 
 
     // Divide pivot row by pivot number
 
     // Divide pivot row by pivot number
 
     B[h] := B[h]/B[h,k];
 
     B[h] := B[h]/B[h,k];
   
 
 
     // For all rows below the pivot
 
     // For all rows below the pivot
 
     for i in (h+1):m loop
 
     for i in (h+1):m loop
     
 
 
       // Store the ratio of the row to the pivot
 
       // Store the ratio of the row to the pivot
 
       r := B[i,k] / B[h,k];
 
       r := B[i,k] / B[h,k];
     
 
 
       // Set lower part of pivot column to zero
 
       // Set lower part of pivot column to zero
 
       B[i,k] := 0;
 
       B[i,k] := 0;
     
 
 
       // Operations on the remaining row elements
 
       // Operations on the remaining row elements
 
       for j in (k+1):n loop
 
       for j in (k+1):n loop
 
           B[i,j] := B[i,j] - B[h,j] * r;
 
           B[i,j] := B[i,j] - B[h,j] * r;
 
       end for;
 
       end for;
     
+
    end for;
    end for;
 
   
 
 
     // Move on to next pivot row and column
 
     // Move on to next pivot row and column
 
     h := h+1;
 
     h := h+1;
 
     k := k+1;
 
     k := k+1;
   
 
 
   end if;
 
   end if;
 
 
 
  end while;
 
  end while;
 
 
  // The matrix is now in row echelon form
 
  // The matrix is now in row echelon form
 
 
  // Set values of (h,k) to (m,n)
 
  // Set values of (h,k) to (m,n)
 
  h := m;
 
  h := m;
 
  k := n;
 
  k := n;
 
 
  while h >= 1 and k >=1 loop
 
  while h >= 1 and k >=1 loop
 
 
   // Dealing with floating point errors
 
   // Dealing with floating point errors
 
   for i in 1:m loop
 
   for i in 1:m loop
Line 193: Line 176:
 
     end for;
 
     end for;
 
   end for;
 
   end for;
 
 
   // Finding the pivot
 
   // Finding the pivot
 
     pivot_row := {B[h,i] for i in 1:k};
 
     pivot_row := {B[h,i] for i in 1:k};
   
 
 
     // Get position index k of pivot
 
     // Get position index k of pivot
 
     c := 0;
 
     c := 0;
Line 206: Line 187:
 
     end for;
 
     end for;
 
     k := c;
 
     k := c;
 
 
   // No pivot in this row, move on to next row
 
   // No pivot in this row, move on to next row
 
   if B[h, k] == 0 then
 
   if B[h, k] == 0 then
 
     h := h-1;
 
     h := h-1;
   
 
 
   else
 
   else
   
 
 
     // Perform row operations
 
     // Perform row operations
 
     for i in 1:(h-1) loop
 
     for i in 1:(h-1) loop
Line 218: Line 196:
 
       B[i] := B[i] - B[h] * r;
 
       B[i] := B[i] - B[h] * r;
 
     end for;
 
     end for;
   
 
 
     // Move on to next pivot row and column
 
     // Move on to next pivot row and column
 
     h := h-1;
 
     h := h-1;
 
     k := k-1;
 
     k := k-1;
   
+
  end if;
  end if;
 
 
 
 
  end while;
 
  end while;
 
 
  // The matrix is now in reduced row echelon form
 
  // The matrix is now in reduced row echelon form
 
 
  end GaussJordan;
 
  end GaussJordan;
 
</syntaxhighlight>
 
 
=== Pertemuan Ketiga (Rabu, 25 November 2020) ===
 

Revision as of 14:33, 2 December 2020

Biodata

Nama : Muhammad Faja Taufiqurrahman

NPM : 1906301223

Angkatan : 2019

Program Studi : Teknik Mesin, S1 Reguler

Tempat, Tanggal lahir : Jakarta, 09 Juni 2001

Domisili : Jakarta Selatan

Alamat Surel : muhammadfaja87@gmail.com / muhammad.faja@ui.ac.id


Metode Numerik

Metode numerik merupapakan teknik dalam penyelesaian permsalahan yang diformulasikan secara matematis dengan menggunakan operasi hitungan (aritmatik) yaitu operasi tambah, kurang, kali, dan bagi. Metode ini digunakan karena banyak permasalahan matematis tidak dapat diselesaikan menggunakan metode analitik.

Pada kelas Metode Numerik-02 semester gasal 2020/2021, perkuliahan pekan pertama sampai UTS diisi oleh Bapak Dr. Ir. Engkos A. Kosasih, M.T. telah membahas beberapa topik, antara lain:

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

Setelah UTS proses pembelajaran diisi oleh Bapak Dr. Ir. Ahmad Indra Siswantara

Pertemuan Perkuliahan

Pertemuan Pertama (Rabu, 11 November 2020)

Pada pertemuan pertama setelah UTS ini, Bapak Dr. Ir. Ahmad Indra Siswantara mengenalkan mengenai situs Wiki AIR. Dalam Wiki AIR tersebut, kami dijelaskan mengenai cara pembuatan akun dan membuat page sendiri. Dalam page tersebut lah nantinya akan digunakan sebagai review pembelajaran serta tempat pengumpulan tugas. Selain itu juga dijelaskan terkait esensi atau tujuan pembelajaran metode numerik, yaitu:

1. Memahami konsep-konsep dan prinsip-prinsip dasar dalam metode numerik seperti : Persamaan algoritma, aljabar, pencocokan kurva, persamaan diferensial parsial, dll.

2. Mengerti dan mampu menerapkan pemahaman atau aplikasi terhadap konsep metode numerik.

3. Mampu menerapkan metode numerik dalam hal terkait persoalan keteknikan.

4. Mendapat nilai tambah/adab sehingga kita menjadi orang yang lebih beradab.

Selain empat poin tersebut, kami juga mendapat pelajaran terkait awalan memakai OpenModelica. Dimana kami diperlihatkan praktek sederhana penggunaan OpenModelica ini. Hingga kami tahu bila komputer selain dapat membantu dalam menyelesaikan permasalahan namun juga memiliki batasan atau limit tertentu dan kita sebagai manusia lah yang dapat mengoperasikannya.

Tugas Minggu Pertama

  • Mempelajari aplikasi OpenModelica melalui video Youtube serta menyertakan link hasil pembelajaran.

Saya mempelajari bagaimana mengoperasikan OpenModelica melalui video berikut :

Saya mencoba untuk membuat interpolasi menggunakan OpenModelica

Interpolasi Faja.png

Video hasil pembelajaran yang telah saya buat :

Pertemuan Kedua (Rabu, 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, jangan sampai hari ini lebih buruk 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 bahasa 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 untuk membuat 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" FungsitambahX1 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 Kedua

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 persoalan sistem persamaan linear 4 variabel untuk menentukan nilai X1, X2, X3, dan X4 menggunakan variabel array.

SPL4V Faja.png

Dengan menggunakan OpenModelica dan metode Gauss, didapatkan hasil X1, X2, X3, dan X4 yang sebagai berikut:

HasilSPL4V Faja.png

Video penyelesaian SPL4V menggunakan OpenModelica yang telah saya buat :

Pertemuan Ketiga (Rabu, 25 November 2020)

Pada pertemuan ketiga, Pak Dai menjelaskan mengenai tiga aplikasi metode numerik yang sering digunakan dalam menyelesaikan permasalahan teknik

  • 1. Computation Fluid Dynamics (CFD)
  • 2. Finite Element Analysis
  • 3. Metode Stokastik.

Dalam menyelesaikan masalah teknik, langkah 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.

Pak Dai kemudian menugaskan untuk membuat fungsi mengenai gauss jordan, kemudian dijelaskan oleh christofer dengan fungsi sebagai berikut :

// Gauss-Jordan Algorithm
// Transforms input matrix A into reduced row echelon form matrix B
// Christopher S.E. November 2020
input Real [:,:] A;     // An augmented matrix of m*n
output Real [:,:] B;    // Output matrix in reduced row echelon form
// Local variables
protected
Integer h = 1;          // Initialize pivot row
Integer k = 1;          // Initialize pivot column
Integer m = size(A,1);  // Number of rows in matrix
Integer n = size(A,2);  // Number of columns in matrix
Integer c = 0;          // Index counter
Integer max_row;        // Row index of max number in pivot column
Real [:] pivot_column;  // Vector containing pivot column data
Real [:] pivot_row;     // Vector containing backwards pivot row data
Real [:,:] temp_array;  // Stores matrix data when switching rows
Real r;                 // Ratio value used for row operations
// Limit to handle floating point errors
Real float_error = 10e-10;
algorithm
// Transfer input matrix A into variable B
B := A;
while h <= m and k <= n loop
// Dealing with floating point errors
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 the pivot
   pivot_column := {B[i,h] for i in h:m};
   // Get position index of lowest row with greatest pivot number
   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;
 // No pivot in this column, move on to next column
 if B[max_row, k] == 0 then
   k := k+1;
  else
   // Swap Rows h <-> max_row
   temp_array := B;
   temp_array[h] := B[max_row];
   temp_array[max_row] := B[h];
   B:= temp_array;
   // Divide pivot row by pivot number
   B[h] := B[h]/B[h,k];
   // For all rows below the pivot
   for i in (h+1):m loop
     // Store the ratio of the row to the pivot
     r := B[i,k] / B[h,k];
     // Set lower part of pivot column to zero
     B[i,k] := 0;
     // Operations on the remaining row elements
     for j in (k+1):n loop
         B[i,j] := B[i,j] - B[h,j] * r;
     end for;
    end for;
   // Move on to next pivot row and column
   h := h+1;
   k := k+1;
 end if;
end while;
// The matrix is now in row echelon form
// Set values of (h,k) to (m,n)
h := m;
k := n;
while h >= 1 and k >=1 loop
 // Dealing with floating point errors
 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 the 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 on to next row
 if B[h, k] == 0 then
   h := h-1;
 else
   // Perform row operations
   for i in 1:(h-1) loop
     r := B[i,k];
     B[i] := B[i] - B[h] * r;
   end for;
   // Move on to next pivot row and column
   h := h-1;
   k := k-1;
  end if;
end while;
// The matrix is now in reduced row echelon form
end GaussJordan;