net/publication/311740416
Komputasi Fisika
CITATIONS READS
0 5,449
1 author:
Sparisoma Viridi
Bandung Institute of Technology
228 PUBLICATIONS 228 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Sparisoma Viridi on 20 December 2016.
Sparisoma Viridi
2016
Sparisoma Viridi, Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya diperbolehkan selama
untuk tujuan pendidikan dan tak-komersial. Modifika si dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
2016
Sparisoma Viridi
Catatan kuliah ini disusun dengan bantuan dukungan Penelitian Unggulan Perguruan
Tinggi tahun 2016 dengan nomor kontrak 585f/I1.C01/PL/2016.
Isi
1. Program Pertama 1
2. Nama Variabel 7
3. Variabel 17
4. Algoritma 27
5. Model Mengurutkan Data 33
6. Regresi Linier 47
7. Sistem Persamaan Linier 61
8. Deret Taylor 73
9. Integrasi Numerik 81
10. Mencari Akar 87
11. Matriks 2-D 95
12. Sekilas Metode Beda Hingga 101
13. Jaringan Saraf Tiruan 109
14. Lengkungan Batang 113
15. Monte-Carlo untuk Aliran Fluks Sederhana 117
16. Catatan Penutup 121
iv
Sparisoma Viridi, Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya diperbolehkan selama
untuk tujuan pendidikan dan tak-komersial. Modifika si dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Sparisoma Viridi, 201608170 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Program Pertama
diperbolehkan selama untuk tujuan pendidikan dan ta k-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Dalam dunia pemrograman komputer, terlepas dari apapun bahasa pemrograman yang
digunakan, terdapat suatu kebiasaan adanya program pertama yang dibuat dan
dijalankan untuk memastikan sistem dapat bekerja, terutama piranti penampilnya.
Program tersebut dikenal dengan nama HelloWorld, yang hanya menampilkan kata-
kata “Hello, World!” atau variasinya [1].
Kode di atas disimpan dalam berkas dengan nama hello0.cpp dan dikompilasi dengan
cara
g++ hello0.cpp –o hello0
seperti diharapkan. Kode 1 di atas merupakan contoh kode singkat yang dapat
dituliskan.
1
2
suatu jangka waktu tertentu. Komentar dapat dituliskan dalam satu baris atau beberapa
baris. Untuk satu baris saja, komentar dituliskan dalam suatu baris yang diawali dengan
dengan karakter-karakter // seperti
// Show the sentence "Hello, World!"
dan untuk beberapa baris komentar diapit oleh pasangan karakter /* dan */ seperti
/*
hello1.cpp
Show "Hello, World!" sentence
*/
20160817
Create this program.
*/
#include <iostream>
Dalam catatan ini keterangan dan komentar sengaja dituliskan dalam Bahasa Inggris
agar pembaca dapat terbiasa dalam membaca keterangan dan komentar dalam bahasa
3
yang akan memberikan petunjuk pada orang yang akan menggunakannya. Opsi -o
adalah untuk menentukan nama berkas yang dapat dieksekusi [2]. Bila ingin diubah
nama berkas yang dapat dieksekusi maka dapat dilakukan
Compile: g++ hello1.cpp -o helloworld
Execute: ./helloworld
sehingga berkas yang dapat dieksekusi menjadi bernama helloworld dengan kodenya
tetap bernama hello1.cpp seperti semula.
dengan baris pertama menyatakan tanggal catatan dan baris berikutnya berisikan
informasi yang ingin disampaikan. Keterangan pada tiap tanggal dapat terdiri dari
4
beberapa baris, akan tetapi sebaiknya tetap cukup singkat. Kode lengkap program
hello2.cpp adalah sebagai berikut ini.
20160817
Create this program, modified from hello1.cpp.
*/
#include <iostream>
#include <cstring>
Dari masukan "Muhammad Ali" diambil kata pertama dan digunakan program untuk
menyapa pengunanya seperti pada baris berikutnya.
5
// Define mass
double mass = 0.25;
// Define size
double size = 2.0;
/*
// Form is circle
area = M_PI * size * size;
sigma = mass / are;
*/
// Form is square
area = size * size;
sigma = mass / are;
// Show result
cout << "Luas = " << area << endl;
Pada Kode 4 program dikompilasi dengan bentuk yang dipilih berbentuk bujur sangkar.
Bila akan digunakan bentuk lingkaran bagian terkait bentuk bujursangkar yang harus
dijadikan komentar.
6 Pertanyaan
1. Apa perbedaan penggunaan karakter-karakter // dan pasangan karakter /* dan
*/ dalam penulisan keterangan dan komentar dalam program?
7 Rujukan
1. Wikipedia contributors, "Hello, World! program", Wikipedia, The Free Encyclo-
pedia en:733431665, 17 Aug 2016 | 0928.
2. Shlomi Fish, "Use of gcc/g++", Software Development on Linux, URL http://www
.shlomifish.org/lecture/W2L/Development/slides/gcc/ [20160817].
Sparisoma Viridi, 201608190 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Nama Variable
diperbolehkan selama untuk tujuan pendidikan dan ta k-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Dalam pemberian nama variabel (dan fungsi) C++ membedakan antara huruf besar dan
kecil yang merupakan warisan dari bahasa pemrograman C [1], artinya int xmin = 2
dan int Xmin = 3 keduanya merupakan variabel yang berbeda. Dengan demikian
dalam penulisannya, pemrogram harus hati-hati bila sebelumnya telah terbiasa dengan
bahasa pemrograman yang tidak membedakan huruf besar dan kecil dalam penamaan
variabelnya.
7
8
20160819
Create this program.
*/
#include <iostream>
#include <cstring>
int &d4# = 4;
int !9d = 3;
int *r@g = 2;
int if = 3;
double x min = 34.3;
return 0;
}
int &d4# = 4;
^
varname0.cpp:24:6: error: expected unqualified-id before ‘!’ token
int !9d = 3;
^
varname0.cpp:25:9: error: expected initializer before ‘g’
int *r@g = 2;
^
varname0.cpp:27:6: error: expected unqualified-id before ‘if’
int if = 3;
^
varname0.cpp:28:11: error: expected initializer before ‘min’
double x min = 34.3;
^
di mana baris pertama adalah huruf ‘0’ diikuti angka nol, baris kedua adalah huruf ‘L’
kecil diikuti angka satu, dan baris ketiga adalah variasi dari keempat karakter tersebut.
variabel yang sedapat mungkin mirip dengan simbol matematikanya sehingga saat
dibandingkan dengan sistem fisis yang sedang disimu lasikan, keterbacaan program
menjadi tinggi.
Kode 2 Contoh penamaan variabel yang semirip mungkin dengan simbol matematikanya.
/*
varname1.cpp
Learn naming variables
20160819
Create this program.
*/
#include <iostream>
#include <cmath>
// Calculate density
double rho = m / V;
// Show result
cout << "A sphere with mass " << m << " kg and ";
untuk benda berbentuk bola, dapat dibuat suatu fung si untuk itu, sebagai kelanjutan
dari Kode 2 yang menghitungnya secara langsung.
Kode 3 Contoh penamaan variabel dan fungsi sesuai makna fisisnya.
/*
varname2.cpp
Learn naming variablels and function
20160819
Create this program, in advance for varname1.cpp.
*/
#include <iostream>
#include <cmath>
// Show result
cout << "A sphere with mass " << m << " kg and ";
cout << "radius " << R << " m has density of " << rho;
cout << " kg/m^3" << endl;
return 0;
}
Kode 3 akan memberikan hasil seperti kode sebelumnya, yang telah dibuat lebih
canggih dengan adanya fungsi
// Calculate density of ball with mass m and radius R
double rho_ball(double m, double R) {
double V = (4.0 / 3.0) * M_PI * R * R * R;
double rho = m / V;
return rho;
}
yang akan memudahkan perhitungan, bila proses ini dilakukan berulang-ulang kali.
Salah satu keunggulan mendefinisikan fungsi adalah apabila fungsi tersebut
dimodifikasi, maka seluruh bagian program yang menggunakan fungsi yang sama juga
telah dimodifikasi. Lain halnya bila perhitungan, s eperti kasus massa jenis di atas, di
hitung langsung, bila satu bagian diubah dan bagian lain terlupa, maka jalannya program
secara keseluruhan dapat bermasalah.
Ilustrasi lain yang telah umum dikenal, misalnya adalah penentuan akar-akar dari suatu
persamaan kuadrat yang memiliki bentuk
y = ax 2 + bx + c , (3)
−b± D
x1, 2 = (4)
2a
20160819
Create this program.
*/
#include <iostream>
#include <cmath>
// Calculate discriminant
double n = l * l - 4.0 * k * m;
// Show result
cout << "Polynomial " << k << "x^2 + ";
cout << l << "x + " << m << " has roots of " << endl;
cout << "x1 = " << x << endl;
cout << "x2 = " << y << endl;
Setelah membaca Kode 4, cobalah membaca Kode 5 dan bandingkan pengertian yang
diperoleh.
14
20160819
Create this program as correction of varname3.cpp.
*/
#include <iostream>
#include <cmath>
double D = b * b - 4.0 * a * c;
return 0;
}
Lebih lanjut Persamaan (4) dan (5) dapat pula dinya takan dalam satu fungsi sehingga
saat mencari akar-akar dari Persamaan (3) dapat langsung hanya menggunakan satu
buah fungsi, misalnya dengan implementasi berbentuk
double x1 = root1_poly2(2.0, -9.0, 4.0);
double x2 = root2_poly2(2.0, -9.0, 4.0);
15
20160819
Create this program as advancing of varname4.cpp.
*/
#include <iostream>
#include <cmath>
return 0;
}
return x;
}
seperti dalam perintah MatLab roots [3], di mana implementasi ini membutuhkan jenis
variabel array yang akan dipelajari kemudian.
5 Pertanyaan
1. Bila ingin dinamakan suatu variabel dengan nama xmin, berapakah kemungkinan
jumlah nama yang diperbolehkan dengan menggunakan variasi huruf besar dan
kecil? Tuliskan semua variasi tersebut!
2. Sebutkan karakter-karakter (atau pasangan karakter) yang sebaiknya dihindari
digunakan dalam suatu nama variabel yang sama untuk menghindari ketidakter-
bacaan dan jelaskan mengapa!
3. Buatlah fungsi untuk root_poly3(a, b, c, d, n) dengan n = 1, 2, 3.
6 Rujukan
1. Unknown, "C variable naming rules", c4learn.com, 2015, URL http://www.c4learn
.com/c-programming/c-variable-nameing-rules/ [20160819].
2. Wikipedia contributors, "Discriminant", Wikipedia, The Free Encyclopedia
en:731986435, 28 Jul 2016 | 2029.
3. "roots, Polynomial roots", MathWorks, 2016, URL http://www.mathworks.com
/help/matlab/ref/roots.html [20160819].
Sparisoma Viridi, 201608171 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Variabel
diperbolehkan selama untuk tujuan pendidikan dan ta k-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Salah satu fitur dalam bahasa pemrograman manapun adalah adanya variabel yang
nilainya dapat dimanipulasi sehingga membantu untuk memperoleh hasil yang
diinginkan. Ada kalanya nilai suatu variabel ingin dibuat tetap selama program
berlangsung, untuk keperluan itu diadakan konstanta. Terdapat berbagai jenis variabel
dalam C++, di antaranya adalah int, double, bool, char, dan string, yang akan
dibahas di sini. Variabel tak lain adalah suatu tem pat penyimpanan informasi dalam
memori komputer.
1 Deklarasi
Deklarasi variabel dalam C++ dilakukan dengan [1]
type daftar_variabel;
di mana daftar_variabel dapat berupa satu atau beberapa nama variabel yang akan
dideklarasikan dengan jenis type. Kode 1 merupakan contoh deklarasi beberapa jenis
variabel dan bagaimana isi dari variabel tersebut saat dijalankan adalah sebagai berikut
ini.
./variable0
i = 2280620
j = 1630586288
k = 0
x = 1.80764e+159
y = 6.42587e+159
z = 4.68359e+159
c =
d =
Terlihat bahwa nilai-nilai dari variabel i, j, k yang berjenis int, x, y, z yang berjenis
double, dan c, d yang berjenis char tidak dapat diperkirakan. Hal ini karena variabel-
variabel tersebut hanya dideklarasikan dan belum diinisialisasi nilainya. Nilai awalnya
merupakan nilai acak yang teradpat pada tempat penyimpanan dalam memori saat
suatu tempat dialokasikan untuk suatu variabel baru. Dikarenakan nilai-nilai tersebut
tidak dapat dipastikan, oleh karena itu amat tidak disarankan untuk menggunakan
variabel-variabel tersebut tanpa menginisialisasi nilainya terlebih dahulu, mengingat
dapat saja nilai yang tak pasti tersebut mempengaruhi hasil akhir perhitungan.
17
18
20160817
Create this program.
*/
#include <iostream>
Inisialisasi nilai variabel dapat dilakukan sekalig us saat deklarasi atau sesudahnya,
seperti berikut ini
// Declare variable of type int
int i;
// Initialize it
i = 213;
19
2 Operasi
Setelah suatu variabel dideklarasikan dan diinisial isasi nilainya, ia dapat dioperasikan
sehingga nilainya dapat berubah. Operasi arimatik yang telah umum dikenal misalnya +,
-, /, * yang berturut-turut berarti penjumlahan, pengurangan, pembagian, dan
perkalian, misalnya
double x = 2.5;
double y = 4.2;
double z = x - y;
Penjumlahan z = x+ y z = x + y;
Pengurangan z = x− y z = x - y;
Operator
Perkalian z = xy z = x * y;
x
Pembagian z= z = x / y;
y
Akar z= x z = sqrt(x);
Eksponen z = exp( x)
Fungsi
z = exp(x);
Logaritma z = ln x z = log(x);
20160818
Create this program.
*/
#include <iostream>
Untuk operasi -, /, dan * bagian penjumlahan sesuai dengan Tabel 1 perlu dig anti
dengan operasi yang diinginkan. Selain operasi matematika variabel berjenis lain seperti
string dapat pula mengalami operasi seperti penjumlahan yang implementasinya dapat
dilihat dalam Kode 2.3 berikut.
21
20160818
Create this program.
*/
#include <iostream>
#include <cstream>
Operasi + untuk dua buah variabel berjenis string akan berfungsi menggabungkan is
kedua variabel tersebut.
efek pemotongannya dapat membuat hasil perhitungan tak dapat diperkirakan. Ilustrasi
mengenai hal ini diberikan dalam Kode 4 berikut.
Kode 4 Casting double ke int yang tak terencana.
/*
variable3.cpp
Try to produce some error messages
20160818
Create this program.
*/
#include <iostream>
#include <cstring>
Hasil pertama menunjukkan terjadi casting dari double ke int, yaitu 4.8 menjadi 4
tanpa disadari karena hasil disimpan dalam variabel berjenis int. Hasil kedua
memberikan nilai sebenarnya karena hasil penjumlahan disimpan dalam variabel
berjenis double. Keluaran yang sama juga akan diperoleh bila baris pertama dalam
program utama diubah menjadi
23
int x = 1.2;
di mana casting double 1.2 langsung dilakukan menjadi int saat disimpan dalam
variabel program x. Untuk mendeteksi hal ini opsi saat kompilasi -Wfloat-conversion
diperlukan, yang akan memberikan pesan peringatan
variable3.cpp: In function ‘int main(int, char**)’:
variable3.cpp:20:10: warning: conversion to ‘int’ alters ‘double’
constant value [-Wfloat-conversion]
int x = 1.2;
^
20160818
Create this program.
*/
#include <iostream>
#include <cstdlib>
return 0;
}
24
20160818
Create this program.
*/
#include <iostream>
#include <cstring>
return 0;
}
atau
other_type y = static_cast<other_type>(x);
Kedua cara tersebut lebih aman karena akan diperiksa oleh compiler C++ saat program
dikompilasi, dibandingkan dengan konversi secara implisit (tak terencana) pada bagian
sebelumnya. Pada Kode 5 disajikan satu casting tak terencana dan dua casting
terencana.
Selanjutnya dengan menggunakan fungsi konversi dari int ke string
string std::to_string(int);
seperti diharapkan. Hanya perlu diingat bahwa fungsi to_string memerlukan opsi
kompilasi -std=c++11 agar perintah tersebut dapat dikenal
5 Pertanyaan
1. Mengapa saat mendeklarasikan suatu variabel sebaiknya juga dilakukan inisialisasi
nilainya? Jelaskan!
2. Terdapat potongan kode program berikut
double x = 8.2;
int y1 = x;
int y2 = (int) x;
int y3 = static_cast<int>(x);
6 Rujukan
1. Unknown, "C++ Variable Types", in Learn C++, Simply Easy Learning,
tutorialspoint, 2016, URL http://www.tutorialspoint.com/cplusplus/cpp_variable
_types.html [20160817].
26
2. Alex, "4.4a – Explicit type conversion (casting)" in Learn C++, URL http://www
.learncpp.com/cpp-tutorial/4-4a-explicit-type-conversion-casting/ [20160818].
Sparisoma Viridi, 201608260 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Algoritma
diperbolehkan selama untuk tujuan pendidikan dan ta k-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Langkah-langkah instruksi yang jelas untuk menyelesaikan suatu masalah atau suatu
kelompok masalah dikenal sebagai algoritma [1]. Atau secara umum tidak harus ada
permasalahan, dapat juga merupakah langkah-langkah terstruktur untuk melakukan
suatu kegiatan.
Kita secara tak langsung sebenarnya dalam keseharian kita telah melakukan banyak
algoritma, akan tetapi tidak menyadarinya. Setelah melihat empat contoh di atas,
seharusnya Anda dapat mulai menuliskan algoritma-algoritma yang Anda miliki dalam
melakukan aktivitas sehari-hari.
27
28
Analisa algoritma
Algoritma sebelumnya dapat dianalisa dengan menggunakan tabel yang baris-barisnya
berisikan keadaan variabel-variabel yang ingin dipantau perubahan nilainya dan kolom-
kolomnya berisikan variabel-variabel tersebut. Dalam Tabel 1 berikut dimisalkan bahwa
N = 3, dan x = {2.1, 3.9, 1.5}.
Tabel 1. Perubahan nilai variabel-variabel dalam algoritma menentukan bilangan terbesar dari N
bilangan.
Langkah N i xi z
L1 3 - - -
L2 3 1 - -
L3 3 1 2.1 -
L4 3 2 - -
L5 3 2 - -
L3 3 2 3.9 -
L4 3 3 - -
L5 3 3 - -
L3 3 3 1.5 -
L4 3 4 - -
L5 3 4 - -
L6 3 1 2.1 -
L7 3 1 2.1 2.1
L8 3 2 3.9 2.1
L9 3 2 3.9 2.1
L10 3 2 3.9 3.9
L11 3 2 3.9 3.9
L8 3 3 1.5 3.9
L9 3 3 1.5 3.9
L11 3 3 1.5 3.9
L12 3 3 1.5 3.9
Pada bagian akhir diperoleh bahwa bilangan terbesar dari x adalah 3.9 yang tersimpan
dalam z.
Agar lebih terasa maknya, variabel yang digunakan sebaiknya merupakan variabel
berindeks xi dengan i = 1, 2.
Algorima menukarkan isi dua variabel
L1. N = 2
L2. i = 1
L3. xi?
L4. i = i + 1
L5. i ≤ N → L3
L6. z = x1
L7. x1 = x2
L8. x2 = z
Tabel 2. Perubahan nilai x1 dan x2 dalam pertukaran nilai dua variabel, misalnya 1.5 dan 4.3.
Langkah N i x1 x2 z
L1 2 - - - -
L2 2 1 - - -
L3 2 1 1.5 - -
L4 2 2 1.5 - -
L5 2 2 1.5 - -
L3 2 2 1.5 4.3 -
L4 2 3 1.5 4.3 -
L5 2 3 1.5 4.3 -
L6 2 3 1.5 4.3 1.5
L7 2 3 4.3 4.3 1.5
L8 2 3 4.3 1.5 1.5
Tabel 2 menggambarkan pada awalnya bahwa x1 = 1.5 dan x2 = 4.3 dan pada akhir
proses pertukaran diperoleh x1 = 4.3 dan x2 = 1.5.
Mengurutkan N variabel
Bila terdapat N buah variabel yang perlu diurutkan, misalnya dari kecil ke besar, maka
langkah-langkah untuk mengurutkannya memerlukan algoritma untuk mencari bilangan
terkecil dari N variabel dan algoritma untuk menukarkan nilai dua buah variabel. Pada
awal algoritma mengurutkan variabel ini juga diperlukan algoritma untuk membaca nila-
nilai variabel yang ingin diurutkan. Algoritma tersebut telah digunakan dalam algoritma
kedua sebelumnya.
Untuk mengurutkan variabel dapat digunakan algoritma kasar berikut
31
Algoritma di atas memang dibuat lebih singkat dan belum dapat secara teknis mudah
diimplementasikan karena di dalamnya terdapat algoritma-algoritma lain yang perlu
diuraikan, sebagai contoh langkah L1 di atas sebenarnya terdiri dari lima baris dalam
algoritma kedua sebelum algoritma terakhir di atas. Walaupun belum jelas secara teknis
algoritma sebelumnya ini tetap dapat dianalisa menggunakan tabel seperti sebelumnya.
Tabel 3. Nilai-nilai variabel {xi} dan {yi} saat algoritma penguruan variabel dijalankan dengan
contoh data {5, 3, 1, 4, 2}.
Langkah N {xi} j {yj}
L1 5 5, 3, 1, 4, 2 - -
L2 5 5, 3, 1, 4, 2 1 -
L3 5 5, 3, 1, 4, 2 1 1
L4 4 5, 3, 4, 2 1 1
L5 4 5, 3, 4, 2 2 1
L6 4 5, 3, 4, 2 2 1
L3 4 5, 3, 4, 2 2 1, 2
L4 3 5, 3, 4 2 1, 2
L5 3 5, 3, 4 3 1, 2
L6 3 5, 3, 4 3 1, 2
L3 3 5, 3, 4 3 1, 2, 3
L4 2 5, 4 3 1, 2, 3
L5 2 5, 4 4 1, 2, 3
L6 2 5, 4 4 1, 2, 3
L3 2 5, 4 4 1, 2, 3, 4
L4 1 5 4 1, 2, 3, 4
L5 1 5 5 1, 2, 3, 4
L6 1 5 5 1, 2, 3, 4
L7 1 5 5 1, 2, 3, 4, 5
L8 1 5 5 1, 2, 3, 4, 5
32
Dalam baris akhir pada Tabel 3 dapat dilihat bahwa nilai {xi} yang semula tidak urut,
menjadi urut setelah disimpan dalam {yj}.
Pertanyaan
1. Buatlah algoritma untuk memasak nasi goreng di dalam dalam rumah sendiri!
2. Buatlah algoritma untuk menentukan bilangan terkecil dari dua bilangan!
Algoritma yang telah diberikan dapat dimodifikasi.
3. Buatlah algoritma untuk menentukan bilangan terkecil dari N bilangan dan
lakukan analisa dengan membuat tabelnya.
4. Buatlah algoritma yang lebih teknis dari algoritma yang dijelaskan dalam Tabel 3
dalam mengurutkan nilai-nilai suatu variabel berindeks dari besar ke kecil dengan
jumlah komponen N = 4 dan bilangan-bilangannya adalah {3, 0, 8, -2}. Analisa
algoritma tersebut dengan menggunakan tabel.
Rujukan
1. Wikipedia-Autoren, "Algorithmus", Wikipedia, Die freie Enzyklopädie, de:
157082494, 16 Aug 2016 | 10:04.
Terdapat berbagai metode untuk mengurutkan data, baik kecil ke besar ataupun
sebaliknya, yang beberapa diantaranya telah umum dikenal [1]. Dalam bagian ini
disajikan suatu model mengurutkan data sebagai ilustrasi dengan pembawa informasi
berupa balok-balok yang disusun dalam kotaknya.
7 7
1 7
3 3 3
0 0 1 0 1
N=4 M=0 N=3 M=1 N=3 M=1
Gambar 1. Proses pemindahan isi antar variabel: keadaan awal (kiri), pemindahan isi variabel
asal x ke variabel tujuan y (tengah), dan pengaturan otomatis variabel asal x (kanan).
Isi dari variabel x pada indeks i dapat dipindahkan ke variabel y dan diletakkan mulai
dari indeks terendah j (dihitung dari paling bawah). Tempat kosong dalam x akan terisi
oleh variabel dengan indeks lebih besar dari indeks isi yang dipindahkan, yang
ilustrasinya diberikan dalam Gambar 1, di mana seakan-akan pengaturan ulang isi x
disebabkan oleh gaya gravitasi yang mengarah ke bawah.
2 Algoritma
Dengan menggunakan model variabel berindeks dalam Gambar 1 dapat dibuat
algoritma mengurutkan data sebagai berikut ini
Algoritma mengurutkan data
L1. Isi variabel berindeks x dengan N buah data
L2. Pesan variabel y dan belum berisi data (M = 0)
33
34
Proses pengurutan dari i ke x dapat dilihat dalam Gambar 2, yang tidak lagi ditampilkan
dalam tiga-dimensi melainkan cukup dalam dua-dimensi.
Gambar 2. Proses mengurutkan angka x = {1, 8, 2, 9, 5} ke y = {}: (a)-(i) dan jumlah komponen
masing-masing variabel: (j).
Dalam Gambar 2 terlihat proses pemindahan variabel dari x ke y pada (b), (d), (f), (i),
dan pengurutkan index dalam x pada (c), (e), (h). Isi dalam variabel y tak perlu diurutkan
lagi karena sejak awal pengisiannya telah berurutan.
3 Program
Suatu contoh program diberikan berikut ini yang isi variabelnya dapat diubah-ubah
sesuai dengan kebutuhan.
Kode 1. Salah satu implementasi model mengurutkan variabel dalam C++.
/*
vsm.cpp
Variable Sorting Model
20160904
Create this program.
*/
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
// Calculate size of x
int N0 = sizeof(x) / sizeof(int);
// Initial size of x
int N = N0;
// Reserve size of y
int y[N];
// Initial size of y
int M = 0;
// Display header
cout << "# x y" << endl;
while(N >= 0) {
// Find minimum of x
int xmin = min(N, x);
Perhatikan bahwa pada awal isi x adalah {1, 8, 2, 9, 5} dan y adalah {} dan pada akhir
isi keduanya adalah {}, dan {1, 2, 5, 8, 9}. Terlihat bahwa x telah kosong dan y telah
berisikan urut nilai komponen-komponennya.
Dalam Kode 1 diberikan beberapa contoh fungsi, yang untuk saat ini cukup dijalankan
saja tanpa perlu memahami detil perintah-perintah penyusunnya, yaitu
string strval(int, int[]);
double min(int, int[]);
void rem(int&, int[], int);
Fungsi strval() berfungsi untuk mengubah isi int array menjadi string untuk
kemudian dapat ditampilkan, fungsi min() untuk mencari nilai minimum dari int
array, dan fungsi rem untuk menghilangkan satu komponen dari int array. Dalam fungsi
terakhir ini komponen yang dimaksud tidak benar-benar dihilangkan melainkan hanya
disusun ulang dan nilai jumlah komponen dikurangi s atu.
yang berfungsi untuk menukarkan isi kedua variabel argumennya. Lebih detil
pemanfaatan fungsi ini akan dibahas pada bagian ber ikutnya.
5 Bubble sort
Salah satu metode mengurutkan bilangan adalah bubble sort [2], yang menggunakan
hanya satu variabel. Nilai maksimum (atau pun minimum) ditukarkan nilai-nilainya
38
dalam suatu variabel berindeks, sehingga pada akhirnya urutan nilai-nilai dalam variabel
tersebut akan bersesuaian dengan urutan indeksnya. Secara singkat algoritmanya
adalah sebagai berikut
Algoritma bubble sort (kecil ke besar)
L1. x1, .., xN?
L2. i = 1
L3. j = i + 1
L4. xi < xj → L6
L5. xi ↔ xj
L6. j > N – 1 → L9
L7. j = j + 1
L8. → L4
L9. i > N – 2 → L12
L10. i = i + 1
L11. → L3
L12. ?x1, .., xN
Tabel 1 memberikan hasil analisa algoritma bubble sort yang mengurutkan bilangan
kecil ke besar. Bilangan {5, 8, 2, 1} (berwarna merah) adalah awal sebelum diurutkan
dan {1, 2, 5, 8} (berwarna biru) adalah akhir setelah diurutkan. Dalam tabel tersebut
bilangan yang diberi kotak adalah dua nilai yang dipertukarkan dengan fungsi swap().
Tabel 1. Analisa algoritma bubble sort (kecil ke besar).
39
20160904
Create this program as advancing from vsm.cpp.
*/
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
// Calculate size of x
int N = sizeof(x) / sizeof(int);
// Show header
cout << "#i\tj\tx1\tx2\tx3\tx4" << endl;
Perhatikan bahwa Kode 2 ini memiliki baris kode yang lebih sedikit dari Kode 1, yaitu
yang semula 104 baris telah tereduksi menjadi hanya 78 baris. Hasil eksekusi Kode 2
adalah
$ ./bsort
#x1 x2 x3 x4
5 8 2 1
#i j x1 x2 x3 x4
1 2 5 8 2 1
1 3 2 8 5 1
1 4 1 8 5 2
2 3 1 5 8 2
41
2 4 1 2 8 5
3 4 1 2 5 8
#x1 x2 x3 x4
1 2 5 8
Langkah L5 merupakan baris di mana fungsi swap() diterapkan, yang hasilnya dapat
dilihat dalam Tabel 1 sebelumnya.
Kode 3. Implementasi bubble sort dengan mengunakan fungsi sort().
/*
bsortf.cpp
Bubble sort in function
20160904
Create this program as advancing from bsort.cpp.
*/
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
Perhatikan bahwa kode dalam program utama atau fungsi main() semakin singkat dan
jumlah total baris kode menjadi 68. Hasil Kode 3 adalah
$ ./bsortf
5 8 2 1
1 2 5 8
6 Membuat pustaka
Bila fungsi sort(), strval(), dan swap() sering digunakan, ketiga fungsi tersebut
dalam ditempatkan dalam suatu berkas pustaka, misalnya saja bsort.h yang isinya
adalah sebagaimana dalam Kode 4. Pustaka ini akan membuat fungsi kode bsortl.cpp
menjadi lebih singkat seperti diberikan dalam Kode 5.
43
20160904
Create this library as advancing from bsortf.cpp.
*/
#include <sstream>
#include <cstring>
#include <cmath>
#ifndef BSORT_H
#define BSORT_H
// List of functions
string strval(int, int[]);
void swap(int&, int&);
void sort(int, int[]);
swap(x[i], x[j]);
}
}
}
}
#endif
20160904
Create this program as advancing from bsortf.cpp.
*/
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include "bsort.h"
Semua fungsi-fungsi yang digunakan telah disimpan dalam pustakan bsort.h, yang dapat
pula dipanggil oleh fungsi-fungsi lain yang membutu hkannya. Cara memangilnya adalah
dengan menyertakan baris kode berikut
#include "bsort.h"
yang mengakomodasi arah dir dari pengurutkan, misalnya 0 untuk kecil ke besar dan
lainnya untuk besar ke kecil. Berikut ini disajikan kode untuk pilihan kedua.
Kode 6. Modifikasi fungsi sort() dalam pustaka bsort.h.
void sort(int N, int x[], int dir) {
for(int i = 0; i < N; i++) {
for(int j = i + 1; j < N; j++) {
bool SWAP = (dir == 0) ? x[i] > x[j] : x[i] < x[j];
if(SWAP) {
swap(x[i], x[j]);
}
}
}
}
Definisi fungsi sebelumnya dapat tetap dibiarkan dan C++ mengakomodasi hal ini, yaitu
fungsi dengan dua atau lebih nama sama diperbolehkan asalkan argumen yang
diperlukannya berbeda
void sort(int N, int x[])
void sort(int N, int x[], int dir)
di mana hal ini termasuk dalam overloading functions. Membiarkan fungsi yang lama
akan menjamin kompatibilitas ke program-program yang menggunakan fungsi yang
46
lama agar dapat tetap berjalan. Bila fungsi versi lama dihapus, program-program
tersebut saat dikompilasi akan memberikan pesan kesalahan. Dengan menggunakan
fungsi yang baru, penerapan dalam program
sort(N, x, 0);
akan memberikan
$ ./bsortl
5 8 2 1
1 2 5 8
Dengan mengubah argumen terakhir dari fungsi sort() dapat dipilih cara pengurutan,
yaitu kecil ke besar (0) atau sebaliknya (1).
8 Pertanyaan
1. Bila ingin dibuat fungsi yang implementasinya adala h
sort(N, x, ASCENDING);
sort(M, y, DESCENDING);
bagaimanakah kira-kira caranya? Apa variabel-variabel baru yang perlu
didefinisikan? Jelaskan!
2. Buat suatu fungsi untuk menentukan nilai minimum da ri suatu variabel berindeks
dengan implementasinya
double xmax = max(N, x);
9 Rujukan
1. Wikipedia contributors, "Sorting algorithm", Wikipedia, The Free Encyclopedia,
en:736299445, 26 Aug 2016 | 14:47.
2. Brad Miller, David Ranum, "5.7. The Bubble Sort" in Problem Solving with
Algorithms and Data Structures using Python, Luther College, URL http
://interactivepython.org/runestone/static/pythonds/SortSearch/TheBubbleSort
.html [20160904].
Sparisoma Viridi, 201609041 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Regresi Linier
diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Pasangan data {xi, yi} dengan i = 1, .., N dapat dimodelkan secara linier dengan
berbagai cara, seperti grafik melalui pertimbangan visual (sembarang, sentroid atau
melalui suatu titik tertentu), atau dengan regresi linier [1] melalui metode kuadrat
terkecil [2].
agar sebanyak mungkin melewati pasangan data {xi, yi} dengan i = 1, .., N dapat
dilakukan secara visual yang umummnya dilakukan dengan terlebih dahulu
menggambarkan titik-titik data menggunakan kertas grafik, lalu menggambarkan suatu
persamaan garis secara subyektif. Persamaan garis yang baik adalah yang sebanyak
mungkin melewati titik-titik data.
Dapat pula didefinisikan suatu titik acuan (xo, yo) yang merupakan titik sembarang
tetapi memiliki makna fisis, ataupun nilai ini merupakan titik rata-rata data
N
1
x avg =
N
∑x
i =1
i , (2)
N
1
y avg =
N
∑y
i =1
i . (3)
Titik origin (0, 0) dapat pula merupakan kandidat dari titik (xo, yo) yang harus dilewati
Persaman (1).
2 Kuadrat terkecil
Kesalahan pemodelan dari Persamaan (1) terhadap suatu data (xi, yi) dapat dirumuskan
dalam bentuk
di mana bentuk kuadrat dipilih agar memastikan nilai εi yang berharga positif tidak
saling berkompensai dengan nilai εi yang berharga negatif, yang akan terjadi bila bukan
47
48
dan
∂ε
= 0. (7)
∂c1
∑ (y
i =1
i − c 0 − c1 x i ) = 0 , (8)
∑ (x y )
N
i i − c 0 xi − c1 xi2 = 0 . (9)
i =1
Persamaan (8) dan (9) tak lain adalah persamaan dengan dua konstanta yang tidak
diketahui, yaitu c0 dan c1. Dengan melakukan substitusi maka nilai kedua konstanta
tersebut, sebagai fungsi dari {xi, yi} dengan i = 1, .., N, dapat diperoleh.
Persamaan (8) dapat dituliskan kembali menjadi
N N
∑y
i =1
i − c 0 N − c1 ∑ xi = 0 ,
i =1
(10)
∑x y
i =1
i i − c0 ∑ xi − c1 ∑ xi2 = 0 .
i =1 i =1
(11)
Temukan rumusan c0 dari Persamaan (10) dan substitusikan ke dalam Persamaan (11)
sehingga diperoleh
49
N N N
∑x ∑ y
i =1
i
i =1
i −N ∑x y
i =1
i i
c1 = N N N
. (12)
∑x ∑x
i =1
i
i =1
i −N ∑x
i =1
2
i
∑x ∑x y −∑x ∑y
i =1
i
i =1
i i
i =1
2
i
i =1
i
c0 = N N N
. (13)
∑x ∑x
i =1
i
i =1
i −N ∑x
i =1
2
i
Persamaan (12) dan (13) merupakan persamaan untuk menentukan c0 dan c1. Selain itu
didefinisikan pula
( )( )
N
SS xy = ∑ xi − x avg y i − y avg , (14.a)
i =1
( )( )
N
SS xx = ∑ xi − x avg xi − x avg , (14.a)
i =1
( )( )
N
SS yy = ∑ y i − y avg y i − y avg , (14.a)
i =1
SS 2xy
R2 = , (15)
SS xx SS yy
∑
N xi2
i =1
∑
− x i N
i =1
∑ i =1
y − y i
2
i
i =1
∑
3 Algoritma
Algoritma untuk penentuan c0, c1, dan R2 adalah sebagai berikut ini
Algoritma regresi linier
L1. (x1, y1), .., (xN, yN)?
L2. Sx = 0, Sy = 0, Sxy = 0, Sxx = 0
50
L3. i = 1
L4. Sx = Sx + xi, Sy = Sy + yi, Sxy = Sxy + xiyi, Sxx = Sxx + xi2
L5. i ≥ N → L8
L6. i = i + 1
L7. → L4
L8. c0 = (Sx Sxy – Sxx Sy) / (Sx2 –N Sxx), c1 = (Sx Sy – N Sxy) / (Sx2 –N Sxx), xavg = Sx /N, yavg = Sy /N
L9. SSxx = 0, SSyy = 0, SSxy = 0
L10. i = 1
2 2
L11. SSxx = SSxx + (xi – xavg) , SSyy = SSyy + (yi – yavg) , SSxy = SSxy + (xi – xavg)(yi – yavg),
L12. i ≥ N → L15
L13. i = i + 1
L14. → L11
L15. R2 = SSxy2 / (SSxx SSyy)
L16. ?c0, c1, R2
Langkah-langkah L1, L2, L4, L8, L9, L11, dan L16 dapat dijabarkan dalam beberapa langkah
apabila dirasakan terlalu kompleks, misalnya untuk langkah L16 dapat dijabarkan dalam tiga
baris, di mana masing-masing baris hanya menampilkan c0, c1, dan R2 sebagai keluaran.
Penggabungan langkah-langkah dalam satu baris untuk mereduksi jumlah baris dalam algoritma.
20160904
Create this program.
*/
#include <iostream>
#include <sstream>
#include <cstring>
51
#include <cmath>
// Calculate c0 and c1
double c0 = (Sx * Sxy - Sxx * Sy) / (Sx * Sx - N * Sxx);
double c1 = (Sx * Sy - N * Sxy) / (Sx * Sx - N * Sxx);
// Calculate R2
double R2 = SSxy * SSxy / (SSxx * SSyy);
// Show results
cout << c0 << "\t";
cout << c1 << "\t";
cout << R2 << endl;
di mana baris pertama merupakan {x}, baris kedua {y}, dan baris ketiga merupakan c0,
c1, dan R2. Sebagai konfirmasi data yang sama digunakan dalam Microsoft Excel dan
dilakukan fitting dengan opsi trendline linier, yang hasilnya diberikan dalam Gambar 1.
12
10
y 6
y = 1.8x + 1.4
4 R² = 0.987
0
0 1 2 3 4 5 6
x
Gambar 1. Hasil fitting dengan fitur trendline pada Microsoft Excel.
Hasil yang diperoleh dari program linreg sama dengan hasil yang diperoleh
menggunakan aplikasi spreadsheet yang telah umum digunakan. Dengan demikian baik
algoritma maupun program yang dibuat untuk saat ini telah memberikan hasil yang
benar.
53
j merupakan indeks iterasi, i = 0, 1, dan γ merupakan suatu kontanta yang bernilai kecil.
Untuk itu, diperlukan kedua ungkapan berikut
N
∂ε
= −2 [ yi − c0 − c1 xi ] ,
∑ (19)
∂c0 i =1
N
∂ε
∂c1
= −2 ∑[
i =1
xi y i − c 0 xi − c1 x i2 . ] (20)
Substitusi Persaman (19) dan (20) ke Persaman (17) sehingga dapat diperoleh
N
c 0j +1 = c 0j + 2γ ∑ [y
i =1
i − c 0 − c1 xi ] , (21)
N
c1j +1 = c1j + 2γ ∑ [x y
i =1
i i − c 0 xi − c1 xi2 , ] (22)
yang terus menerus dilakukan sampai Persamaan (5) memberikan nilai cukup kecil bila
tidak bisa nol. Untuk itu diperlukan tebakan awal c00 dan c10.
Algoritma regresi linier dengan gradient descent
L1. (x1, y1), .., (xN, yN)?
L2. c00, c10?
L3. γ, εeps, jmax?
L4. j = 1
L5. ∆c0 = 0, ∆c1 = 0
L6. i = 1
L7. ∆c0 = ∆c0 + 2γ (yi – c0j-1 – c1j-1 xi)
L8. ∆c1 = ∆c1 + 2γ (xi yi – c0j-1 xi – c1j-1 xi2)
L9. i = i + 1
L10. i < N + 1 → L7
L11. c0 = c0 + ∆c0
54
L12. c1 = c1 + ∆c1
L13. ε = 0
L14. i = 1
2
L15. ε = ε + (yi – c0 – c1 xi)
L16. i = i + 1
L17. i < N + 1 → L15
L18. εj = ε
L19. j = j + 1
L20. j < 3 → L5
L21. ∆ε = εj-1 – εj-2
L22. ε > εeps ∧ j < jmax → L5
L23. Sx = 0, Sy = 0
L24. i = 1
L25. Sx = Sx + xi, Sy = Sy + yi
L26. i = i + 1
L27. i < N + 1 → L25
L28. xavg = Sx / N, yavg = Sy / N
L29. SSxx = 0, SSyy = 0, SSxy = 0
L30. i = 1
2 2
L31. SSxx = SSxx + (xi – xavg) , SSyy = SSyy + (yi – yavg) , SSxy = SSxy + (xi – xavg)(yi – yavg),
L32. i = i + 1
L33. i < N + 1 → L31
L34. c0 = c0j-1, c1 = c1j-1
L35. R2 = SSxy2 / (SSxx SSyy)
L36. ?j, c0, c1, R2
Terdapat hal menarik di sini, bahwa langkah L31 hanya bergantung dari data {xi, yi} dan
tidak bergantung dari c0 dan c1 yang diperoleh secara numerik. Untuk ke depan
diperlukan rumusan R2 yang bergantung c0 dan c1 yang diperoleh sehingga nilai R2 dapat
menjadi kriteria penghentian program.
Keluaran dari program dalam Kode 2 bergantung dari jumlah iterasi yang digunakan,
misalnya
$ ./linreg-gd
1 2 3 4 5
3 5 7 9 10
200 1.39443 1.80154 0.987805
dan
$ ./linreg-gd
1 2 3 4 5
55
3 5 7 9 10
500 1.39997 1.80001 0.987805
untuk 200 dan 500 iterasi. Nilai c0 = 1.4 dan c1 = 1.8 dapat diperoleh saat jmax > 611.
Kode 2. Program regresi linier dengan gradient descent.
/*
linreg-gd.cpp
Linear regression using gradient descent
20160904
Create this program.
*/
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
// Change c0 and c1
c0 += dc0;
c1 += dc1;
// Calculate R2
double R2 = SSxy * SSxy / (SSxx * SSyy);
// Show results
cout << j << "\t";
cout << c0 << "\t";
cout << c1 << "\t";
cout << R2 << endl;
57
Untuk data x = {1, 2, 3, 4, 5}, y = {3, 5, 7, 9, 11}, γ = 0.01, jmax = 1000, εeps = 10-12
diperoleh hasil berikut
$ ./linreg-gd
1 2 3 4 5
3 5 7 9 11
729 1 2 1
sebagaimana diharapkan. Hasil terakhir merupakan tes bila ε masih dapat mencapai
nilai nol sehingga diperlukan nilai εeps yang cukup kecil. Bila kondisi ini tidak dapat
tercapai jmax akan berperan untuk menghentikan iterasi.
2.002
2
1.998
1.996
c 1 1.994
1.992
1.99
1.988
1.986
0.99 1 1.01 1.02 1.03 1.04 1.05
c0
Gambar 2. Perubahan nilai c0 dan c1 untuk x = {1, 2, 3, 4, 5}, y = {3, 5, 7, 9, 11}, γ = 0.01, dan
-12
εeps = 10 , serta jmax = 100 + 50n, n = 0, .., 11.
58
Perubahan nilai c0 dan c1 dengan bertambahnya j dapat dilihat dalam Gambar 2, yang
umumnya tidak harus linier.
6 Regresi polinomial
Dalam statistik salah satu bentuk regresi linier bilamana hubungan antara variabel
bebas x dan variabel tidak bebas y dimodelkan dalam bentuk polinomial berderajat M,
M
y = ∑ cm x m , (23)
m=0
disebut sebagai regresi polinomial [5]. Untuk model dengan N = 1 telah diperoleh
sebelumnya dua persamaan dalam c0 dan c1, yaitu Persamaan (10) dan (11) yang dapat
dituliskan kembali dalam bentuk matriks sebagai berikut
N N
N
∑1 ∑ x c
i ∑ yi
Ni =1 = Ni =1 ,
i =1 0
N (24)
x 2 c1 xi y i
∑ ∑ ∑
xi
i =1
i
i =1
i =1
N N N N N
∑1 ∑x ∑x ∑x c0 ∑ yi
2 M
i i L i
i =1 i =1 i =1 i =1 Ni =1
N
c1 ∑ xi yi
N N N
∑ xi ∑x ∑x ∑x
2 3 M +1
i i L i
iN=1 i =1 i =1 i =1
= iN=1 , (26)
N N N
c2 ∑ xi2 yi
∑ xi ∑x ∑x ∑x
2 3 4 M +2
L
i i i
i =1
Mi =1 i =1
M
i =1
M O
i =1
M M M
N N N N
N
xM
∑ ∑x ∑x ∑x
M +1 M +2
L 2M cM ∑ xiM yi
i =1
i
i =1
i
i =1
i
i =1
i
i =1
yang telah ditunjukkan sebelumnya [6]. Persamaan (26) tidak dapat dengan mudah
diselesaikan dengan cara sebelumnya sehingga dapat memperoleh Persamaan (12) dan
(13), melainkan memerlukan cara lain. Persamaan (26) tak lain merupakan kumpulan
persamaan linier yang dituliskan dalam bentuk matriks, di mana salah satu penyele-
saiannya adalah dengan menggunakan eliminasi Gauss [7]. Detil mengenai penyelesaian
persamaan linier ini akan dibahas dalam bagian lain
59
7 Pertanyaan
1. Tunjukkan bagaimana Persamaan (15) dapat diubah menjadi Persamaan (16)!
2. Ubahkan program dalam Kode 1 sehingga dapat membaca masukan dari file yang
isinya setiap baris merupakan pasangan data {xi, yi} seperti
# x y
1 2.1
2 3.9
3 6
4 8.1
5 9.9
8 Rujukan
1. Wikipedia-Autoren, "Lineare Regression", Wikipedia, Die freie Enzyklopädie,
de:157575928, 1 Sep 2016 | 15:10.
2. Wikipedia contributors, "Least squares", Wikipedia, The Free Encyclopedia,
en:737023359, 31 Aug 2016 | 08:46.
3. Stephanie, "Coefficient of Determination (R Squared): Definition, Calculation",
Statistics How To, 2016, URL http://www.statisticshowto.com/what-is-a-
coefficient-of-determination/ [20160904].
4. Wikipedia contributors, "Gradient descent", Wikipedia, The Free Encyclopedia,
en:737511475, 3 Sep 2016 | 08:42.
5. Wikipedia contributors, "Polynomial regression", Wikipedia, The Free
Encyclopedia, en:731752358, 27 Jul 2016 | 09:04.
6. A. Panduwirawan, L. Haris, G. W. P. Data, F. D. E. Latief, S. Viridi, "Program
Sederhana untuk Regresi Polinomial Orde n Berbasis C++", Prosiding Seminar
Kontribusi Fisika 2011 (SKF 2011), Eds. F. D. E. Latief et al., Bandung, Indonesia, 1-
2 Desember 2011, pp. 198-205.
60
Ragam Persamaan (1) dapat berjumlah M buah persamaan (j = 1, .., M). Kumpulan
persamaan-persamaan tersebutlah yang dinamakan sistem persamaan linier
y1 = c11x1 + c12x2 + .. + c1NxN
y2 = c21x1 + c22x2 + .. + c2NxN
y3 = c31x1 + c32x2 + .. + c3NxN (2)
..
yM = cM1x1 + cM2x2 + .. + cMNxN
yang dapat dituliskan dalam bentuk matriks
CX = Y . (3)
atau eksplisitnya
61
62
1 0 0 L 0 x1
0 1 0 L 0 x2
0 0 1 L 0 x3 , (7)
M M M O M L
0 0 0 L 1 xn
di mana nilai-nilai yang dicari terletak pada kolom ke-M.
63
2 Algoritma
Dari matriks dengan bentuk baris echelon nilai-nilai x1, .., xN dapat diperoleh dengan
menggunakan algoritma berikut
Algoritma penyelesaikan baris echelon
L1. i = n
L2. Sdx = 0
L3. j = i
L4. j ≥ n L8
L5. j = j + 1
L6. Sdx = Sdx + dij ∙ xj
L7. j < n L5
L8. xi = (zi – Sdx) / dii
L9. i = i – 1
L10. i > 1 L2
1 L1 n - - -
L2 n - - 0
L3 n n - 0
L4 n n - 0
L9 n–1 n - 0
L10 n–1 n - 0
2 L2 n–1 n - 0
L3 n–1 n–1 - 0
L4 n–1 n–1 - 0
L5 n–1 n - 0
L6 n–1 n - dn-1,n ∙ xn
L7 n–1 n - dn-1,n ∙ xn
L9 n–2 n - dn-1,n ∙ xn
3 L2 n–2 n - 0
L3 n–2 n–2 - 0
L4 n–2 n–2 - 0
L5 n–2 n–1 - 0
4 L2 n–3 n - 0
L3 n–3 n–3 - 0
L4 n–3 n–3 - 0
L5 n–3 n–2 - 0
5 L2 n–4 n - 0
L3 n–4 n–4 - 0
L4 n–4 n–4 - 0
L5 n–4 n–3 - 0
… … … … …
#include <cmath>
#include <iostream>
2, 1, 1, 1, 11,
1, 3, 1, 2, 18,
};
/*
double r[] = {
1, 3, 4, 1, 12,
0, 12, 0, 2, 4,
0, 0, 2, 1, 1,
0, 0, 0, 1, -1,
};
*/
double x[N];
for(int i = N-1; i >= 0; i--) {
double c = 0;
for(int j = N-1; j > i; j--) {
int ij = (N + 1) * i + j;
c = c + x[j] * r[ij];
}
int iM = (N + 1) * i + N;
int ii = (N + 1) * i + i;
x[i] = (r[iM] - c) / r[ii];
}
return 0;
}
20160301
Create this program.
In Cywin atoi requires cstdlib library but not fog g++
in Kubuntu distro.
*/
#include <iostream>
#include <cmath>
#include <cstdlib>
// Verbose usage
if(argc < 2) {
cout << "Usage: " << pname << " ";
cout << "[vop]" << endl;
cout << "vop\tverbose options:" << endl;
cout << "\t 0 show only final result" << endl;
cout << "\t 1 show intermmediate results" << endl;
return 1;
}
68
Hasil dari Kode 2 adalah sebagai berikut ini bila dipanggil dengan opsi 0
$ ./lineqrr0.exe 0
0
2
3
4
# Echelon matrix
71
1 1 1 4 21
0 1 -2 -2 -12
0 0 -6 -11 -62
0 0 0 2.66667 10.6667
# Solution
0
2
3
4
4 Pertanyaan
1. Jalankan Kode 1 dan tentukanlah nilai-nilai dari x1, x2, x3, dan x4!
2. Gantilah bagian yang tepat dalam program pada Kode 2 sehingga dapat
merepresentasikan persamaan-persamaan linier berikut ini
x1 + 2 x 2 + 3x3 + 4 x 4 = 10 , (8a)
x1 − x 2 + x3 − 4 x 4 = −3 , (8b)
x1 + 10 x 2 − 11x 3 + 5 x 4 = 5 , (8c)
2 x1 + 3x 2 + 3 x3 − 5 x 4 = 9 . (8d)
x1 − x 2 + x3 = 0 , (9b)
x1 + 10 x 2 − 11x 3 = 11 . (9c)
c
ε2 b
ε3
ε1
R23 a R12
I2
R2
f
e
R31
R3 I1
R1
I3
d
5 Rujukan
1. Eric W. Weisstein, "Gaussian Elimination", from MathWorld--A Wolfram Web
Resource, URL http://mathworld.wolfram.com/GaussianElimination.html
[20160905].
Sparisoma Viridi, 201608230 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Deret Taylor
diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Ekspansi suatu fungsi dalam deret Taylor dapat dikatakan merupakan dasar dari banyak
metode numerik, seperti misalnya metode integrasi Euler [1], metode pencarian akar
Newton-Raphson [2], dan penyelesaian persamaan diferensial menggunakan deret [3].
1 Deret Taylor
Sembarang fungsi f(x) dapat direpresentasikan di sekitar x = x0 dengan menggunakan
deret Taylor mengikuti
∞
(x − x0 )n d n f (x )
f (x ) = ∑ , (1)
n =0 n! dx n x = x
0
di mana semakin besar nilai n atau semakin banyak suku yang dilibatkan, representasi-
nya semakin mendekati fungsi sebenarnya. Sebagai ilustrasi, misalnya terdapat fungsi
f ( x ) = c0 + c1 x + c 2 x 2 , (2)
yang apabila dicari turunan ke-nol, pertama, dan keduanya akan memberikan
d 0 f (x )
0
= f ( x ) = c0 + c1 x + c 2 x 2 , (3a)
dx
d 1 f ( x ) df (x )
= = c1 + 2c 2 x , (3b)
dx1 dx
d 2 f (x )
= 2c 2 . (3c)
dx 2
Suku-suku untuk n ≥ 3 tidak perlu dilibatkan karena akan memberikan nilai nol. Selan-
jutnya untuk ekspansi deret di sekitar x = x0, akan membuat Persamaan (3a) – (3c)
menjadi
d 0 f (x )
= c 0 + c1 x0 + c 2 x02 , (4a)
dx 0 x = x0
d 1 f (x )
= c1 + 2c 2 x0 , (4b)
dx1 x = x0
73
74
d 2 f (x )
= 2c 2 . (4c)
dx 2 x = x0
( x − x0 )
0
(c0 + c1 x0 + c2 x0 ) + ( x − x0 )
1
( x − x0 )
2
f (x ) = 2
(c1 + 2c2 x0 ) + (2c2 )
0! 1! 2!
= c 0 + c1 x0 + c 2 x0 + c1 x − c1 x0 + 2c 2 x 0 x − 2c 2 x0 + c 2 x − 2c 2 x0 x + c 2 x02
2 2 2
(5)
= c 0 + c1 x + c 2 x + (c1 x 0 − c1 x0 ) + (c 2 x − 2c 2 x + c 2 x ) + (2c 2 x0 x − 2c 2 x0 x )
2 2
0
2
0
2
0
= c 0 + c1 x + c 2 x 2
2 Deret Maclaurin
Apabila dilakukan ekspansi deret Taylor dengan mengambil x0 = 0 maka deret yang
diperoleh disebut sebagai deret Maclaurin [4]
∞
x n d n f (x )
f (x ) = ∑ . (6)
n =0 n! dx n x =0
Contoh dua buah fungsi yang sering diekspansi menggunakan deret Maclaurin adalah
sin x dan cos x yang masing-masing akan menjadi
sin x = ∑
∞
(− 1)n x 2 n +1 , (7)
n =0 (2n + 1)!
cos x = ∑
∞
(− 1)n x 2 n . (8)
n = 0 (2n )!
r r
r r (t + ∆t ) − r (t )
v (t ) = , (11)
∆t
hubungan diferensialnya, yang tak lain adalah Persamaan (9). Metode ini akan
memberikan hasil yang baik bila nilai ∆t cukup kecil.
Terdapat lelucon yang menarik terkait dengan limit ini ☺ [5].
Metode Euler dapat diungkapkan lebih umum sebagai
df
f ( x + ∆x ) = f ( x ) + ∆x . (13)
dx
Terdapat suatu persamaan diferensial
dx
− ω 1− x2 = 0 (14)
dt
yang akan digunakan sebagai ilustrasi penerapan Persamaan (13). Penerapapan metode
Euler akan memberikan bentuk numerik dari Persamaan (14) dalam bentuk
yang tak lain akan memberikan solusi berbentuk sin ωt. Persamaan (14) dapat dituliskan
menjadi
dx
= ω dt . (16)
1− x2
Dimisalkan x = sin θ dan dx = cos θ dθ, sehingga Persamaan (16) akan menjadi
dθ = ω dt ⇒ θ = ωt . (17)
Selanjutnya diperoleh
sehingga
x(t + ∆t ) = sin (ωt + ω∆t ) = sin ωt cos ω∆t + cos ωt sin ω∆t . (20)
Dikarenakan nilai ω∆t yang kecil maka dapat lakukan ekspansi menggunakan deret
Maclaurin sampai suku pertama
cos ω∆t ≈ 1 , (22a)
sin ω∆t ≈ ω∆t . (22b)
Substitusikan Persamaan (22a) dan (22b) ke Persamaan (21) sehingga
yang tak lain adalah Persamaan (15) yang dicari. Sayangnya pembuktian ini belum bisa
dilakukan sehingga diperoleh Persamaan (19), dan bukan sebaliknya, menggunakan
Persamaan (19) untuk memperoleh Persamaan (15).
Persamaan (19) juga merupakan solusi dari persamaan diferensial orde dua berikut
d 2x
2
+ω2x = 0. (23)
dt
Dengan menggunakan formulasi beda hingga maju dan mundur
df ( x ) f (x + ∆x ) − f (x )
≈ , (24)
dx ∆x
df ( x ) f (x ) − f (x − ∆x )
≈ , (25)
dx ∆x
suku pertama ruas kiri Persamaan (25) dapat diubah menjadi
d 2 f (x ) f (x + ∆x ) − 2 f (x ) + f (x − ∆x )
≈ . (26)
dx 2 (∆x )2
Substusi Persamaan (26) ke Persamaan (23) akan memberikan formula
[
x(t + ∆t ) = 2 − ω 2 (∆t )
2
] x(t ) − x(t − ∆t ) . (27)
77
1
cos ω∆t ≈ 1 − ω 2 (∆t ) ,
2
(30a)
2
1
sin ω∆t ≈ ω∆t − ω 3 (∆t ) .
3
(30b)
6
1 2 1 3
x(t + ∆t ) + x(t − ∆t ) = 2 x(t ) 1 − ω 2 (∆t ) − cos ωt ω∆t − ω 3 (∆t ) . (31)
2 6
Bila diambil hanya suku sin ω∆t ≈ 0 maka Persamaan (31) akan menjadi
[
x(t + ∆t ) = 2 − ω 2 (∆t )
2
] x(t ) − x(t − ∆t ) ,
yang tak lain adalah Persamaan (28) yang dicari.
Untuk fungsi-fungsi yang lebih sederhana, seperti gerak jatuh bebas
dv
= −g , (32)
dt
akan memberikan solusi numerik
sehingga
dari sembarang titik terhadap dua buah titik xn dan xn+1. Titik xn adalah titik tebakan
pertama yang memberikan nilai fungsi f(xn). Persamaan garis yang lewat titik [xn, f(xn)]
dan gradiennya f '(xn) adalah
y = f ' ( x n )( x − x n ) + f ( x n ) . (38)
0 = f ' ( x n )( x n +1 − x n ) + f (x n ) . (39)
5 Persamaan diferensial
Deret pangkat yang dapat merupakan hasil ekspansi suatu fungsi f(x) menggunakan
deret Taylor ataupun deret Maclaurin, dalam bentuk
∞
f ( x) = ∑ c n x n . (40)
n=0
dapat menjadi solusi dari suatu persamaan diferensial. Sebagai ilustrasi, terdapat suatu
persamaan diferensial
dy
− y −1 = −x 2 . (41)
dx
Turunkan Persamaan (40) terhadap x sehingga diperoleh
79
∞
df ( x)
= ∑ nc n x n −1 . (42)
dx n =1
∑ nc x
n =1
n
n −1
− ∑ cn x n − 1 + x 2 = 0 .
n=0
(43)
Denga melihat suku-suku pangkat tiga dan lebih tinggi yang tidak ada, maka dapat
ditetapkan bahwa cn = 0 untuk n ≥ 3. Suku-suku pangkat yang berbeda harus bebas
linier sehingga diperoleh bahwa c2 = 1, c1 = 2, dan c0 = 1 sehingga solusinya adalah
y = 1 + 2x + x 2 . (45)
6 Pertanyaan
1. Turunkan Persamaan (7) dan (8) dengan menerapkan Persamaan (1) pada sin x
dan cos x, lalu pilih x0 = 0 sehingga kedua persamaan tersebut dapat diperoleh.
2. Dengan menggunakan Persamaan (7) dan (8) tunjukkan sin2x + cos2x = 1.
3. Turunkan Persamaan (36) dengan menggambarkan prosesnya!
4. Carilah dengan menggunakan Persamaan (40) solusi dari persamaan diferensial
d 2 y dy
2 − 18 y − 18 = 0 .
dx dx
7 Rujukan
1. Wikipedia contributors, "Euler method", Wikipedia, The Free Encyclopedia, en:
731969033, 28 Jul 2016 | 18:25.
2. Wikipedia-Autoren, "Newton-Verfahren", Wikipedia, Die freie Enzyklopädie, de:
156737549, 5 Aug 2016 | 05:55.
3. James Stewart, "Using Series to Solve Differential Equations" in Calculus. Concepts
& Contexts, 4th edition, 2015, URL http://www.stewartcalculus.com/data
/CALCULUS%20Concepts%20and%20Contexts/upfiles/3c3-UseSeries-SolveDEs
_Stu.pdf [20160823].
80
Integrasi Numerik
diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Terdapat berbagai persoalan fisis yang dapat diungkapkan dalam bentuk suatu fungsi,
yang penyelesaiannya memerlukan proses integrasi. Kadang fungsi tersebut tidak dapat
dengan mudah diselesaikan secara analitik. Untuk inilah integrasi numerik diperlukan.
Dalam bagian ini dibahas beberapa metode integrasi numerik, yaitu persegi panjang
[1], trapezium [2], dan Simpson [3].
F (x ) = ∫ f (x ) dx (1)
atau
dF ( x )
= f (x ) . (2)
dx
Integrasi dapat dilakukan dengan x ∈ [xa, xb] sehingga
xb
F ( xb ) − F ( x a ) = ∫ f (x )dx . (3)
xa
Persamaan (1) merupakan solusi analitik integrasi suatu fungsi bila dapat dilakukan.
Bila tidak, solusi numerik digunakan untuk memperoleh Persamaan (3).
f(x)
xa xb
Gambar 1. Luas di bawah kurva A adalah hasi integrasi f(x) antara xa dan xb.
81
82
dengan menganggap bahwa f(x) = c0, di mana c0 = f(xi). Ruang yang tidak terisi antara A
dan Appan adalah error dari metode persegi panjang ini.
4 Metode trapsium
Pada metode ini digunakan asumsi bahwa f(x) = c0 + c1x sehingga luas trapesium dapat
dicari lewat
xb N −1
∆x
A= ∫ f (x ) dx ≈ Atrap = ∑ [ f ( xi ) + f ( xi +1 )] . (8)
xa i =0 2
Perhitungan luas dapat pula dilakukan dengan terlebih dahulu mencari nilai-nilai c0 dan
c1 baru dihitung luasnya, akan tetapi Persamaan (8) memberikan cara yang lebih cepat.
5 Metode Simpson
Untuk metode Simpson tidak terdapat cara cepat dalam menemukan rumusan seperti
dalam Persamaan (7) dan (8) akan tetapi harus melalui pencarian terlebih dahulu nilai-
nilai c0, c1, dan c2, melakukan integrasi dalam selang xi dan xi+1, lalu mencari rumusan
umumnya yang memiliki bentuk
83
xb N −1
∆x
A= ∫ f ( x ) dx ≈ Asimp =∑ f ( xi ) + 4 f xi + 1 + f ( xi +1 ) , (9)
xa i=0 2 2
di mana
1
xi + 1 = (xi + xi +1 ) . (10)
2 2
∫ f (x ) dx ≈∑ f ( xi ) ∆x (11)
xa i =0
akan semakin baik. Apabila diketahui solusi analitik dari hasil integralnya, jumlah pita
yang baik adalah saat selisih perhitungan teori dan numerik telah lebih kecil dari suatu
error
Akan tetapi apabila hasil integrasinya tidak dapat diperoleh secara teori, yang umumnya
terjadi saat suatu metode numerik digunakan, maka error dapat didefinisikan sebagai
Apabila dengan penambahan jumlah N hasil integrasi numerik sudah tidak lagi banyak
berubah dan selisihnya telah lebih kecil dari suatu error yang ditentukan, dapat
dikatakan bahwa hasil telah memadai dan perhitungan dapat dihentikan.
Umumnya metode numerik, algoritma, dan program diuji dulu untuk kasus-kasus di
mana solusi analitiknya ada sehingga digunakan Persamaan (12). Selanjutnya digunakan
untuk fungsi integrannya yang solusi analitiknya belum ada. Hal ini dapat menunjang
kepercayaan bahwa, setidaknya, metode numerik, algoritma, dan program telah diuji
untuk hal-hal yang telah diketahui dan memberikan hasil yang benar. Apakah ini
84
menjamin bahwa hasil integrasi numerik untuk sistem yang tidak ada solusi analitiknya
telah benar? Jawabannya tidak. Pembuktian lain yang dapat dicari adalah melalui
eksperimen apabila memungkinkan untuk dilakukan.
8 Algoritma
9 Program
Dengan x ∈ [0, 1] ..
f1 (x ) = 1 , (14.a)
f 2 (x ) = 1 + x , (14.b)
f 3 (x ) = 1 + x 2 . (14.c)
10 Pertanyaan
1. Buktikan Persamaan (8) dengan terlebih dahulu mencari c0 dan c1, lalu
menghitung integralnya dari xi sampai xi+1!
2. Hitunglah untuk x ∈ [0, 1] fungsi-fungsi berikut secara analitik dan dengan ketiga
metode integrasi numerik. Jelaskan kedekatan hasilnya dengan hasil analitik.
Cukup gunakan N = 1.
a. f(x) = 2
b. f(x) = 3x + 2
c. f(x) = x2 + 1
3. Turunkan rumus integrasi metode Simpson!
Rujukan
1. Wikipedia contributors, "Rectangle method", Wikipedia, The Free Encyclopedia,
en:717292601, 26 Apr 2016 | 20:55.
2. Wikipedia contributors, "Trapezoidal rule", Wikipedia, The Free Encyclopedia,
en:739231688, 13 Sept 2016 | 14:29.
85
Mencari Akar
diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
Akar suatu persamaan dapat dicari dengan menggunakan berbagai metode, misalnya
saja Newton-Raphson [1], Secant [2], titik-tetap [3], bisection [4], dan grafik.
1 Akar
Bila xa adalah akar dari suatu persamaan f(x), maka akan terpenuhi bahwa
f (xa ) = 0 . (1)
Ada pula yang mengatakan bila terdapat dua buah fungsi g(x) dan h(x), maka akar xa
adalah titik potong dari kedua persamaan tersebut atau
g ( x a ) = h( x a ) . (2)
Persamaan (2) dapat diubah sehingga memenuhi Persamaan (1) dengan cara
f ( x ) = g ( x ) − h( x ) . (3)
2 Metode Newton-Raphson
Akar dari suatu persamaan f(x) dapat dicari dengan menggunakan
f (x n )
x n +1 = x n − , (4)
df ( x n ) / dx
x a = lim x n +1 (5)
n →∞
atau
x n +1 ≈ x n . (6)
f (x n )
ε = x n +1 − x n = . (7)
df ( x n ) / dx
Saat nilai xn+1 tidak lagi teramati berubah dari xn, maka suku kedua dalam ruas kanan
Persamaan (4) akan menjadi amat kecil atau dapat dikatakan nol.
87
88
3 Metode secant
Apabila fungsi f(x) tidak dapat memberikan data yang kontinu, misalkan saja data
merupakan hasil akuisisi suatu pengukuran sehingga hanya pasangan data x dan f(x)
yang dimiliki untuk suatu resolusi tertentu, maka Persamaan (4) dapat dimodifikasi
dengan menggunakan
df (x ) f ( x ) − f (x − ∆x )
≈ (8)
dx ∆x
atau secara eksplisit
df ( x n ) f (x n ) − f ( x n −1 )
≈ . (9)
dx x n − x n −1
g (x ) = x 2 − 6 x + 8 , (13)
f ( xn ) = (xn + 8) .
1 2
(15)
6
Dengan menggunakan beberapa syarat awal x0 berbeda, yaitu 0.2, 1.2, 2.5, 3.5, dapat
diperoleh nilai-nilai x23 sebagaimana disajikan dalam Tabel 2, di mana akar yang dicari
adalah xa = 2.
5 Metode bisection
Bila dalam suatu rentang x ∈ [x0 , x1 ] terdapat satu akar xa dari f(x), maka berlaku bahwa
1
x2 = (x0 + x1 ) . (17)
2
Perkalian fungsi yang memenuhi Persamaan (16) diperoleh lewat
f ( x2 ) f ( x1 ) = min[ f ( x2 ) f ( x1 ), f ( x2 ) f ( x0 )] , (18)
1
x1 = f −1 min[ f ( x2 ) f ( x1 ), f (x2 ) f ( x0 )] . (19)
f (x2 )
Persamaan (19) akan memberikan nilai baru x1 = x1 ataupun x1 = x0 bergantung hasil
dari fungsi min(). Dengan mengintegrasikannya dengan Persamaan (17) akan dapat
diperoleh rumus rekursifnya
1 1
xn+3 = xn + 2 + f −1 min[ f ( xn + 2 ) f (x n +1 ), f (x n + 2 ) f ( xn )] . (20)
f (xn + 2 )
2
91
6 Menggunakan grafik
Dengan menggunakan grafik posisi akar dapat dengan mudah ditentukan. Sayangnya
metode ini memerlukan f(x) yang kontinu atau bila berbentuk diskrit, diperlukan cukup
banyak data sehingga dapat dilakukan interpolasi. Cara ini akan dapat dengan cepat
menentukan apakah terdapat akar atau tidak dalam suatu rentang x tertentu. Akan
tetapi kemudian tidak dapat dengan akurat menentukan nilai dari x = xa karena
bergantung dari resolusi zooming gambar terhadap f(x). Sebaiknya cara ini digunakan
untuk penerangan awal mengenai ada tidaknya akar dalam suatu rentang x.
7 Metode pemindaian
Secara membabi-buta akar dapat dicari dengan melakukan pemindaian x dengan
pengubahan sebesar ∆x dari x1 sampai x2. Nilai ∆x besar akan membuat akar cepat
ditemukan (atau terlewati) dengan akurasi rendah, sedangkan nilai yang kecil akan
membuat akar lambat ditemukan dengan akurasi yang tinggi. Metode ini dapat
digabungkan dengan menggunakan grafik untuk mencari terlebih dahulu daerah dekat
tempat akar mungkin terdapat baru kemudian dilakukan pemindaian.
8 Faktorisasi
Untuk fungsi yang merupakan hasil dari perkalian fungsi-fungsi yang lebih sederhana,
misalnya perkalian (x – xq), q = a, b, c, .. yang menghasilkan suatu polinomial, pencarian
akar dapat dilakukan dengan menggunakan faktorisasi. Fungsi kuadrat
ax 2 + bx 2 + c = 0 . (21)
memiliki formula kuadrat [5]
b ± b 2 − 4ac
x1, 2 = , (22)
2a
sehingga Persamaan (21) dapat difaktorkan menjadi
(x − x1 )(x − x2 ) = 0 , (23)
Apabila Persamaan (28) ini digunakan dalam metode Newton-Raphson pada (4) akan
diperoleh rumusan baru
2 f (x n + 2 )(x n + 2 − x n +1 )
x n+3 = xn+ 2 − . (29)
f (x n + 2 ) − 4 f ( x n +1 ) − f ( x n )
untuk mencari akar. Lalu bagaimana dengan fitur metode X ini? Apakah lebih baik dari
metode Newton-Raphson ataupun secant? Kebutuhan akan data dari metode ini apabila
dibandingkan dengan dua metode sebelumnya diberikan dalam Tabel 3 berikut.
Tabel 2. Perbandingan metode Newton-Raphson (NR), secant, dan metode X.
Metode NR Secant X
f(x) perlu perlu perlu
f '(x) perlu - perlu
xn-1 perlu perlu perlu
xn-2 - perlu perlu
xn-3 - - perlu
93
f (x ) = −50 − 14 x + 20 x 2 − 3 x 3 , (30)
dengan xn-1 = 4.5, xn-2 = 4.4, dan xn-3 = 4.3. Selisih hasil akhir xn dan xn-1 diberikan dalam
Gambar 1.
1.5
NR
1
S
0.5 X
xn - x n -1
-0.5
-1
-1.5
0 2 4 6 8 10 12
n
Gambar 1. Selisih xn dan xn-1 untuk ketiga metode Newton-Raphson (NR), secant (S) dan X.
Metode X cepat mendekati x∞ di langkah awal tetapi sulit mencapainya pada langkah
selanjutnya sebagaimana terlihat pada Gambar 1. Dengan demikian metode ini bagus
untuk tebakan awal yang dapat dilakukan cukup dengan satu langkah. Setelah itu dapat
dilanjutkan dengan metode lain.
10 Pertanyaan
1. Tunjukkan bagaimana cara memperoleh metode Newton-Raphson dalam
Persamaan (4)!
2. Tunjukkan keberlakukan metode bisection dalam Persamaan (20) dengan
menggunakan suatu contoh.
3. Substitusi Persamaan (22) ke Persamaan (21) sehingga terbukti bahwa persamaan
tersebut merupakan solusinya.
4. Buatlah skema campuran antara penerapan metode Newtwon-Raphson dengan X
atau secant dengan X dengan melakukan variasi jumlah langkah-langkah yang
perlu dilakukan masing-masing metode sehingga secara total jumlah langkah
menjadi minimum dan dan juga selisih xn dan xn-1.
94
10 Rujukan
1. Wikipedia-Autoren, "Newton-Verfahren", Wikipedia, Die freie Enzyklopädie, de:
156737549, 5 Aug 2016 | 05:55.
2. Eric W. Weisstein, "Secant Method", MathWorld--A Wolfram Web Resource, URL
http://mathworld.wolfram.com/SecantMethod.html [20160830].
3. Wikipedia contributors, "Fixed-point iteration", Wikipedia, The Free Encyclopedia,
en:724688240, 10 Jun 2016 | 21:00.
4. Douglas Wilhem Harder, Richard Khoury, "Topic 10.1: Bisection Method
(Examples)" in Numerical Analysis for Engineering, University of Waterloo, URL
https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/10RootFinding/bisection
[20160830].
5. Wikipedia contributors, "Quadratic formula", Wikipedia, The Free Encyclopedia,
en:736790164, 29 Aug 2016 | 21:21.
Sparisoma Viridi, 201609120 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Matriks 2-D
diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
1 Matriks 1-D
Matriks 1-d lebih dikenal dengan bentuk vektor yang dapat direpresentasikan dalam
bentuk
N
r
r= ∑ r eˆ
i =1
i i , (1)
dengan N adalah jumlah komponen vektor. Umumnya dalam kinematika dan dinamika
nilai N = 3. Persamaan (1) dapat pula direpresentasikan dalam bentuk matriks 2-d
r1
r
r
2
r = r3 , (2)
M
rN
yang memiliki N baris dan 1 kolom, atau dikatakan merupakan matriks N×1.
2 Matriks 2-D
Untuk matriks 2-d komponennya dirujuk dengan dua indeks, di mana indeks pertama
menggambarkan baris dan indeks kedua menggambarkan kolom. Ukuran matriks
dinyatakan dengan, misalnya M×N, yang berarti matriks memiliki M baris dan N baris.
Matriks 2-d dilambangkan dengan
95
96
untuk M baris dan N kolom. Komponen mariks R pada baris i dan kolom j dinyatakan
dengan rij [2].
t ij = ∑ xik y kj . (9)
k
Persamaan (9) secara langsung telah menerapan bahwa jumlah kolom matriks pertama
harus sama dengan jumlah baris matriks kedua atau N1 = M2.
cos θ sin θ
Rθ = , (10)
− sin θ cos θ
97
x' x
= Rθ . (11)
y ' y
Koordinat (x', y') adalah koordinat baru dari (x, y) yang telah dirotasikan. Penarikan atau
strechting pada arah x sebesar kx dan pada arah y sebesar ky direpresentasikan dengan
k x 0
S= . (12)
0 k y
Suatu titik dapat direfleksikan terhadap suatu garis yang dinyatakan menggunakan
vektor (lx, ly) dengan menggunakan
1 l x − l y 2l x l y
2 2
Rl = . (13)
l x2 + l y2 2l x l y l y2 − l x2
Titik dapat pula diproyeksikan secara ortogonal terhadap suatu garis menggunakan
1 u x2 u xu y
Po = . (14)
l x2 + l y2 u x u y u 2y
6 Transformasi affine
Persamaan (10), (12) – (14) tidak terlalu memudahkan dalam penggunaannya terutama
bila di dalam operasinya diperlukan translasi. Transformasi affine [3] lebih praktis untuk
digunakan, yang untuk dinyatakan dalam bentuk
untuk rotasi terhadap sumbu z sebesar sudut θ searah putaran jarum jam,
x' 1 0 t x x
y ' = 0 1 t y (16)
y
1 0 0 1 1
x' s x 0 0 x
y ' = 0 sy 0 y (17)
1 0 0 1 1
98
untuk proses scalling sebesar sx pada arah x dan sebesar sy pada arah y.
Untuk proses yang berurutan misalnya translasi (tx, ty), penskalaan, rotasi, dan translasi
kembali (tx', ty'), dapat diperoleh [3]
1 0 3 0
, , , (19)
0 1 0 2
dan nilai-nilai eigennya adalah 3 dan 2. Kedua vektor eigen juga bersifat ortogonal.
8 Pertanyaan
1. Buktikan Persaman (10), (13), dan (14) dengan menggambarkannya terlebih
dahulu dalam bidang xy.
2. Buktikan Persamaan (18).
2 0 0
3. Carilah vektor dan nilai eigen dari matriks 0 5 0 .
0 0 3
9 Rujukan
1. Mike DeHaan, "Practical Uses of Matrix Mathematics", Decoded Science, 17 Dec
2013, URL http://www.decodedscience.org/practical-uses-matrix-mathematics
/40494 [20160912].
2. Wikipedia contributors, "Matrix (mathematics)", Wikipedia, The Free
Encyclopedia, en:737926831, 5 Sept 2016 | 21:51.
99
Metode Beda Hingga atau Finite Difference Method akan dibahas secara sekilas dalam
tulisan ini.
1 Deret Taylor
Secara umum setiap fungsi f(x) dapat direpresentasikan dalam suatu deret pangkat
∞
f (x ) = ∑c n xn , (1)
n=0
1 d n f (x )
cn = , (2)
n ! dx n x =0
yang akan membuat Persamaan (1) menjadi deret Maclaurin. Bentuk yang lebih umum
dikenal sebagai deret Taylor [1]
∞
( x − x 0 )n d n f (x )
f (x ) = ∑ . (3)
n =0 n! dx n x = x
0
101
102
df ( x0 ) f (x 0 + ∆x ) − f ( x0 )
≈ . (7)
dx ∆x
Dengan membuat variabel baru x ≡ x0 maka dapat diperoleh rumusan beda depan untuk
turunan pertama suatu fungsi f(x), yaitu
df (x ) f ( x + ∆x ) − f ( x )
≈ . (8)
dx ∆x
Persamaan (5) dapat pula membuat Persamaan (4) menjadi berbeda dari Persamaan
(6), yaitu
df (x 0 )
f (x ) ≈ f ( x − ∆x ) + ∆x , (9)
dx
yang akan memberikan rumusan beda belakang untuk turuan pertama suatu fungsi f(x)
df (x ) f ( x ) − f (x − ∆x )
≈ , (10)
dx ∆x
f (x + ∆x ) − f (x ) f (x ) − f (x − ∆x )
∆x − ∆x
f ′′( x ) ≈
∆x
(12)
f ( x + ∆x ) − 2 f ( x ) + f ( x − ∆x )
≈ ,
(∆x )2
yang merupakan perumusan beda hingga untuk turunan kedua suatu fungsi f(x).
Persamaan (11) dapat pula diawali dengan beda belakang untuk turunan keduanya
f ′(x ) − f ′( x − ∆x )
f ′′(x ) ≈ , (13)
∆x
f (x + ∆x ) − f (x ) f (x ) − f (x − ∆x )
∆x − ∆x
f ′′( x ) ≈
∆x
(14)
f ( x + ∆x ) − 2 f ( x ) + f ( x − ∆x )
≈ ,
(∆x )2
yang akan memberikan hasil yang sama seperti dalam Persamaan (12).
d 2ψ 1 d 2ψ
2
− 2 =0, (15)
dx v dt 2
dengan v adalah laju rambat gelombang dalam medium. Bila terdapat suatu tali dengan
panjang L, bermassa m, dan diberi tegangan F, maka laju rambatnya adalah
F
v= , (16)
µ
Persamaan (17) berlaku bila tali memiliki rapat massa yang homogen. Bila tidak tidak
maka
dm dm
µ= ≡ , (18)
dL dx
dan Persamaan (16) harus dimodifikasi. Solusi dari Persamaan (15) adalah
ψ = A± cos(kx m ωt ) + B± sin (kx m ωt ) , (19)
dengan tanda + menyatakan gelombang yang merambat ke arah +x dan tanda – untuk
gelombang yang menuju –x. Solusi dapat dipilih dengan mengambil B± = B/2 dan A± = 0
apabila diterapkan syarat batas ψ(0, t) = ψ(L, t) = 0, sehingga
ψ = 12 B sin (kx − ωt ) + 12 B sin (kx + ωt ) = B sin kx cos ωt . (20)
1 d2X
= k2 (21)
X dx 2
dan
1 1 d 2T
= k2 , (22)
T v 2 dt 2
Dengan demikian Persamaan (21) dan (22) telah menggambarkan masing-masing hanya
merupakan fungsi spasial dan temporal yang terpisah. Selanjutnya Persamaan (22) dan
(23) dapat dipilih berdasarkan Persamaan (20) dan (23) menjadi
X (x ) = B sin (kx ) (24)
dan
T (t ) = cos(ωt ) , (25)
yang sudah merupakan solusinya. Solusi ini seharusnya dapat pula diperoleh dari
metode beda hingga, yang menerapkan Persamaan (12) ke Persamaan (21) dan (22).
Suku spasial dalam Persamaan (21) menarik untuk dibahas, yang dapat dituliskan
kembali menjadi
d2X
−k2X = 0 (26)
dx 2
Persamaan (28) lebih tepat apabila dituliskan sebagai berikut ini, yang telah memuai
langkah iterasi ke-n nya
X n (x + ∆x ) + X n ( x − ∆x )
X n +1 ( x ) = . (30)
2 + (k∆x )
2
Persamaan (29) harus berlaku untuk semua n. Iterasi akan berhenti saat hasilnya
mendekati hasil prediksi teori
M
ε= ∑ X (i∆x ) − X (i∆x )
i=0
n teori (31)
yang berarti bahwa hasilnya tidak lagi berubah secara numerik. Persamaan (31)
digunakan bila solusi analitik diketahui dan Persamaan (32) bila tidak ada solusi analitik
(atau sulit diperoleh). Saat n = 1 diperlukan pula syarat awal iterasi yang berpengaruh
pada hasil akhirnya. Hasil-hasil berikut ini diberikan dengan B = 1, ∆x = 0.04, M = 50
(atau 48 untuk λ = 4/3), L = 2, dan λ = 4, 2, 4/3, serta N = 300. Amplitudo A diperlukan
untuk fungsi
2πx
X teori (x ) = A sin (kx ) = A sin (33)
λ
Gambar 1. Solusi beda hingga (□) dan teori (–) dengan λ = 4 dan A = 0.39B.
106
Untuk λ = 4 digunakan syarat awal X(0 < x < L) = 1 sehingga dapat diperoleh hasil
seperti dalam Gambar 1 seperti yang diharapkan. Sementara belum dapat diperoleh
penjelasan mengapa A = 0.39B. Selanjutnya adalah untuk λ = 4 yang memerlukan syarat
awal iterasi yang berbeda dengan hasilnya diberikan dalam Gambar 2.
0.08
0.06
0.04
0.02
X(x) 0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
-0.02
-0.04
-0.06
-0.08
x
(a)
0.016 0.016
0.012 0.012
0.008 0.008
0.004 0.004
X(x) 0 X(x) 0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
-0.004 -0.004
-0.008 -0.008
-0.012 -0.012
-0.016 -0.016
x x
(b) (c)
Gambar 2. Hasil untuk λ = 4 dengan: (a) penerapan syarat batas sebelumnya, (b) X(L/2) = 0, dan
(c) X(L/2) = 0 dan X(L/2 < x < L) = -1.
Pada Gambar 2 digunakan berturut-turut nilai A/B = 0.068, 0.0115, 0.0115 agar hasilnya
cocok dengan amplitudo menurut teori. Gambar 2(b) terlihat bahwa syarat terdapat
simpul pada X = L/2 tidaklah cukup, melainkan perlu pula dibuat bahwa amplitudo
untuk L/2 < x < L bernilai negatif sehingga dapat diperoleh Gambar 2(c), sebagaimana
solusinya diharapkan. Kembali nilai A = 0.115B untuk sementara sumbernya belum
dapat dijelaskan. Selanjutnya adalah kasus untuk λ = 4/3, yang nilai M perlu diubah
terlebih dahulu menjadi 48 agar genap dibagi dengan tiga bagian untuk menerapkan
syarat awal iterasi X(0) = X(L/3) = X(2L/3) = X(L) = 0 sebagai posisi simpul. Hasilnya
dapat dilihat dalam Gambar 3.
107
0.004
0.003
0.002
0.001
X(x) 0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
-0.001
-0.002
-0.003
-0.004
x
(a)
0.000015 0.000015
0.00001 0.00001
0.000005 0.000005
X(x) 0 X(x) 0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
-0.00000 -0.00000
-0.00001 -0.00001
-0.00001 -0.00001
x x
(b) (c)
Gambar 3. Hasil untuk λ = 4/3 dengan: (a) penerapan syarat batas sebelumnya, (b) X(L/3) =
X(2L/3) = 0, dan (c) X(L/3) = X(2L/3) = 0 dan X(L/3 < x < 2L/3) = -1.
Kembali pada hasil dalam Gambar 3 ini perlu ditentukan terlebih dahulu posisi simpul
dan nilai amplitudonya yang harus negatif untuk selang L/3 < x < 2L/3. Diperoleh bahwa
A/B = 1.3×10-5.
2E-09 2.5E-13
2E-13
1.5E-09
1.5E-13
1E-09
1E-13
5E-10 5E-14
X(x) 0 X(x) 0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 -5E-14 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
-5E-10
-1E-13
-1E-09
-1.5E-13
-1.5E-09 -2E-13
-2E-09 -2.5E-13
x x
-9 -13
Gambar 4. Hasil untuk: (a) λ = 1, M = 48, A/B = 1.27×10 dan (b) λ = 1, M = 50, A/B = 2.1×10 .
108
1.0E+02
A/B
1.0E-02
A/B = 3.34E-04e1.77E+00λ
R² = 1.00E+00
1.0E-06
yang dirasakan cukup baik untuk kasus ini. Akan tetapi dengan melihat kembali hasil
dalam Gambar 4(b), puncak-puncak sudah digambarkan dengan tiga titik yang bernilai
sama, hal ini menunjukkan bahwa nilai M kurang banyak atau ∆x kurang kecil. Perlu
dikaji lebih lanjut mengenai hal ini.
5 Pertanyaan
1. Carilah perumusan f '''(x) dengan menggunakan metode beda hingga.
2. Dengan menggunakan nilai Δx yang lebih kecil dan M yang lebih besar, buatlah
gambar yang mirip dengan Gambar 5 dan temukan suatu rumusan empirik-
numerik yang lebih universal.
6 Rujukan
1. Mary L. Boas, "Mathematical Methods in the Physical Sciences", John Wiley &
Sons, New York, 2nd edition, 1983, p. 23.
Sparisoma Viridi, 201610030 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Dalam bidang kajian pembelajaran mesin (machine learning) dan sains kognitif
(cognitive science) terdapat jaringan saraf tiruan (artificial neural network) yang
terinspirasi oleh jaringan saraf biologis (sistem pusat sarat, secara khusus merupakan
otak), yang digunakan untuk melakukan estimasi atau sebagai fungsi aproksimasi, di
mana sistem ini bergantung dari sejumlah besar masukan yang secara umum belum
diketahui [1].
1 Komponen
Penjelasan mengenai algoritma suatu saringan saraf tiruan (JST) secara khusus
melibatkan tiga hal, yaitu [2]
i. Arsitektur. Komponen ini memberikan spesifikasi variabel-variabel yang terlibat
dalam jaringan dan hubungan-hubungan topologinya, termasuka di dalamnya
pembobotan koneksi antara neuron, bersama-sama terkait dengan aktivitas
neuron-neuron.
ii. Aturan aktivitas. Aturan ini mendefinisikan bagaimana aktivitas perubahan
neuron sebagai tanggapan atas sinyal dari neuron lain, yang menyebabkan
dinamika dalam skala waktu yang pendek. Secara khusus aturan aktivitas
bergantung dari bobot (parameter) dalam jaringan.
iii. Aturan belajar. Bagaimana cara bobot dalam jaringan berubah dengan waktu
dispesifikasikan dalam aturan ini. Proses pembelajaran ini dipandang sebagai
sesuatu yang terjadi untuk skala waktu yang lebih panjang dari dinamika yang
terjadi akibat aturan aktivitas. Aturan ini bergantung pada aktivitas neuron-
neuron, dan dapat pula bergantung pada target yang diasup oleh pengajara
dan nilai saat ini dari bobot-bobot dalam jaringan.
2 Neuron tunggal
Pendefinisian suatu neuron tunggal diawali dengan pendefinisian ketiga komponennya,
yaitu arsitektur, aturan aktivitas, dan aturan belajar.
Arsitektur. Suatu neuron tunggal memiliki sejumlah I masukan xi dan satu keluaran y.
Terkait dengan setiap masukan adalah bobot wi (i = 1, .., I). Selain itu dapat pula
109
110
terdapat parameter tambahan yang dikenal dengan panjar (bias) w0, yang dapat
dipandang sebagai bobot yang terkait dengan sebuah input x0 yang secara permanen
dibuat sama dengan 1. Neuron tunggal merupakan suatu devais feedforward – yang
berarti bahwa koneksi terahkan dari masukan menuju keluaran neuron-neuron.
Aturan aktivitas. Terdapat dua tahap dalam aturan aktivitas.
1. Pertama, sebagai respons dari vektor input x, dapat dihitung aktivasi neuron
I
a = ∑ wi xi , (1)
i =0
y (a ) = a , (1)
1, a > 0,
y (a ) = θ (a ) ≡ (1)
− 1, a ≤ 0,
b. Fungsi aktivasi stokastik (y dipilih secara stokastik dari ±1
i. kolam hangat (heat bath)
1
1, dengan probabilitas
y (a ) =
,
1 + e −a (1)
− 1, lainnya,
111
3 Jaringan McCulloch-Pitts
Satuan penghitung McCulloch-Pitts (MP) lebih sederhana dari neuron tunggal di mana
sinyal masukan dan keluaran bernilai biner, yaitu 0 atau 1. Jaringannya tersusun atas sisi
terarah yang tak diberi bobot yang terdiri dari dua jenis: pengeksitasi (excitatory) dan
penghambat (inhibitory). Nilai ambang (treshold) dari neuron MP adalah θ.
Aturan dalam melakukan evaluasi suatu satuan peghitung MP adalah [3]
- masukan pengeksitasi adalah x1, x2, .., xN, dan masukan penghambat adalah y1, y2,
.., yM,
- bila M ≥ 1 dan terdapat satu masukan penghambat yang bernilai 1 maka hasil
perhitungan adalah 1,
- bila tidak perlu dihitung x = ∑ xi dan bila x ≥ θ maka hasilnya adalah 1, bila tidak
i
0.
4 Pertanyaan
1. Carilah perumusan f '''(x) dengan menggunakan metode beda hingga.
2. Dengan menggunakan nilai Δx yang lebih kecil dan M yang lebih besar, buatlah
gambar yang mirip dengan Gambar 5 dan temukan suatu rumusan empirik-
numerik yang lebih universal.
5 Rujukan
1. Wikipedia contributors, "Artificial neural network", Wikipedia, The Free
Encyclopedia, en:742261055, 2 Oct 2016 | 17:39.
2. D. J. C. MacKay, "Information Theory, Inference, and Learning Algorithms",
Cambridge University Press, version 7.2 (4th printing), 2005, p. 470.
112
Lengkungan Batang
diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
1 Modulus Young
Terdapat sebuah batang panjang dengan luas penampang A dan panjang L seperti
pada diberikan dalam Gambar 1. Gaya F diberikan tegak lurus pada penampang
sehingga terjadi perubahan panjang ∆L. Modulus Young diperoleh lewat [1]
F/A
E= . (1)
∆L / L
Gaya F disebut juga dengan tegangan (stress) σ dan pertambahan panjang ∆L disebut
juga sebagai regangan (strain) ε.
F
A ∆L
Gambar 1. Pertambahan panjang panjang ∆L saat batang dengan panjang L diberikan gaya F
pada penampangnya A.
Dengan demikian dapat pula dinyatakan bahwa
σ
E= . (2)
ε
Kurva tegangan regangan umumnya digunakan untuk menentukan elastisitas suatu
bahan, yang bagian liniernya akan memberikan informasi modulus Young.
113
114
2 Modulus geser
Gaya F yang diberikan pada penampang A dapat pula tidak berarah tegak lurus
melainkan searah, sehingga terjadi pergeseraan posisi penampang A sebesar ∆x
sehingga dapat didefinisikan modulus geser [2]
F/A
G= , (3)
∆x / L
yang ilustrasinya diberikan dalam Gambar 2 berikut.
θ
∆x
A F
Gambar 2. Pergeseran posisi penampangnya A sejauh ∆x saat diberi gaya F yang berarah sejajar
dengan luas penampang tersebut.
Sudut θ yang dibentuk memenuhi hubungan
∆x
tan θ = . (4)
L
Perhatikan bahwa untuk panjang batang tetap digunakan notasi yang sama L.
3 Konstanta puntir
Dapat pula, alih-alih gaya sejajar penampang A yang berikan, suatu torsi τ dapat juga
diterapkan pada penampang sehingga batang dengan panjang L akan terpuntir sejauh θ
sebagaimana divisualisasikan dalam Gambar 3. Konstanta puntir J yang terkait dengan
modulus geser G dapat diperoleh lewat [3]
τL
JG = . (5)
θ
Nilai θ ini diukur pada ujung bebas yang diberi torsi τ.
115
4 Pertanyaan
1. Turunkan rumusan lengkungan batang dengan Persamaan (5).
2. Jelaskan apa yang dimaksud dengan rasio Poisson [4]?
3. Pelajari hasil-hasil yang diperoleh dalam Gambar 3 dan buat model empirik
kelengkungan batang sebagai fungsi dari G dan M.
1 1
G = 10×10 4 M =2 g M=8 g
G = 5×10 4
0.8 M = 12 g
0.8
G = 4×10 4
0.6 0.6
y y M = 16 g
0.2 0.2 M = 20 g
G = 2.5×10 4
M = 22 g
0 0
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1
x x
Gambar 3. Kelengkungan batang sebagai hasil rumusan yang diperoleh [5] untuk berbagai
nilai modulus geser (kiri) dan massa total batang (kanan).
4. Bandingkan hasil dalam Gambar 3 dengan perumusan dalam [6]. Jelaskan
perbedaan fenomena fisis yang dibahas dalam kedua rujukan tersebut.
5 Rujukan
1. Wikipedia contributors, "Young's modulus", Wikipedia, The Free Encyclopedia,
en:740068517, 18 Sept 2016 | 21:40.
2. Wikipedia contributors, "Shear modulus", Wikipedia, The Free Encyclopedia,
en:733816162, 10 Aug 2016 | 08:39.
3. Wikipedia contributors, "Torsion modulus", Wikipedia, The Free Encyclopedia,
en:740941587, 24 Sep 2016 | 09:11.
4. Wikipedia contributors, "Poisson's ratio", Wikipedia, The Free Encyclopedia,
en:742426408, 3 Oct 2016 | 17:05.
5. S. Viridi1, M. Abdullah, N. Amalia, "Two-dimension curvature of a wire: A simple
model using shear modulus concept", Sympsium Nanotechnologi, Denpasar,
Indonesia, 28-29 October 2016.
116
Sederhana
Dalam bagian ini disajikan contoh aplikasi metode Monte-Carlo [1] dalam C++ untuk
aliran fluks sederhana.
1 mcssf.cpp
/*
mcssf.cpp
Monte-Carlo implementation in simple flux flow
20160324
Create this program.
*/
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
// Verbose usage
if(argc < 4) {
cout << "Usage: " << pname << " ";
cout << "[N0 prob ofile]" << endl;
cout << "N0\tInitial number of particles" << endl;
cout << "prob\tDecaying probability" << endl;
cout << "ofile\tOutput file" << endl;
return 1;
}
117
118
// Generate Ne events
int Ne = N0 * 10;
for(int ie = 0; ie < Ne; ie++) {
// Show results
fout << ie << "\t";
fout << 1.0 * N / N0 << endl;
// Close file
fout.close();
2 plot-data.gps
# plot-data.gps
set term png
set output "data.png"
plot \
"data-050.txt" u 1:2 w p pt 4 ps 2.0 lc 1 t "p = 0.5", \
f1(x) t t1 lt 1 lw 2, \
"data-080.txt" u 1:2 w p pt 6 ps 2.5 lc 2 t "p = 0.8", \
f2(x) t t2 lt 2 lw 2
3 Pertanyaan
1. Ketik program mcssf.cpp, kompilasi
g++ mcsff.cpp -o mcsff
dan jalankan dengan cara
./mcsff 1000 0.50 data-050.txt
./mcsff 1000 0.80 data-080.txt
lalu, lanjutkan dengan mengetik script gnuplot plot-data.gps dan jalankan
gnuplot plot-dat.gps
sehingga diperoleh Gambar 1 berikut.
120
Gambar 3. Hasil simulasi aliran fluks dengan metode Monte-Carlo dan hasil fittingnya
menggunakan Gnuplot.
2. Lakukan variasi N0 dan prob saat memanggil program mcssf.cpp dan petakan nilai
prob ke persamaan
N (t ) = e − λt (1)
4 Rujukan
1. Wikipedia contributors, "Monte Carlo method", Wikipedia, The Free
Encyclopedia, en: 755048141, 15 Dec 2016 | 23:31.
Sparisoma Viridi, 201612200 dalam Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya
Catatan Penutup
diperbolehkan selama untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com
121
122
View publication stats
Sparisoma Viridi, Komputasi Fisika, Departemen Fisika, Institut Teknologi Bandung | Lisensi ITB 2016 | Penyebaran dalam bentuk aslinya diperbolehkan selama
untuk tujuan pendidikan dan tak-komersial. Modifikasi dan pembuatan karya turunan memerlukan ijin dari penulis | dudung@gmail.com