Difference between revisions of "Metnum 03 - Muhammad Fairuz Daffa"

From ccitonlinewiki
Jump to: navigation, search
(Materi Sebelum UTS)
(Jawaban UAS Metode Numerik)
 
(54 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[File:20200331 210947.jpg|300px|thumb|right]]
 
[[File:20200331 210947.jpg|300px|thumb|right]]
 
+
__TOC__
 
== Biodata ==
 
== Biodata ==
  
Line 34: Line 34:
 
Untuk mencari akar - akar persamaan dapat digunakan 2 cara cara yaitu:
 
Untuk mencari akar - akar persamaan dapat digunakan 2 cara cara yaitu:
  
1. Close method (Bracketing) : erdiri dari graphical method, false position dan bisection
+
1. Close method (Bracketing) : Terdiri dari graphical method, false position dan bisection
  
 
2. Open method : Terdiri dari newton raphson, secant, dan simple fix point
 
2. Open method : Terdiri dari newton raphson, secant, dan simple fix point
  
'''Interppolasi dan Regresi'''
+
'''3. Interpolasi dan Regresi'''
 +
 
 +
'''Interpolasi''' adalah metode menghasilkan titik-titik data baru dalam suatu jangkauan dari suatu set diskret data-data yang diketahui.
 +
 
 +
'''Regresi''' adalah salah satu metode untuk menentukan hubungan sebab-akibat antara variabel dengan variabel lainnya.
 +
 
 +
 
 +
== Pertemuan tanggal 9 November 2020 ==
 +
 
 +
Pada oertemuan ini Pak Dai menginstruksikan mahasiswa untuk mendownload software open modelica untuk pengaplikasian dari mata kuliah metode numerik, dan juga meminta kita untuk mempelajari software open modelica melalui video tutorial dari youtube, dan membuat video youtube berisikan kami mempelajari atau mengaplikasikan ilmu dari video tutorial yang sudah kita tonton.
 +
 
 +
Saya mempelajari software openmodelica dari tautan dibawah ini
 +
  https://youtu.be/Dw66ODbMS2A
 +
 
 +
 
 +
== Pertemuan Kedua, Tanggal 16 November 2020 ==
 +
Pada pertemuan ini, pak DAI mengevaluasi tugas kita satu per satu. Lalu sambil menunggu satu per satu di interview, pak DAI memberikan arahan untuk membuat program sederhana di software openmodelica.
 +
 
 +
Pertama pak DAI mengajarkan untuk membuat program untuk meenghitung penambahan sepuluh terhadap suatu angka (x+10).
 +
 
 +
 
 +
Kedua pak DAI menginstruksikan untuk membuat program yang bertujuan untuk menghitung nilai rata - rata dari beberapa kumpulan data. Berikut adalah simulasi yang saya coba
 +
[[File:Openmodelica_meandaffa.JPG|400px|thumb|center]]
 +
 
 +
== Tugas Pertemuan 2 ==
 +
 
 +
Pada tugas ini pak DAI menginstruksikan untuk membuat program yang bisa mensolve permasalahan aljabar simultan. Pada tugas ini saya membuat program untuk menyelesaikan persamaan matriks dengan metode gauss jordan.
 +
 
 +
1. Soal yang saya gunakan adalah sebagai berikut.
 +
[[File:Soalgaussjordandaffa.JPG|400px|thumb|center]]
 +
 
 +
2. Saya menggunakan fitur function dan class untuk menyelesaikan persamaan gauss jordan diatas.
 +
 
 +
3. Pada function saya menggunakan formula sebagai berikut:
 +
[[File:Functiongaussjordandaffa.JPG|400px|thumb|center]]
 +
 
 +
4. Untuk class saya menggunakan formula sebagai berikut:
 +
[[File:Classgaussjordandaffa.JPG|400px|thumb|center]]
 +
 
 +
5.Setelah itu saya lakukan pengecekan terhadap formula tersebut, didapat hasil sebagai berikut
 +
[[File:Checkgaussjordandaffa.JPG|400px|thumb|center]]
 +
 
 +
6. Lalu setelah pengecekan berhasil, saya melakukan simulasi, lalu didapat hasil sebagai berikut
 +
[[File:Hasilgaussjordandaffa.JPG|400px|thumb|center]]
 +
 
 +
7. Hasil yang didapat adalah x1 = 1; x2 = 4; x3 = -2
 +
 
 +
 
 +
== Pertemuan 3: Senin, 23 November 2020 ==
 +
 
 +
Pada pertemuan ini kita disuruh mensolve soal dari buku sebagai berikut:
 +
[[File:Soalspringmass.JPG|500px|thumb|center]]
 +
 
 +
'''Tugas 3'''
 +
----
 +
Pada tugas ini kita disuruh mensolve soal dibuku sebagai berikut:
 +
[[File:Soaltrusses.JPG|500px|thumb|center]]
 +
Pada tugas ini kami diminta untuk menghitung defleksi pada setiap batang dan gaya reaksinya.
 +
 
 +
Pertama saya mencari deltaL atau displacement dari setiap batang menggunakan open modelica. Dengan coding sebagai berikut:
 +
[[File:DeltaL1.JPG|1000px|thumb|center]]
 +
[[File:DeltaL2.JPG|1000px|thumb|center]]
 +
[[File:DeltaL3.JPG|1000px|thumb|center]]
 +
 
 +
Lalu didapat hasil sebagai berikut:
 +
[[File:Hasil displacerment.JPG|1000px|thumb|left]]
 +
[[File:Hasil displacerment1.JPG|1000px|thumb|center]]
 +
[[File:Hasil displacerment2.JPG|1000px|thumb|center]]
 +
 
 +
Kedua saya mencari nilai U dengan rumus RG x U = F, jika di translate ke coding maka akan menjadi
 +
[[File:NilaiU.jpg|1000px|thumb|center]]
 +
 
 +
Lalu didapat hasil sebagai berikut
 +
[[File:NilaiUhasil.JPG|1000px|thumb|center]]
 +
 
 +
Ketiga saya mencari R menggunakan openmodelica dengan rumus R = (K x U) - F, jika di translate ke coding maka akan menjadi sebagai berikut:
 +
[[File:Reactionforce.JPG|1000px|thumb|center]]
 +
 
 +
Lalu hasil yang saya dapat adalah sebagai berikut:
 +
[[File:Hasilreactionforce.JPG|1000px|thumb|center]]
 +
 
 +
 
 +
== Pertemuan 4: Senin, 30 November 2020 ==
 +
 
 +
Pada pertemuan ini pak DAI menjelaskan perbedaan antara statika struktur dan dinamika struktur.
 +
 
 +
 
 +
== QUIZ ==
 +
[[File:Soalquiz1.jpg|500px|thumb|center]]
 +
[[File:Soalquiz2.jpg|500px|thumb|center]]
 +
 
 +
Berikut adalah flowchart saya dalam mengerjakan soal
 +
[[File:516830.jpg|500px|thumb|center]]
 +
 
 +
 
 +
Nomor 1
 +
----
 +
 
 +
{| class=wikitable
 +
| style="vertical-align:top"|'''Class'''
 +
<syntaxhighlight lang="modelica">
 +
 
 +
class no1Quiz
 +
// DECLARATIONS
 +
// Data for each member: [element #, node i, node j, theta, area, modulus, length]
 +
// SI Units: [integer, integer, integer, degrees, meters^2, pascals, meters]
 +
// Imperial Units: [integer, integer, integer, degrees, inches^2, lb/inches, inches]
 +
parameter Real [:,7] member = [1, 1, 2,  0, 8, 1.9e6, 36;
 +
                              2, 2, 3, 135, 8, 1.9e6, 50.9;
 +
                              3, 3, 4,  0, 8, 1.9e6, 36;
 +
                              4, 2, 4,  90, 8, 1.9e6, 36;
 +
                              5, 2, 5,  45, 8, 1.9e6, 50.9;
 +
                              6, 4, 5,  0, 8, 1.9e6, 36];
 +
 
 +
// External loads for each node: [node #, FX, FY]
 +
parameter Real [:,3] node_load = [1, 0, 0;
 +
                                  2, 0, 0;
 +
                                  3, 0, 0;
 +
                                  4, 0, -500;
 +
                                  5, 0, -500];
 +
 
 +
// Vector for equivalent stiffness constant of each member
 +
Real [size(member,1)] k;
 +
 
 +
// Array for Stiffness Matrix
 +
Real [size(member,1),4,4] Ke;
 +
 
 +
equation
 +
// Calculate stiffness constants for each member element
 +
k = {(member[i,5] * member[i,6] / member[i,7]) for i in 1:size(member,1)};
 +
 
 +
// Find stiffness matrix for each element
 +
Ke = stiffnesselement(member);
 +
 
 +
end no1Quiz;
 +
</syntaxhighlight>
 +
|}
 +
 
 +
 
 +
{| class=wikitable
 +
| style="vertical-align:top"|'''Matriks Elemen'''
 +
<syntaxhighlight lang="modelica">
 +
 
 +
function stiffnesselement
 +
input Real [:,7] beam_mat;
 +
output Real [size(beam_mat,1),4,4] Ke_mat;
 +
 
 +
protected
 +
Real theta;
 +
Real [3] StiffTrig;
 +
Real [4,4] StiffTransformation;
 +
Real [size(beam_mat,1)] k_vec;
 +
Real float_error = 10e-10;
 +
 
 +
algorithm
 +
 
 +
k_vec := {(beam_mat[i,5] * beam_mat[i,6] / beam_mat[i,7]) for i in 1:size(beam_mat,1)};
 +
 
 +
// Finding stiffness matrix of each element member
 +
for i in 1:size(beam_mat,1) loop
 +
 
 +
  // Clearing the matrices
 +
  StiffTrig := zeros(3);
 +
  StiffTransformation := zeros(4,4);
 +
 
 +
  // Converting degrees to radians
 +
  theta := Modelica.SIunits.Conversions.from_deg(beam_mat[i,4]);
 +
 
 +
  // {cos^2, sin^2, sincos}
 +
  StiffTrig := {(Modelica.Math.cos(theta))^2,
 +
                (Modelica.Math.sin(theta))^2,
 +
                (Modelica.Math.sin(theta)*Modelica.Math.cos(theta))};
 +
 
 +
  // Handle float error elements in StiffTrig
 +
  for t in 1:size(StiffTrig,1) loop
 +
    if abs(StiffTrig[t]) <= float_error then
 +
      StiffTrig[t] := 0;
 +
    end if;
 +
  end for;
 +
 
 +
  // Construct stiffness transformation matrix
 +
  StiffTransformation := [  StiffTrig[1],    StiffTrig[3], -1*StiffTrig[1], -1*StiffTrig[3];
 +
                  StiffTrig[3],    StiffTrig[2], -1*StiffTrig[3], -1*StiffTrig[2];
 +
                -1*StiffTrig[1], -1*StiffTrig[3],    StiffTrig[1],    StiffTrig[3];
 +
                -1*StiffTrig[3], -1*StiffTrig[2],    StiffTrig[3],    StiffTrig[2]];
 +
 
 +
  // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat
 +
  for m in 1:4 loop
 +
    for n in 1:4 loop
 +
      Ke_mat[i,m,n] := k_vec[i] * StiffTransformation[m,n];
 +
    end for;
 +
  end for;
 +
 
 +
end for;
 +
end stiffnesselement;
 +
</syntaxhighlight>
 +
|}
 +
 
 +
== Pertemuan 5: Senin, 7 Desember 2020 ==
 +
 
 +
Pada pertemuan ini, pak DAI membahas tentang soal quiz yang telah diberikan. Teman saya, Ahmad Mohammad Fahmi menjelaskan tentang coding yang dia buat dari awal sampai akhir. Namun, coding dari Fahmi masih ada yang kurang, karena total gaya pada ketiga sumbu untuk soal nomor 8 masih belum sama dengan 0.
 +
 
 +
Pak DAI menginstruksikan kita untuk bertanya kepada fahmi terkait hal yang belum dimengerti. Lalu pak DAI memberikan soal lagi dan menginstruksikan untuk memakai coding dari fahmi untuk mengerjakan soal tersebut. Lalu kami semua mencoba mengerjakan. Lalu pak DAI menginstruksikan untuk memberikan feedback terhadap codingan yang dibuat fahmi, dan memperbaikinya jika bisa.
 +
 
 +
 
 +
== Pertemuan 6: Senin, 14 Desember 2020 ==
 +
Pada pertemuan ini pak DAI menginstruksikan untuk muhasabah dan menilai diri sendiri melalui grup WA dan nantinya akan di verifikasi oleh beliau melalui zoom.
 +
 
 +
 
 +
== Pertemuan 7: Senin, 21 Desember 2020 ==
 +
Pada pertemuan ini pak DAI menginstruksikan untuk mengerjakan tugas besar dan mulai menjelaskan tentang tugas besarnya dan memberi arahan tentang apa yang harus dilakukan. Lalu setelah itu asisten dari pak DAI yaitu bu Candra menjelaskan tentang optimasi metode golden section yang nantinya akan digunakan juga untuk pengerjaan tugas besar.
 +
 
 +
 
 +
== Tugas Besar ==
 +
[[File:Tugas Besar Metnum Geometri Jos.jpg|900px|thumb|center]]
 +
Asumsi yang digunakan untuk melakukan perhitungan ini antara lain:
 +
 
 +
Variasi Stiffness terikat dengan variabel area. Memvariasikan Elastisitas tergolong sulit karena setiap material memiliki range yang tidak teratur dan dalam satu material yang sejenis (struktur biaya tetap) tidak terjadi perubahan nilai elastisitas yang berbanding lurus dengan perubahan biaya.
 +
 
 +
Beban akan terdistribusi hanya pada node (karena bersifat trusses).
 +
 
 +
Safety factor minimal bernilai 2.
 +
 
 +
Batas displacement 0,001 m sebelum buckling (pada truss paling atas).
 +
 
 +
 
 +
'''Metodologi'''
 +
----
 +
Untuk jenis material yang sama:
 +
 
 +
1. Mencari harga untuk 4 ukuran batang dengan material yang sama yaitu SAE316L.
 +
 
 +
2. Menghitung nilai safety factor pada 4 ukuran batang dengan coding dari software openmodelica
 +
 
 +
3. Mencari rasio antara safety factor dengan harga total.
 +
 
 +
4. Membuat persamaan antara rasio dengan area menggunakan metode curve fitting.
 +
 
 +
5. Melakukan optimasi menggunakan metode golden section.
 +
 
 +
 
 +
Untuk area penampang yang sama:
 +
 
 +
1. Mencari harga untuk 4 jenis material dengan area penampang yang sama yaitu 171 mm^2.
 +
 
 +
2. Mengitung nilai safety factor pada 4 jenis batang dengan coding dari software openmodelica
 +
 
 +
3. Mencari rasio antara safety factor dengan harga total.
 +
 
 +
4. Membuat persamaan antara rasio dengan jenis material menggunakan metode curve fitting.
 +
 
 +
5. Melakukan optimasi menggunakan metode golden section.
 +
 
 +
 
 +
'''Data yang Digunakan'''
 +
----
 +
[[File:Dataygdigunakan.JPG|750px|thumb|center|]]
 +
 
 +
Referensi data:
 +
 
 +
https://www.tokopedia.com/kingsteelid
 +
 
 +
https://wijayamakmur.com/siku/
 +
 
 +
https://www.azom.com/
 +
 
 +
 
 +
Codingan
 +
----
 +
 
 +
{| class=wikitable
 +
| style="vertical-align:top"|'''Mencari Safety Factors'''
 +
<syntaxhighlight lang="modelica">
 +
model Trusses_3D_Tugas_Besar_Safety 
 +
 
 +
//define initial variable
 +
parameter Integer Points=size(P,1); //Number of Points
 +
parameter Integer Trusses=size(C,1); //Number of Trusses
 +
parameter Real Yield=1.7e9; //Yield Strength (Pa)
 +
parameter Real Area=0.0011;  //Area L Profile (m2)
 +
parameter Real Elas=1.93e11;    //Elasticity SAE 316L  (Pa)
 +
 
 +
//define connection
 +
parameter Integer C[:,2]=[1,5;
 +
                                2,6;
 +
                                3,7;
 +
                                4,8;
 +
                                5,6;  //1st floor
 +
                                6,7;  //1st floor
 +
                                7,8;  //1st floor
 +
                                5,8;  //1st floor
 +
                                5,9;
 +
                                6,10;
 +
                                7,11;
 +
                                8,12;
 +
                                9,10; //2nd floor
 +
                                10,11;//2nd floor
 +
                                11,12;//2nd floor
 +
                                9,12; //2nd floor
 +
                                9,13;
 +
                                10,14;
 +
                                11,15;
 +
                                12,16;
 +
                                13,14;//3rd floor
 +
                                14,15;//3rd floor
 +
                                15,16;//3rd floor
 +
                                13,16];//3rd floor
 +
                                                             
 +
//define coordinates (please put orderly)
 +
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1;    // node1
 +
                            -0.3,-0.375,0,1,1,1;    //node2
 +
                            -0.3,0.375,0,1,1,1;    //node3
 +
                            0.3,0.375,0,1,1,1;      //node4
 +
                           
 +
                            0.3,-0.375,0.6,0,0,0;  //node5
 +
                            -0.3,-0.375,0.6,0,0,0;  //node6
 +
                            -0.3,0.375,0.6,0,0,0;  //node7
 +
                            0.3,0.375,0.6,0,0,0;    //node8
 +
                           
 +
                            0.3,-0.375,1.2,0,0,0;  //node9
 +
                            -0.3,-0.375,1.2,0,0,0;  //node10 
 +
                            -0.3,0.375,1.2,0,0,0;  //node11
 +
                            0.3,0.375,1.2,0,0,0;    //node12
 +
                           
 +
                            0.3,-0.375,1.8,0,0,0;  //node13
 +
                            -0.3,-0.375,1.8,0,0,0;  //node14
 +
                            -0.3,0.375,1.8,0,0,0;  //node15
 +
                            0.3,0.375,1.8,0,0,0];  //node16
 +
                           
 +
//define external force (please put orderly)
 +
parameter Real F[Points*3]={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,
 +
                            0,0,-500,
 +
                            0,0,-1000,
 +
                            0,0,-1000,
 +
                            0,0,-500};
 +
 
 +
//solution
 +
Real displacement[N], reaction[N];
 +
Real check[3];
 +
 
 +
Real stress1[Trusses];
 +
Real safety[Trusses];
 +
Real dis[3];
 +
Real Str[3];
 +
 
 +
protected
 +
parameter Integer N=3*Points;
 +
Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3];
 +
Real err=10e-10, ers=10e-4;
 +
 
 +
algorithm
 +
//Local Stiffness Matrix
 +
G:=id;
 +
for i in 1:Trusses loop
 +
for j in 1:3 loop
 +
  q1[j]:=P[C[i,1],j];
 +
  q2[j]:=P[C[i,2],j];
 +
end for;
 +
     
 +
    //Solving Matrix
 +
    L:=Modelica.Math.Vectors.length(q2-q1);
 +
    cx:=(q2[1]-q1[1])/L;
 +
    cy:=(q2[2]-q1[2])/L;
 +
    cz:=(q2[3]-q1[3])/L;
 +
    X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;
 +
                      cy*cx,cy^2,cy*cz;
 +
                      cz*cx,cz*cy,cz^2];
 +
 +
    //Transforming to global matrix
 +
    g:=zeros(N,N);
 +
    for m,n in 1:3 loop
 +
      g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];
 +
      g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];
 +
      g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];
 +
      g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];
 +
    end for; 
 +
 +
G_star:=G+g;
 +
G:=G_star;
 +
end for;
 +
 +
//Implementing boundary
 +
for x in 1:Points loop
 +
  if P[x,4] <> 0 then
 +
    for a in 1:Points*3 loop
 +
      G[(x*3)-2,a]:=0;
 +
      G[(x*3)-2,(x*3)-2]:=1;
 +
    end for;
 +
  end if;
 +
  if P[x,5] <> 0 then
 +
    for a in 1:Points*3 loop
 +
      G[(x*3)-1,a]:=0;
 +
      G[(x*3)-1,(x*3)-1]:=1;
 +
    end for;
 +
  end if;
 +
  if P[x,6] <> 0 then
 +
    for a in 1:Points*3 loop
 +
      G[x*3,a]:=0;
 +
      G[x*3,x*3]:=1;
 +
    end for;
 +
  end if;
 +
end for;
 +
 
 +
//Solving displacement
 +
displacement:=Modelica.Math.Matrices.solve(G,F);
 +
 
 +
//Solving reaction
 +
reaction:=(G_star*displacement)-F;
 +
 
 +
//Eliminating float error
 +
for i in 1:N loop
 +
reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];
 +
displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];
 +
end for;
 +
 
 +
//Checking Force
 +
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});
 +
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});
 +
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});
 +
 
 +
for i in 1:3 loop
 +
  check[i] := if abs(check[i])<=ers then 0 else check[i];
 +
end for;
 +
 
 +
//Calculating stress in each truss
 +
for i in 1:Trusses loop
 +
for j in 1:3 loop
 +
  q1[j]:=P[C[i,1],j];
 +
  q2[j]:=P[C[i,2],j];
 +
  dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);
 +
end for;
 +
     
 +
    //Solving Matrix
 +
    L:=Modelica.Math.Vectors.length(q2-q1);
 +
    cx:=(q2[1]-q1[1])/L;
 +
    cy:=(q2[2]-q1[2])/L;
 +
    cz:=(q2[3]-q1[3])/L;
 +
    X:=(Elas/L)*[cx^2,cx*cy,cx*cz;
 +
                cy*cx,cy^2,cy*cz;
 +
                cz*cx,cz*cy,cz^2];
 +
   
 +
    Str:=(X*dis);
 +
    stress1[i]:=Modelica.Math.Vectors.length(Str);
 +
end for;
 +
 
 +
//Safety factor
 +
for i in 1:Trusses loop
 +
  if stress1[i]>0 then
 +
    safety[i]:=Yield/stress1[i];
 +
  else
 +
    safety[i]:=0;
 +
  end if;
 +
end for;
 +
 
 +
end Trusses_3D_Tugas_Besar_Safety;
 +
 
 +
</syntaxhighlight>
 +
|}
 +
 
 +
 
 +
{| class=wikitable
 +
| style="vertical-align:top"|'''Curve Fitting'''
 +
<syntaxhighlight lang="modelica">
 +
 
 +
function Curve_Fitting
 +
 
 +
input Real X[:];
 +
input Real Y[size(X,1)];
 +
input Integer order=2;
 +
output Real Coe[order+1];
 +
 
 +
protected
 +
Real Z[size(X,1),order+1];
 +
Real ZTr[order+1,size(X,1)];
 +
Real A[order+1,order+1];
 +
Real B[order+1];
 +
 
 +
algorithm
 +
 
 +
for i in 1:size(X,1) loop
 +
  for j in 1:(order+1) loop
 +
  Z[i,j]:=X[i]^(order+1-j);
 +
  end for;
 +
end for;
 +
ZTr:=transpose(Z);
 +
 
 +
A:=ZTr*Z;
 +
B:=ZTr*Y;
 +
Coe:=Modelica.Math.Matrices.solve(A,B);
 +
//Coe:=fill(2,size(Coe,1));
 +
 
 +
end Curve_Fitting;
 +
 
 +
</syntaxhighlight>
 +
|}
 +
 
 +
{| class=wikitable
 +
| style="vertical-align:top"|'''Golden Section'''
 +
<syntaxhighlight lang="modelica">
 +
model Opt_Gold
 +
 
 +
parameter Real xd[:];
 +
parameter Real yd[size(xd,1)];
 +
parameter Real xlo=87e-6;
 +
parameter Real xhi=504e-6;
 +
parameter Integer N=10; // maximum iteration
 +
parameter Real es=0.0001; // maximum error
 +
 
 +
Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3];
 +
Real xopt,  fx;
 +
protected
 +
Real d, xl, xu, xint, R=(5^(1/2)-1)/2;
 +
 
 +
algorithm
 +
xl := xlo;
 +
xu := xhi;
 +
y  := Curve_Fitting(xd,yd);
 +
 +
for i in 1:N loop
 +
d:= R*(xu-xl);
 +
x1[i]:=xl+d;
 +
x2[i]:=xu-d;
 +
f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3];
 +
f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3];
 +
xint:=xu-xl;
 +
 +
if f1[i]>f2[i] then
 +
  xl:=x2[i];
 +
  xopt:=x1[i];
 +
  fx:=f1[i];
 +
  else
 +
    xu:=x1[i];
 +
    xopt:=x2[i];
 +
    fx:=f2[i];
 +
end if;
 +
 +
ea[i]:=(1-R)*abs((xint)/xopt);
 +
if ea[i]<es then
 +
  break;
 +
end if;
 +
end for;
 +
 
 +
end Opt_Gold;
 +
 
 +
</syntaxhighlight>
 +
|}
 +
 
 +
 
 +
'''Hasil'''
 +
----
 +
Berikut adalah tabel lengkap dari data yang didapat dari internet:
 +
[[File:Hasildaffa.JPG|750px|thumb|center]]
 +
 
 +
Berikut adalah hasil yang saya dapat dari codingan diatas.
 +
[[File:Hasilarealocked1.JPG|900px|thumb|center]]
 +
 
 +
[[File:Hasilelasticitylocked.JPG|900px|thumb|center]]
 +
 
 +
 
 +
== Jawaban UAS Metode Numerik ==
 +
[[File:543719.jpg|900px|thumb|center|]]
 +
[[File:543720.jpg|900px|thumb|center|]]
 +
[[File:1234.JPG|900px|thumb|center|]]
 +
[[File:23456.JPG|900px|thumb|center|]]

Latest revision as of 22:45, 14 January 2021

20200331 210947.jpg

Biodata

Nama: Muhammad Fairuz Daffa

NPM: 1806181716

Kelas: Metnum 03


Materi Sebelum UTS

Sebelum UTS, kelas metnum 03 diajar oleh Pak Engkos, sebelum uts saya sendiri belajar mengenai:


1. Turunan Numerik

Turunan numerik terbagi 3 yaitu:

1. Turunan Maju (Forward)

Turunanmaju.JPG

2. Turunan Mundur (Backward)

Turunanmundur.JPG

3. Turunan Pusat (Centered)

Turunanpusat.JPG

Dari ketiga metode turunan ini, metode turunan pusat atau centered memiliki kemungkinan error yang paling kecil.

2. Pencarian Akar - Akar Persamaan

Untuk mencari akar - akar persamaan dapat digunakan 2 cara cara yaitu:

1. Close method (Bracketing) : Terdiri dari graphical method, false position dan bisection

2. Open method : Terdiri dari newton raphson, secant, dan simple fix point

3. Interpolasi dan Regresi

Interpolasi adalah metode menghasilkan titik-titik data baru dalam suatu jangkauan dari suatu set diskret data-data yang diketahui.

Regresi adalah salah satu metode untuk menentukan hubungan sebab-akibat antara variabel dengan variabel lainnya.


Pertemuan tanggal 9 November 2020

Pada oertemuan ini Pak Dai menginstruksikan mahasiswa untuk mendownload software open modelica untuk pengaplikasian dari mata kuliah metode numerik, dan juga meminta kita untuk mempelajari software open modelica melalui video tutorial dari youtube, dan membuat video youtube berisikan kami mempelajari atau mengaplikasikan ilmu dari video tutorial yang sudah kita tonton.

Saya mempelajari software openmodelica dari tautan dibawah ini

 https://youtu.be/Dw66ODbMS2A


Pertemuan Kedua, Tanggal 16 November 2020

Pada pertemuan ini, pak DAI mengevaluasi tugas kita satu per satu. Lalu sambil menunggu satu per satu di interview, pak DAI memberikan arahan untuk membuat program sederhana di software openmodelica.

Pertama pak DAI mengajarkan untuk membuat program untuk meenghitung penambahan sepuluh terhadap suatu angka (x+10).


Kedua pak DAI menginstruksikan untuk membuat program yang bertujuan untuk menghitung nilai rata - rata dari beberapa kumpulan data. Berikut adalah simulasi yang saya coba

Openmodelica meandaffa.JPG

Tugas Pertemuan 2

Pada tugas ini pak DAI menginstruksikan untuk membuat program yang bisa mensolve permasalahan aljabar simultan. Pada tugas ini saya membuat program untuk menyelesaikan persamaan matriks dengan metode gauss jordan.

1. Soal yang saya gunakan adalah sebagai berikut.

Soalgaussjordandaffa.JPG

2. Saya menggunakan fitur function dan class untuk menyelesaikan persamaan gauss jordan diatas.

3. Pada function saya menggunakan formula sebagai berikut:

Functiongaussjordandaffa.JPG

4. Untuk class saya menggunakan formula sebagai berikut:

Classgaussjordandaffa.JPG

5.Setelah itu saya lakukan pengecekan terhadap formula tersebut, didapat hasil sebagai berikut

Checkgaussjordandaffa.JPG

6. Lalu setelah pengecekan berhasil, saya melakukan simulasi, lalu didapat hasil sebagai berikut

Hasilgaussjordandaffa.JPG

7. Hasil yang didapat adalah x1 = 1; x2 = 4; x3 = -2


Pertemuan 3: Senin, 23 November 2020

Pada pertemuan ini kita disuruh mensolve soal dari buku sebagai berikut:

Soalspringmass.JPG

Tugas 3


Pada tugas ini kita disuruh mensolve soal dibuku sebagai berikut:

Soaltrusses.JPG

Pada tugas ini kami diminta untuk menghitung defleksi pada setiap batang dan gaya reaksinya.

Pertama saya mencari deltaL atau displacement dari setiap batang menggunakan open modelica. Dengan coding sebagai berikut:

DeltaL1.JPG
DeltaL2.JPG
DeltaL3.JPG

Lalu didapat hasil sebagai berikut:

Hasil displacerment.JPG
Hasil displacerment1.JPG
Hasil displacerment2.JPG

Kedua saya mencari nilai U dengan rumus RG x U = F, jika di translate ke coding maka akan menjadi

NilaiU.jpg

Lalu didapat hasil sebagai berikut

NilaiUhasil.JPG

Ketiga saya mencari R menggunakan openmodelica dengan rumus R = (K x U) - F, jika di translate ke coding maka akan menjadi sebagai berikut:

Reactionforce.JPG

Lalu hasil yang saya dapat adalah sebagai berikut:

Hasilreactionforce.JPG


Pertemuan 4: Senin, 30 November 2020

Pada pertemuan ini pak DAI menjelaskan perbedaan antara statika struktur dan dinamika struktur.


QUIZ

Soalquiz1.jpg
Soalquiz2.jpg

Berikut adalah flowchart saya dalam mengerjakan soal

516830.jpg


Nomor 1


Class
class no1Quiz
// DECLARATIONS
// Data for each member: [element #, node i, node j, theta, area, modulus, length]
// SI Units: [integer, integer, integer, degrees, meters^2, pascals, meters]
// Imperial Units: [integer, integer, integer, degrees, inches^2, lb/inches, inches]
parameter Real [:,7] member = [1, 1, 2,   0, 8, 1.9e6, 36;
                               2, 2, 3, 135, 8, 1.9e6, 50.9;
                               3, 3, 4,   0, 8, 1.9e6, 36;
                               4, 2, 4,  90, 8, 1.9e6, 36;
                               5, 2, 5,  45, 8, 1.9e6, 50.9;
                               6, 4, 5,   0, 8, 1.9e6, 36];

// External loads for each node: [node #, FX, FY]
parameter Real [:,3] node_load = [1, 0, 0;
                                  2, 0, 0;
                                  3, 0, 0;
                                  4, 0, -500;
                                  5, 0, -500];

// Vector for equivalent stiffness constant of each member
Real [size(member,1)] k;

// Array for Stiffness Matrix
Real [size(member,1),4,4] Ke;

equation
// Calculate stiffness constants for each member element
k = {(member[i,5] * member[i,6] / member[i,7]) for i in 1:size(member,1)};

// Find stiffness matrix for each element
Ke = stiffnesselement(member);

end no1Quiz;


Matriks Elemen
function stiffnesselement
input Real [:,7] beam_mat;
output Real [size(beam_mat,1),4,4] Ke_mat;

protected
Real theta;
Real [3] StiffTrig;
Real [4,4] StiffTransformation;
Real [size(beam_mat,1)] k_vec;
Real float_error = 10e-10;

algorithm

k_vec := {(beam_mat[i,5] * beam_mat[i,6] / beam_mat[i,7]) for i in 1:size(beam_mat,1)};

// Finding stiffness matrix of each element member
for i in 1:size(beam_mat,1) loop

  // Clearing the matrices
  StiffTrig := zeros(3);
  StiffTransformation := zeros(4,4);
  
  // Converting degrees to radians
  theta := Modelica.SIunits.Conversions.from_deg(beam_mat[i,4]);

  // {cos^2, sin^2, sincos}
  StiffTrig := {(Modelica.Math.cos(theta))^2,
                (Modelica.Math.sin(theta))^2,
                (Modelica.Math.sin(theta)*Modelica.Math.cos(theta))};
  
  // Handle float error elements in StiffTrig
  for t in 1:size(StiffTrig,1) loop
    if abs(StiffTrig[t]) <= float_error then
      StiffTrig[t] := 0;
    end if;
  end for;
  
  // Construct stiffness transformation matrix
  StiffTransformation := [  StiffTrig[1],    StiffTrig[3], -1*StiffTrig[1], -1*StiffTrig[3];
                   StiffTrig[3],    StiffTrig[2], -1*StiffTrig[3], -1*StiffTrig[2];
                -1*StiffTrig[1], -1*StiffTrig[3],    StiffTrig[1],    StiffTrig[3];
                -1*StiffTrig[3], -1*StiffTrig[2],    StiffTrig[3],    StiffTrig[2]];
  
  // Multiply in stiffness constant of element, add final stiffness matrix to Ke_mat
  for m in 1:4 loop
    for n in 1:4 loop
      Ke_mat[i,m,n] := k_vec[i] * StiffTransformation[m,n];
    end for;
  end for;

end for;
end stiffnesselement;

Pertemuan 5: Senin, 7 Desember 2020

Pada pertemuan ini, pak DAI membahas tentang soal quiz yang telah diberikan. Teman saya, Ahmad Mohammad Fahmi menjelaskan tentang coding yang dia buat dari awal sampai akhir. Namun, coding dari Fahmi masih ada yang kurang, karena total gaya pada ketiga sumbu untuk soal nomor 8 masih belum sama dengan 0.

Pak DAI menginstruksikan kita untuk bertanya kepada fahmi terkait hal yang belum dimengerti. Lalu pak DAI memberikan soal lagi dan menginstruksikan untuk memakai coding dari fahmi untuk mengerjakan soal tersebut. Lalu kami semua mencoba mengerjakan. Lalu pak DAI menginstruksikan untuk memberikan feedback terhadap codingan yang dibuat fahmi, dan memperbaikinya jika bisa.


Pertemuan 6: Senin, 14 Desember 2020

Pada pertemuan ini pak DAI menginstruksikan untuk muhasabah dan menilai diri sendiri melalui grup WA dan nantinya akan di verifikasi oleh beliau melalui zoom.


Pertemuan 7: Senin, 21 Desember 2020

Pada pertemuan ini pak DAI menginstruksikan untuk mengerjakan tugas besar dan mulai menjelaskan tentang tugas besarnya dan memberi arahan tentang apa yang harus dilakukan. Lalu setelah itu asisten dari pak DAI yaitu bu Candra menjelaskan tentang optimasi metode golden section yang nantinya akan digunakan juga untuk pengerjaan tugas besar.


Tugas Besar

Tugas Besar Metnum Geometri Jos.jpg

Asumsi yang digunakan untuk melakukan perhitungan ini antara lain:

Variasi Stiffness terikat dengan variabel area. Memvariasikan Elastisitas tergolong sulit karena setiap material memiliki range yang tidak teratur dan dalam satu material yang sejenis (struktur biaya tetap) tidak terjadi perubahan nilai elastisitas yang berbanding lurus dengan perubahan biaya.

Beban akan terdistribusi hanya pada node (karena bersifat trusses).

Safety factor minimal bernilai 2.

Batas displacement 0,001 m sebelum buckling (pada truss paling atas).


Metodologi


Untuk jenis material yang sama:

1. Mencari harga untuk 4 ukuran batang dengan material yang sama yaitu SAE316L.

2. Menghitung nilai safety factor pada 4 ukuran batang dengan coding dari software openmodelica

3. Mencari rasio antara safety factor dengan harga total.

4. Membuat persamaan antara rasio dengan area menggunakan metode curve fitting.

5. Melakukan optimasi menggunakan metode golden section.


Untuk area penampang yang sama:

1. Mencari harga untuk 4 jenis material dengan area penampang yang sama yaitu 171 mm^2.

2. Mengitung nilai safety factor pada 4 jenis batang dengan coding dari software openmodelica

3. Mencari rasio antara safety factor dengan harga total.

4. Membuat persamaan antara rasio dengan jenis material menggunakan metode curve fitting.

5. Melakukan optimasi menggunakan metode golden section.


Data yang Digunakan


Dataygdigunakan.JPG

Referensi data:

https://www.tokopedia.com/kingsteelid

https://wijayamakmur.com/siku/

https://www.azom.com/


Codingan


Mencari Safety Factors
model Trusses_3D_Tugas_Besar_Safety   

//define initial variable
parameter Integer Points=size(P,1); //Number of Points
parameter Integer Trusses=size(C,1); //Number of Trusses
parameter Real Yield=1.7e9; //Yield Strength (Pa)
parameter Real Area=0.0011;   //Area L Profile (m2)
parameter Real Elas=1.93e11;     //Elasticity SAE 316L  (Pa)

//define connection
parameter Integer C[:,2]=[1,5; 
                                2,6;
                                3,7;
                                4,8;
                                5,6;  //1st floor
                                6,7;  //1st floor
                                7,8;  //1st floor
                                5,8;  //1st floor
                                5,9;
                                6,10;
                                7,11;
                                8,12;
                                9,10; //2nd floor
                                10,11;//2nd floor 
                                11,12;//2nd floor
                                9,12; //2nd floor
                                9,13;
                                10,14;
                                11,15;
                                12,16;
                                13,14;//3rd floor
                                14,15;//3rd floor
                                15,16;//3rd floor
                                13,16];//3rd floor
                                                              
//define coordinates (please put orderly)
parameter Real P[:,6]=[0.3,-0.375,0,1,1,1;     // node1
                            -0.3,-0.375,0,1,1,1;    //node2
                            -0.3,0.375,0,1,1,1;     //node3
                            0.3,0.375,0,1,1,1;      //node4
                            
                            0.3,-0.375,0.6,0,0,0;   //node5
                            -0.3,-0.375,0.6,0,0,0;  //node6
                            -0.3,0.375,0.6,0,0,0;   //node7
                            0.3,0.375,0.6,0,0,0;    //node8
                            
                            0.3,-0.375,1.2,0,0,0;   //node9
                            -0.3,-0.375,1.2,0,0,0;  //node10  
                            -0.3,0.375,1.2,0,0,0;   //node11
                            0.3,0.375,1.2,0,0,0;    //node12
                            
                            0.3,-0.375,1.8,0,0,0;   //node13
                            -0.3,-0.375,1.8,0,0,0;  //node14
                            -0.3,0.375,1.8,0,0,0;   //node15
                            0.3,0.375,1.8,0,0,0];   //node16
                            
//define external force (please put orderly)
parameter Real F[Points*3]={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, 
                            0,0,-500, 
                            0,0,-1000, 
                            0,0,-1000, 
                            0,0,-500}; 

//solution
Real displacement[N], reaction[N];
Real check[3];

Real stress1[Trusses];
Real safety[Trusses];
Real dis[3];
Real Str[3];

protected
parameter Integer N=3*Points;
Real q1[3], q2[3], g[N,N], G[N,N], G_star[N,N], id[N,N]=identity(N), cx, cy, cz, L, X[3,3];
Real err=10e-10, ers=10e-4;

algorithm
//Local Stiffness Matrix
G:=id;
for i in 1:Trusses loop
 for j in 1:3 loop
   q1[j]:=P[C[i,1],j];
   q2[j]:=P[C[i,2],j];
 end for;
       
    //Solving Matrix
    L:=Modelica.Math.Vectors.length(q2-q1);
    cx:=(q2[1]-q1[1])/L;
    cy:=(q2[2]-q1[2])/L;
    cz:=(q2[3]-q1[3])/L; 
    X:=(Area*Elas/L)*[cx^2,cx*cy,cx*cz;
                      cy*cx,cy^2,cy*cz;
                      cz*cx,cz*cy,cz^2];
 
    //Transforming to global matrix
    g:=zeros(N,N); 
    for m,n in 1:3 loop
      g[3*(C[i,1]-1)+m,3*(C[i,1]-1)+n]:=X[m,n];
      g[3*(C[i,2]-1)+m,3*(C[i,2]-1)+n]:=X[m,n];
      g[3*(C[i,2]-1)+m,3*(C[i,1]-1)+n]:=-X[m,n];
      g[3*(C[i,1]-1)+m,3*(C[i,2]-1)+n]:=-X[m,n];
    end for;  
 
 G_star:=G+g;
 G:=G_star;
end for;
 
//Implementing boundary
for x in 1:Points loop
  if P[x,4] <> 0 then
    for a in 1:Points*3 loop
      G[(x*3)-2,a]:=0;
      G[(x*3)-2,(x*3)-2]:=1;
    end for;
  end if;
  if P[x,5] <> 0 then
    for a in 1:Points*3 loop
      G[(x*3)-1,a]:=0;
      G[(x*3)-1,(x*3)-1]:=1;
    end for;
  end if;
  if P[x,6] <> 0 then
    for a in 1:Points*3 loop
      G[x*3,a]:=0;
      G[x*3,x*3]:=1;
    end for;
  end if;
end for;

//Solving displacement
displacement:=Modelica.Math.Matrices.solve(G,F);

//Solving reaction
reaction:=(G_star*displacement)-F;

//Eliminating float error
for i in 1:N loop
 reaction[i]:=if abs(reaction[i])<=err then 0 else reaction[i];
 displacement[i]:=if abs(displacement[i])<=err then 0 else displacement[i];
end for;

//Checking Force
check[1]:=sum({reaction[i] for i in (1:3:(N-2))})+sum({F[i] for i in (1:3:(N-2))});
check[2]:=sum({reaction[i] for i in (2:3:(N-1))})+sum({F[i] for i in (2:3:(N-1))});
check[3]:=sum({reaction[i] for i in (3:3:N)})+sum({F[i] for i in (3:3:N)});
  
for i in 1:3 loop
  check[i] := if abs(check[i])<=ers then 0 else check[i];
end for;

//Calculating stress in each truss
for i in 1:Trusses loop
 for j in 1:3 loop
   q1[j]:=P[C[i,1],j];
   q2[j]:=P[C[i,2],j];
   dis[j]:=abs(displacement[3*(C[i,1]-1)+j]-displacement[3*(C[i,2]-1)+j]);
 end for;
       
    //Solving Matrix
    L:=Modelica.Math.Vectors.length(q2-q1);
    cx:=(q2[1]-q1[1])/L;
    cy:=(q2[2]-q1[2])/L;
    cz:=(q2[3]-q1[3])/L; 
    X:=(Elas/L)*[cx^2,cx*cy,cx*cz;
                 cy*cx,cy^2,cy*cz;
                 cz*cx,cz*cy,cz^2];
    
    Str:=(X*dis);
    stress1[i]:=Modelica.Math.Vectors.length(Str);
end for;

//Safety factor
for i in 1:Trusses loop
  if stress1[i]>0 then
    safety[i]:=Yield/stress1[i];
  else
    safety[i]:=0;
  end if; 
end for;

end Trusses_3D_Tugas_Besar_Safety;


Curve Fitting
function Curve_Fitting

input Real X[:];
input Real Y[size(X,1)];
input Integer order=2;
output Real Coe[order+1];

protected
Real Z[size(X,1),order+1];
Real ZTr[order+1,size(X,1)];
Real A[order+1,order+1];
Real B[order+1];

algorithm

for i in 1:size(X,1) loop
  for j in 1:(order+1) loop
  Z[i,j]:=X[i]^(order+1-j);
  end for;
end for;
ZTr:=transpose(Z);

A:=ZTr*Z;
B:=ZTr*Y;
Coe:=Modelica.Math.Matrices.solve(A,B);
//Coe:=fill(2,size(Coe,1));

end Curve_Fitting;
Golden Section
model Opt_Gold

parameter Real xd[:];
parameter Real yd[size(xd,1)];
parameter Real xlo=87e-6;
parameter Real xhi=504e-6; 
parameter Integer N=10; // maximum iteration
parameter Real es=0.0001; // maximum error

Real f1[N], f2[N], x1[N], x2[N], ea[N], y[3];
Real xopt,  fx;
protected
Real d, xl, xu, xint, R=(5^(1/2)-1)/2;

algorithm
xl := xlo; 
xu := xhi;
y  := Curve_Fitting(xd,yd);
 
for i in 1:N loop
 d:= R*(xu-xl);
 x1[i]:=xl+d;
 x2[i]:=xu-d;
 f1[i]:=y[1]*x1[i]^2+y[2]*x1[i]+y[3];
 f2[i]:=y[1]*x2[i]^2+y[2]*x2[i]+y[3];
 xint:=xu-xl;
 
 if f1[i]>f2[i] then
   xl:=x2[i];
   xopt:=x1[i];
   fx:=f1[i];
   else
     xu:=x1[i];
     xopt:=x2[i];
     fx:=f2[i];
 end if;
 
 ea[i]:=(1-R)*abs((xint)/xopt);
 if ea[i]<es then
   break;
 end if;
end for;

end Opt_Gold;


Hasil


Berikut adalah tabel lengkap dari data yang didapat dari internet:

Hasildaffa.JPG

Berikut adalah hasil yang saya dapat dari codingan diatas.

Hasilarealocked1.JPG
Hasilelasticitylocked.JPG


Jawaban UAS Metode Numerik

543719.jpg
543720.jpg
1234.JPG
23456.JPG