2.1 PENDAHULUAN
Untuk mendapatkan penyelesaian matematika yang menjabarkan model suatu persoalan nyata
bidang rekayasa, sering solusi yang dicari berupa suatu nilai variabel x sedemikian rupa
sehingga terpenuhi persamaan f(x) = 0 yang digunakan dalam model. Dalam beberapa kasus,
melalui faktorisasi f(x) = 0 dapat diperoleh penyelesaian seperti yang diinginkan; akan
tetapi, lebih banyak jabaran persamaan dalam model mempunyai bentuk yang rumit, sehingga
teknik analisis matematika murni tidak dapat memberikan solusi.
Contoh
Sebuah bola baja berjari-jari 1cm dibakar merata sampai mencapai temperatur 100C. Bola ini
kemudian disimpan di dalam ruang pendingin dengan temperatur 0C. Dengan anggapan ada
perambatan panas, maka konduksi panas dapat dinyatakan dalam persamaan fungsi untuk
( )
temperatur T di pusat bola setelah t detik sebagai : T(t) = 100 sin n (n ) exp 2n t
8
n =1
(2.1)
1
i adalah akar positif persamaan : cos =
2
(2.2)
Untuk mencari T(t) pada t tertentu di tengah bola perlu dicari harga dari persamaan
(2.2); dan penyelesaian dengan cara analitik tidak berguna.
Tanya: Apakah yang dimaksud dengan menentukan x sedemikian rupa sehingga terpenuhi
persamaan f(x) = 0 ?
Jawab: Secara geometri ini berarti mencari suatu titik dengan f(x) tepat memotong absis x,
sehingga f(x) = 0.
Jika dianggap f(x) sesungguhnya memotong absis x, maka dapat dicari suatu interval [a,b],
sedemikian rupa sehingga f(a) dan f(b) mempunyai tanda berbeda (Gambar 2.1).
f(a)
y = f(x)
b x
a
Gambar 2.1
Tinjauan interval [a,b] dalam
f(b) penentuan akar fungsi f(x).
Metode numerik untuk mendapatkan harga x untuk f(x) = 0 seperti uraian di pasal 2.1 disebut
METODE BISECTION. Tahap pertama proses adalah menetapkan nilai sembarang a dan b
sebagai batas segmen nilai fungsi yang dicari. Batasan a dan b memberikan harga bagi fungsi
f(x) untuk x = a dan x = b. Langkah selanjutnya adalah memeriksa apakah f(a) f(b) < 0.
Apabila terpenuhi syarat tersebut, berarti terdapat akar fungsi dalam segmen tinjauan. Jika tidak
demikian, kembali harus ditetapkan nilai a dan b sedemikian rupa sehingga terpenuhi ketentuan
perkalian f(a) f(b) < 0.
Dengan rumusan m = (a+b)/2, diperiksa apakah nilai mutlak f(m) < 10-6 (batas simpangan
kesalahan). Jika benar, nilai x = m adalah solusi yang dicari. Jika tidak terpenuhi, ditetapkan
batasan baru dengan mengganti nilai b = m apabila f(a)*f(m) < 0, dan mengganti a = m bila
f(a) f(m) > 0; proses menemukan m baru dilakukan seperti prosedur yang telah dijelaskan.
y
f(a)
[f(a) x f(m)<0]
(b=m) b x
a (a=m)
[f(a) x f(m)>0] Gambar 2.2
f(b Penentuan nilai tengah m
interval metode Bisection
Metode Bisection adalah salah satu kelas metode Pengelompokan, karena prosedur untuk
mendapatkan nilai x untuk f(x) = 0 dilakukan melalui pendekatan kelompok akar. Metode ini
tidak sepenuhnya memanfaatkan data f(x) bagi penentuan nilai x. Misalnya, tidak
digunakannya ukuran relatif f(a) dan f(b), karena umumnya jika f(a) < f(b) dalam nilai
mutlaknya, maka akar persamaan akan terletak lebih dekat ke f(a), seperti dijelaskan di Gambar
2.2. Salah satu cara efektif mendapatkan nilai m ini adalah menghubungkan f(a) dan f(b)
dengan garis lurus dan perpotongan garis ini dengan absis x merupakan nilai m, seperti
dijelaskan pada Gambar 2.3.
f(a)
b
a m
Gambar 2.3
f(b Penentuan nilai m dari
perpotongan garis lurus
melalui dua titik.
Proses dengan cara ini memberikan perhitungan yang lebih cepat dibandingkan dengan
metode Bisection, walaupun pada kasus yang khusus dapat juga terjadi proses cantelan, baik
pada a ataupun b, yang memperlambat perhitungan.
Pada algoritma, proses memang dihentikan jika dicapai nilai mutlak f(m) < 10-6, tetapi
untuk kecermatan hasil, kriteria ini belum cukup. Dengan memperhatikan dua sifat kurva
seperti pada Gambar 2.4, maka syarat kecermatan yang tepat adalah (a)
y
f(a)
y
f(a)
b x b x
a a
f(b)
f(b)
(a). harga mutlak [abaru - bbaru ] < 10-6 (b). harga mutlak f (m) < 10-6
Gambar 2.4 Syarat lengkap kecermatan.
x
/2 3/2
Gambar 2.5 Fungsi periodik y = tan x diskontinu pada kelipatan ganjil /2.
Dalam mempersiapkan program sumber, algoritma dijabarkan dalam bentuk bagan alir yang
dapat dilihat pada dua bagan berikut ini.
DEFINISIKAN FUNGSI
Baca
a, b, tol,
iter_max
Iter = 0
Fa = F(a)
Fb = F(b)
Fa * Fb > 0 ya
tidak
Tulis
Fa * Fb > 0
iter = iter +1
m = (a + b)/2 1
Fm = F(m)
Tidak
Fa * Fm < 0
ya tidak
b=m a=m
Fb = Fm Fa = Fm
Tulis hasil
m, F(m)
SELESAI
MULAI
DEFINISIKAN
FUNGSI
Baca
a, b, tol,
iter_max
Iter = 0
Fa = F(a)
Fb = F(b)
Fa * Fb > 0 ya
tidak
Tulis
Fa*Fb > 0
iter = iter +1
m = a - Fb*(b-a)
(Fb - Fa) 1
Fm = F(m)
|m-a|<tol
ya
iter>iter_max
tidak
Fa*Fm<0
ya tidak
b=m a=m
Fb = Fm Fa = Fm
Tulis hasil
m, F(m)
SELESAI
Contoh
Untuk mendapatkan akar persamaan x3 - 3x - 20 = 0, langkah pertama yang dilakukan adalah
mengubah persamaan dalam bentuk f(x) = x - g(x). Perubahan ini dapat dilakukan melalui
empat cara :
(i). x - (3x + 20)1/3 = 0
(ii). x - (x3 - 20)/3 = 0
(iii). x - 20/(x2 - 3) = 0
(iv).x - (3 + 20/x)1/2 = 0
Dengan menggunakan bentuk pertama dapat dinyatakan rumusan :
x k+1 = (3xk + 20)1/3 , k = 0,1,2,....
dan dengan perkiraan awal x0 = 5, diperoleh
x0 = 5
x1 = (3 * 5 + 20)1/3 = 3.2771
x2 = (3 * 3.2771 + 20)1/3 = 3.1008
x3 = 3.0830
x4 = 3.0811 ; x5 = 3.0809
x6 = 3.0809 ; x7 = 3.0809
Karena nilai x sudah konstan pada harga 3.0809, dilakukan pemeriksaan harga f(x). Diperoleh
f(3.0809) = 0.0010. Jika simpangan kesalahan ini dapat diabaikan, maka harga x = 3.0809
merupakan solusi.
Metode iterasi yang diuraikan ini disebut CARA PENDEKATAN BERURUT. Secara
geometri yang dilakukan adalah menemukan perpotongan dua kurva y = x dan y = g(x), seperti
pada Gambar 2.6.
Terlihat mudah mendapatkan akar persamaan dengan proses tersebut, bila dipahami benar
y y=x
y = g(x)
x
Gambar 2.6
Geometri fungsi f(x) = x - g(x)
perilaku fungsi. Jika diamati tiga cara penulisan f(x) sebagai x - g(x) :
(ii). x - (x - 20) / 3 = 0
(iii). x - 20/ (x - 3) = 0
(iv).x - (3 + 20/x)1/2 = 0, dan menggunakan perkiraan awal x0 = 5,
maka seri besaran xk , k = 0,1, 2, , memberikan hasil seperti tercantum dalam Tabel 2.1.
Dari contoh hitungan dapat dilihat bahwa cara iterasi tidak selalu dapat digunakan. Guna
mengetahui pada awal proses bahwa metode ini dapat dipakai, perlu diperiksa bentuk fungsi.
Sajian grafik bentuk fungsi cara ii - iv adalah seperti pada Gambar 2.7.
8
3
g(x)=(x -20)/3
7
y=x
6
0.5
g(x)=(3+20/x)
5
2 2
g(x)=20/(x -3)
1
0
0 1 2 3 4 5 6 7 8
-1
Gambar 2.7
Sajian fungsi y = g(x) cara (iii) dan (iv)
-2
Dengan meneliti grafik tampak bahwa bagi cara ii dan iii, garis singgung y = g(x) lebih
tajam daripada garis singgung y = x dekat nilai akar; sedangkan pada cara i dan cara iv, garis
singgung y = g(x) tidaklah setajam garis singgung y = x dekat nilai x = 3. Secara matematika,
ini berarti nilai absolut g (x) < 1 di dekat nilai akar. Dengan demikian, konvergensi dari solusi
metode iterasi dapat dilacak dari perilaku turunan pertama fungsi.
Perhatikan gambar 2.8. Turunan fungsi g(x) berada pada nilai 0 < g(x) < 1 untuk jaminan
hasil iterasi konvergen.
y
y=x
y=g(x)
Dalam mempersiapkan program sumber, algoritma dijabarkan dalam bentuk bagan alir berikut,
dan bagan alir metode ini dapat dilihat pada Bagan 2.3.2.1.
MULAI
DEFINISIKAN
FUNGSI
Baca
xo, tol,
iter_max
Iter = 0
iter = iter +1
xb = G(xo)
|xb-xo|<tol
ya
iter>iter_max
Tidak
xo = xb
Tulis hasil
xb, F(xb)
Stop
Metode yang lebih baik dalam memilih g(x) adalah dengan membuat garis singgung dari f(x)
untuk nilai x yang dipilih, dan dengan menggunakan besaran x dari perpotongan garis singgung
terhadap absis sehingga diperoleh nilai x baru. Metode ini diperlihatkan pada Gambar 2.9.
garis singgung
xk+1 x
xk
f(x)
Metode ini dikenal dengan METODE NEWTON-RAPHSON dan merupakan salah satu
cara yang paling dikenal dalam metode penyelesaian fungsi f(x) = 0. Keuntungan cara ini
adalah sifat konvergensi kuadratik dalam proses iterasi, karena terjadinya koreksi digit ganda di
setiap proses.
Contoh
f(x) = x - 3x - 3x - 20 , maka f(x) = 3x - 3
Dengan demikian x k+1 = x k - ( xk - 3xk - 20) / (3xk - 3).
Perkiraan awal x0 = 5
x0 = 5 x3 = 3.0859
x1 = 3.75 x4 = 3.0809
x2 = 3.2018 x5 = 3.0809
Gambar 2.10
xk xk+1 xk+2 Penentuan nilai turunan fungsi dengan
menggunakan metode Secant.
Pada Gambar 2.10, jika nilai xk dan xk+1 telah didapat, maka :
x k +2 x k +1 x k +1 x k
= atau
f (x k +1 ) ff (x k ) f (x k +1 )
x k +1 x k
x k +2 = x k +1 f (x k +1 ) (2.10)
f (x k +1 ) f (x k )
Penentuan nilai turunan fungsi dengan cara ini disebut metode SECANT.
MULAI
DEFINISIKAN
FUNGSI
Baca
xo, tol,
iter_max
Iter = 0
iter = iter +1
Fx=F(xo)
F1x=F'(xo)
xb =xo-Fx/F1x
|xb-xo|<tol
ya
iter>iter_max
Tidak
xo = xb
Tulis hasil
xb, F(xb)
SELESAI
MULAI
DEFINISIKAN
FUNGSI
Baca
xo, x1, tol,
iter_max
Iter = 0
iter = iter +1
xb =x1- f(x1)*(x1-xo)
[f(x1)-f(xo)]
|xb-xo|<tol
ya
iter>iter_max
Tidak
xo = xb
Tulis hasil
xb, F(xb)
SELESAI
Dalam hal tidak adanya petunjuk dalam penetapan nilai awal, maka usaha berikut ini dapat
dilakukan :
Membuat grafik fungsi, lalu diidentifikasikan segmen fungsi yang memotong absis.
Membuat tabel harga x and f(x), lalu diidentifikasi nilai x pada perubahan tanda f(x).
Dari rancangan algoritma atau bagan alir, program komputer dapat dikembangkan melalui
pembuatan program sumber di dalam bahasa tingkat tinggi PASCAL dan C++. Secara umum
terdapat enam kategori utama dari pernyataan dalam program sumber, yaitu :
1. Pernyataan bagi arsip atau file dan record yang akan diproses oleh komputer.
2. Pernyataan untuk data di luar arsip, seperti untuk membuat judul yang perlu bagi
dokumentasi.
3. Pernyataan memindahkan data pada satu lokasi memori ke lokasi memori lainnya dalam
memori utama komputer.
4. Pernyataan untuk melakukan operasi aritmatik yang disimpan dalam memori utama.
5. Pernyataan logika : proses urut, perbandingan, dan iterasi.
6. Pernyataan membaca data dari memori dampingan ke memori utama atau menuliskan data
dari memori utama ke memori dampingan.
Pemahaman lebih jauh dalam pemrogramana dapat dibaca pada buku-buku komputer.
Lampiran A buku ini mengulas secara umum prosedur pemrograman dalam bahasa TURBO
PASCAL dan C++.
// Program 1.1a
// Metode Bisection
#include <stdio.h>
#include <math.h>
/* Daftar Variable
a = batas bawah
b = batas atas
tol = toleransi
max_iter = jumlah iterasi maksimum */
float a,m,b,F_a,F_m,F_b,tol;
int max_iter;
float f(float x)
{
return tan(x) - x - 0.5;
}
void main()
{
int it;
float epsilon;
it = 0;
F_a = f(a);
F_b = f(b);
if(F_a * F_b > 0) printf(" Nilai F(a) x F(b) > 0\n");
else
{
printf("It. a m b f(a) f(b)");
printf(" abs[f(b)-f(a)]/2\n");
do
{
it = it + 1;
m = (a + b) / 2;
F_m = f(b);
printf("%3d %8.5f %8.5f %8.5f %8.5f %8.5f %8.2e\n",
it,a,m,b,F_a,F_b,fabs(F_b-F_a)/2);
epsilon = fabs(m-a);
if(F_a * F_m <= 0) { b = m; F_b = F_m; }
else { a = m; F_a = F_m; }
} while(it <= max_iter && epsilon > tol);
if(it<=max_iter)
{
printf("Toleransi terpenuhi\n");
printf("Hasil akhir = %g\n",m);
}
else printf("Toleransi tidak terpenuhi\n");
}
}
{ Program 1.1b
Metode Bisection
Daftar Variable
a = batas bawah
b = batas atas
tol = toleransi
max_iter = jumlah iterasi maksimum }
Var
a,m,b,F_a,F_m,F_b,tol : real;
max_iter,it : integer;
epsilon : real;
Begin
write('Batas bawah = '); read(a);
write('Batas atas = '); read(b);
write('Toleransi = '); read(tol);
write('Jumlah iterasi maksimum = '); read(max_iter);
it := 0;
F_a := f(a);
F_b := f(b);
if (F_a * F_b > 0) then writeln(' Nilai F(a) x F(b) > 0')
else
Begin
write('It. a m b f(a) f(b)');
writeln(' abs[f(b)-f(a)]/2');
epsilon := tol+1;
Begin
writeln('Toleransi terpenuhi');
writeln('Hasil akhir = ',m:9:7);
End
else writeln('Toleransi tidak terpenuhi');
End;
End.
Toleransi terpenuhi
Hasil akhir = 0.975017
Dari hasil eksekusi ini didapat hasil x = 0.975017. Hasil ini tercapai setelah iterasi ke-24.
Program 2.6.2.1 dan 2.6.2.2 menggunakan algoritma metode Regula Falsi untuk menyelesaikan
persamaan non-linear. Secara umum program memiliki bentuk yang sama dengan metode
Bisection kecuali pada perhitungan nilai m. Program kembali akan dicoba untuk menyelesaikan
persamaan :
tan(x) - x - 0.5 = 0
// Program 1.2a
// Metode Regula Falsi
#include <stdio.h>
#include <math.h>
/* Daftar Variable
a = batas bawah
b = batas atas
tol = toleransi
max_iter = jumlah iterasi maksimum */
float a,m,b,F_a,F_m,F_b,tol;
int max_iter;
float f(float x)
{
return tan(x) - x - 0.5;
}
void main()
{
int it;
float epsilon;
it = 0;
F_a = f(a);
F_b = f(b);
if(F_a * F_b > 0) printf(" Nilai F(a) x F(b) > 0\n");
else
{
printf("It. a m b f(a) f(b)");
printf(" abs[f(b)-f(a)]/2\n");
do
{
it = it + 1;
m = a - F_a * (b - a) / (F_b - F_a);
F_m = f(m);
printf("%3d %8.5f %8.5f %8.5f %8.5f %8.5f %8.2e\n",
it,a,m,b,F_a,F_m,fabs(F_b-F_a)/2);
epsilon = fabs(m-a);
if(F_a * F_m <= 0) { b = m; F_b = F_m; }
else { a = m; F_a = F_m; }
} while(it <= max_iter && epsilon > tol);
if(it<=max_iter)
{
printf("Toleransi terpenuhi\n");
printf("Hasil akhir = %g\n",b);
}
else printf("Toleransi tidak terpenuhi\n");
}
}
Daftar Variable
a = batas bawah
b = batas atas
tol = toleransi
max_iter = jumlah iterasi maksimum }
Var
a,m,b,F_a,F_m,F_b,tol : real;
max_iter,it : integer;
epsilon : real;
Begin
write('Batas bawah = '); read(a);
write('Batas atas = '); read(b);
write('Toleransi = '); read(tol);
write('Jumlah iterasi maksimum = '); read(max_iter);
it := 0;
F_a := f(a);
F_b := f(b);
if (F_a * F_b > 0) then writeln(' Nilai F(a) x F(b) > 0')
else
Begin
write('It. a m b f(a) f(b)');
writeln(' abs[f(b)-f(a)]/2');
epsilon := tol+1;
while((it <= max_iter) and (epsilon > tol))
do
Begin
it := it + 1;
m := a - F_a * (b - a)/(F_b - F_a);
F_m := f(m);
write(it:3,' ',a:8:5,' ',m:8:5,' ',b:8:5,' ');
writeln(F_a:8:5,' ',F_m:8:5,' ',abs(F_b-F_a)/2:4);
epsilon := abs(m-a);
if(F_a * F_m <= 0) Then
Begin
c := m;
F_b := F_m
End
else
Begin
a := m;
F_a := F_m
End;
End;
if(it<=max_iter) Then
Begin
writeln('Toleransi terpenuhi');
writeln('Hasil akhir = ',m:9:7);
End
else writeln('Toleransi tidak terpenuhi');
End;
End.
Eksekusi program dilakukan dengan menggunakan data yang sama dengan metode Bisection.
Hasil eksekusi program adalah sebagai berikut :
Batas bawah = 0
Batas atas = 1
Toleransi = 0.0000001
Jumlah iterasi maksimum = 30
Toleransi terpenuhi
Hasil akhir = 0.975017
Dari hasil eksekusi ini didapat hasil x = 0.975017 yang tercapai setelah iterasi ke-7. Dari hasil
ini terlihat bahwa dengan menggunakan data yang sama sebagaimana yang digunakan pada
metode Bisection, konvergensi hasil perhitungan akan lebih cepat dicapai.
Program berikut menggunakan algoritma metode Iterasi untuk menyelesaikan persamaan non-
linear. Program akan dicoba untuk menyelesaikan persamaan :
ex + x2 - 3x - 2 =0 atau dalam bentuk lain x - (ex + x2 - 2)/3 = 0
Dari bentuk ini diambil fungsi
g(x) = (ex + x2 -2)/3
// Program 1.3a
// Metode Iterasi
#include <stdio.h>
#include <math.h>
/* Daftar Variable
x0 = harga awal
tol = toleransi
max_iter = jumlah iterasi maksimum */
float x0,tol;
int max_iter;
float g(float x)
{
return (x*x + exp(x) - 2)/3;
}
void main()
{
int it;
float epsilon,xb;
printf("Harga awal = "); scanf("%f",&x0);
printf("Toleransi = "); scanf("%f",&tol);
printf("Jumlah iterasi maksimum = "); scanf("%d",&max_iter);
it = 0;
printf("It. x g(x) f(x)\n");
do
{
it = it + 1;
xb = g(x0);
epsilon = fabs(xb-x0);
printf("%3d %8.5f %8.5f %8.2e\n",it,x0,xb,epsilon);
x0 = xb;
} while(it <= max_iter && epsilon > tol);
if(it<=max_iter)
{
printf("Toleransi terpenuhi\n");
printf("Hasil akhir = %g\n",xb);
}
else printf("Toleransi tidak terpenuhi\n");
}
{ Program 1.3b
Metode Iterasi
Daftar Variable
x0 = harga awal
tol = toleransi
max_iter = jumlah iterasi maksimum }
Var
x0,xb,tol : real;
max_iter,it : integer;
epsilon : real;
Begin
write('Harga awal = '); read(x0);
write('Toleransi = '); read(tol);
write('Jumlah iterasi maksimum = '); read(max_iter);
it := 0;
writeln('It. x g(x) f(x)');
epsilon := tol+1;
while((it <= max_iter) and (epsilon > tol))
do
Begin
it := it + 1;
xb := g(x0);
epsilon := abs(xb-x0);
writeln(it:3,' ',x0:8:5,' ',xb:8:5,' ',epsilon:4);
x0 := xb;
End;
if(it<=max_iter) Then
Begin
writeln('Toleransi terpenuhi');
writeln('Hasil akhir = ',xb:9:7);
End
else writeln('Toleransi tidak terpenuhi');
End.
Harga awal = 1
Toleransi = 0.0000001
Jumlah iterasi maksimum = 20
It. x g(x) f(x)
1 1.00000 0.57276 4.27e-01
2 0.57276 0.03374 5.39e-01
3 0.03374 -0.32152 3.55e-01
4 -0.32152 -0.39053 6.90e-02
5 -0.39053 -0.39026 2.63e-04
6 -0.39026 -0.39027 9.12e-06
7 -0.39027 -0.39027 3.28e-07
8 -0.39027 -0.39027 2.98e-08
Toleransi terpenuhi
Hasil akhir = -0.390272
Dari hasil eksekusi ini didapat hasil x = -0.390272 yang tercapai setelah iterasi ke-8.
// Program 1.4a
// Metode Newton-Raphson
#include <stdio.h>
#include <math.h>
/* Daftar Variable
x0 = harga awal
tol = toleransi
max_iter = jumlah iterasi maksimum */
float x0,tol;
int max_iter;
float f(float x)
{
return x*x - 3*x + exp(x) - 2;
}
float f1(float x)
{
return 2*x - 3 + exp(x);
}
void main()
{
int it;
float epsilon,xb;
it = 0;
printf("It. x f(x) epsilon\n");
do
{
it = it + 1;
xb = x0 - f(x0)/f1(x0);
epsilon = fabs(xb-x0);
printf("%3d %8.5f %8.5f %8.2e\n",it,xb,f(xb),epsilon);
x0 = xb;
} while(it <= max_iter && epsilon > tol);
if(it<=max_iter)
{
printf("Toleransi terpenuhi\n");
printf("Hasil akhir = %g\n",xb);
}
else printf("Toleransi tidak terpenuhi\n");
}
{ Program 1.4b
Metode Newton-Raphson
Daftar Variable
x0 = harga awal
tol = toleransi
max_iter = jumlah iterasi maksimum }
Var
x0,xb,tol : real;
max_iter,it : integer;
epsilon : real;
Begin
write('Harga awal = '); read(x0);
write('Toleransi = '); read(tol);
write('Jumlah iterasi maksimum = '); read(max_iter);
it := 0;
writeln('It. x f(x) epsilon');
epsilon := tol+1;
while((it <= max_iter) and (epsilon > tol))
do
Begin
it := it + 1;
xb := x0 - f(x0)/f1(x0);
epsilon := abs(xb-x0);
writeln(it:3,' ',xb:8:5,' ',f(xb):8:5,' ',epsilon:4);
x0 := xb;
End;
if(it<=max_iter) Then
Begin
writeln('Toleransi terpenuhi');
writeln('Hasil akhir = ',xb:9:7);
End
else writeln('Toleransi tidak terpenuhi');
End.
Toleransi terpenuhi
Hasil akhir = -0.390272
Dari hasil eksekusi ini didapat hasil x = -0.390272 yang tercapai setelah iterasi ke-4. Dapat
dilihat bahwa untuk kasus ini penggunaan metode Newton-Rapson memberikan hasil yang
lebih cepat daripada metode Iterasi.
Program berikut menggunakan algoritma metode Secant untuk menyelesaikan persamaan non-
linear. Program kembali akan dicoba untuk menyelesaikan persamaan :
F(x) = ex + x2 - 3x - 2 = 0
// Program 1.5a
// Metode Secant
#include <stdio.h>
#include <math.h>
/* Daftar Variable
x0 = harga awal
x1 = harga kedua
tol = toleransi
max_iter = jumlah iterasi maksimum */
float x0,x1,tol;
int max_iter;
float f(float x)
{
return x*x - 3*x + exp(x) - 2;
}
void main()
{
int it;
float epsilon,xb;
it = 0;
printf("It. x f(x) epsilon\n");
do
{
it = it + 1;
xb = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
epsilon = fabs(xb-x0);
printf("%3d %8.5f %8.5f %8.2e\n",it,xb,f(xb),epsilon);
if(it<=max_iter)
{
printf("Toleransi terpenuhi\n");
printf("Hasil akhir = %g\n",xb);
}
else printf("Toleransi tidak terpenuhi\n");
}
Daftar Variable
x0 = harga awal
x1 = harga kedua
tol = toleransi
max_iter = jumlah iterasi maksimum }
Var
x0,x1,xb,tol : real;
max_iter,it : integer;
epsilon : real;
Begin
write('Harga awal = '); read(x0);
write('Harga kedua = '); read(x1);
write('Toleransi = '); read(tol);
write('Jumlah iterasi maksimum = '); read(max_iter);
it := 0;
writeln('It. x f(x) epsilon');
epsilon := tol+1;
while((it <= max_iter) and (epsilon > tol))
do
Begin
it := it + 1;
xb := x1 - f(x1)*(x1-x0)/(f(x1) - f(x0));
epsilon := abs(xb-x1);
writeln(it:3,' ',xb:8:5,' ',f(xb):8:5,' ',epsilon:4);
x0 := x1;
x1 := xb;
End;
if(it<=max_iter) Then
Begin
writeln('Toleransi terpenuhi');
writeln('Hasil akhir = ',xb:9:7);
End
else writeln('Toleransi tidak terpenuhi');
End.
Toleransi terpenuhi
Hasil akhir = -0.390272
Dari hasil eksekusi ini didapat hasil x = -0.390272, sama dengan hasil yang didapat dengan
menggunakan metode iterasi dan metode Newton-Raphson. Hasil ini tercapai setelah iterasi ke-
6. Walaupun konvergensi hasil perhitungan lebih lambat dibandinggkan dengan penggunaan
metode Newton-Raphson, namun metode ini memiliki kelebihan karena tidak memerlukan
penentuan turunan fungsi.
Persamaan non-linear sebagai model matematika bagi solusi masalah rekayasa sipil dengan
menggunakan metode numerik merupakan salah satu alternatif prosedur pemecahan yang
digunakan apabila tidak dimungkin perolehan bentuk closed form dari pemodelan.
Lima contoh bentuk penyelesaian numerik persamaan non-linear di dalam bidang truktur,
geoteknik, sumber tenaga air, transportasi atau jalan raya, dan manajemen konstruksi berikut ini
bertujuan untuk memberi pemahaman mengenai penggunaan terapan metode numerik untuk
mencari solusi nyata bagi suatu permasalahan.
Frekuensi alami dari getaran balok uniform yang terjepit pada salah satu ujungnya dan bebas
pada ujungnya yang lain dapat dicari dari persamaan berikut :
cos (l) cosh(l) + 1 = 0 (a)
dengan
= 2/EI (b)
l = panjang elemen balok = 1 meter
= berat jenis elemen balok = 2.4 x 104
= frekuensi pribadi balok (sec-1)
EI = kekakuan lentur balok = 2.5 x 106
Tetapkan nilai dari persamaan (a), kemudian gunakan nilai untuk menentukan frekuensi
alami balok. Gunakan metode Bisection untuk mencari akar persamaan (a).
Penyelesaian
Dengan memasukkan nilai l = 1 ke dalam persamaan (a) : cos () cosh() + 1 = 0
Tulis kembali persamaan dengan variabel bebas x : cos (x) cosh(x) + 1 = 0
Selanjutnya digunakan program 2.6.1 dengan memodifikasi bagian definisi fungsi menjadi :
return cos(x) * cosh(x) + 1; (C++)
atau f := cos(x) * (exp(x) + exp(-x)) / 2 + 1; (Pascal)
Maka, eksekusi program dengan batasan interval [7,8] memberikan hasil eksekusi program
sebagai berikut :
Batas bawah = 7
Batas atas = 8
Toleransi = 0.0000001
Jumlah iterasi maksimum = 30
Toleransi terpenuhi
Hasil akhir = 7.8547575
Harga yang didapat dimasukkan ke dalam persamaan (b) untuk mendapatkan nilai frekuensi
alami balok :
= 2/EI
EI * 2.5 *10 6 * 7.8547575
= =
2.4 *10 4
= 28.6 sec-1
R2
R= +M (a)
(R 2
+ T2 )
1/2
T dengan
R = jari-jari kurva jalan
T = jarak tangensial
M = 273.935 m
M = ordinat tengah
= 73.773 m
Hitunglah berapa nilai R dengan mengguna-
R kan metode iterasi.
Penyelesaian
Dengan memasukkan nilai-nilai yang diketahui ke persamaan (a) didapat :
R2
R= + 73.773.773
(R 2 + 273.935 2 )
1/2
Toleransi terpenuhi
Hasil akhir = 127.8193231
Koefisien gesek untuk aliran turbulen dalam sebuah pipa diberikan dalam persamaan berikut :
1 e 9.35
= 1.14 2.0 * log10 + (a)
f D R f
e
dengan
f = koefisien gesek aliran
Re = bilangan Reynolds
e = kekasaran pipa
D = diameter pipa
Hitunglah nilai koefisien gesek untuk dua kasus berikut ini :
D = 0.1 m e = 0.0025 Re = 3 x 104
D = 0.1 m e = 0.0015 Re = 5 x 106
Penyelesaian
Tulis kembali persamaan dalam bentuk :
2
e 9.35
f = 1.14 - 2.0 * log10 + , maka
D
R e f
metode yang paling cocok digunakan adalah metode iterasi.
Kasus (i)
Dengan memasukkan nilai-nilai yang diketahui ke dalam persamaan akan didapat :
2
0.0025 9.35
f = 1.14 - 2.0 * log10 +
0.1 3 *10 * f
4
2
0.0003117
f = 1.14 - 2.0 * log10 0.025 +
f
Toleransi terpenuhi
Hasil akhir = 0.0541142
Kasus (ii)
Dengan memasukkan nilai-nilai yang diketahui ke dalam persamaan akan didapat :
2
0.0015 9.35
f = 1.14 - 2.0 * log10 +
0.1 5 *10 * f
6
2
0.00000187
f = 1.14 - 2.0 * log10 0.015 +
f
Tulis fungsi dalam variabel bebas x akan diperoleh persamaan berikut:
2
0.00000187
x = 1.14 - 2.0 * log10 0.015 +
x
Dengan program 2.6.3, dengan memodifikasi bagian definisi fungsi, diperoleh hasil
eksekusi program berikut :
Harga awal = 1
Toleransi = 0.0000001
Jumlah iterasi maksimum = 20
Toleransi terpenuhi
Hasil akhir = 0.0436334
Untuk menghitung kedalaman pemancangan dinding turap baja dapat digunakan rumusan
berikut:
KP D3 - KA (H + D)3 = 0 (a)
dengan
KA = koefisien tegangan aktif tanah
= tan2(450 - /2)
KP = koefisien tegangan pasif tanah
= tan2(450 + /2 )
Ka H
H = tinggi dinding turap
D = kedalaman pemancangan
= sudut geser dalam tanah
D Kp
Dengan menggunakan metode Newton-Raphson,
hitunglah kedalaman pemancangan dinding turap bila
diketahui H = 15 m dan = 280.
Penyelesaian
Hitung KA dan KP :
KA = tan2(45 - /2) = tan2(45 - 28/2); KP = tan2(45 + /2) = tan2(45 + 28/2)
= 0.361 = 2.770
Toleransi terpenuhi
Hasil akhir = 15.4260489
Kedalaman pemancangan yang diperlukan adalah : D = 15.426 m
Dari suatu perhitungan tentang kebutuhan akan produksi optimal suatu komponen struktur
didapat persamaan biaya yang dibutuhkan untuk pengadaan produksi dalam satu hari sebagai
berikut :
C = 13000 N-1 + 158.11 N-0.5 + N + 0.0025 N2
dengan
C = biaya per hari
N = jumlah komponen yang diproduksi
Hitunglah jumlah optimal komponen yang diproduksi sehingga biaya produksi menjadi
minimum.
Penyelesaian
Biaya minimum turunan pertama dari persamaan biaya harus nol.. Ini berarti :
C (N) = - 13000 N-2 - 79.055 N-1.5 + 1 + 0.005 N = 0
Nyatakan kembali persamaan dalam varibel bebas x :
- 13000 x -2 - 79.055 x -1.5 + 1 + 0.005 x = 0
Maka, menghitung akar persamaan dengan program 1.5 setelah modifikasi pada definisi
fungsi adalah:
return -13000 /(x * x) - 79.055 / (x * sqrt(x)) + 1 + 0.005 * x; (C++)
f : = -13000 /(x * x) - 79.055 / (x * sqrt(x)) + 1 + 0.005 * x; (Pascal)
Toleransi terpenuhi
Hasil akhir = 96.4122577