Professional Documents
Culture Documents
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 2 t n 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). y
f(a)
y = f(x)
b
x Gambar 2.1 Tinjauan interval [a,b] dalam penentuan akar fungsi f(x).
a
f(b)
Bab II hal. 1
Penyelesaian Numerik Persamaan Non-Linear Dengan pembatasan interval ini, secara cermat dapat dicari nilai x = yang memberikan nilai f() = 0, sebagai berikut : 1. Bagi dua interval [a,b] dan evaluasi nilai f(x) pada titik tengah interval. 2. Apabila f(m) = 0 berarti x = m; bila tidak, dicari posisi nilai m apakah berada pada interval [a,m] atau interval [m,b]; yaitu dengan memeriksa perbedaan tanda : jika f(a) dan f(m) berbeda tanda, berarti di [a,m] jika f(a) dan f(m) mempunyai tanda sama, berarti di [m,b]. Proses pembagian sub-interval dapat diulangi sampai ditemukan nilai yang memberikan f() = 0. Gambar 2.2 menjelaskan proses pembagian sub-interval.
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. Metode Numerik Dalam Ilmu Rekayasa Sipil Bab II hal. 2
Penyelesaian Numerik Persamaan Non-Linear Penetapan m ini dikenal dengan cara REGULA FALSI dan algoritmanya sama seperti metode Bisection, kecuali mengganti penentuan m dengan rumusan :
(b a) f(b) m=a f(b) f(a)
f(a)
a m
b Gambar 2.3 Penentuan nilai m dari perpotongan garis lurus melalui dua titik.
f(b
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 a f(b) f(b) (a). harga mutlak [abaru - bbaru ] < 10-6 (b). harga mutlak f (m) < 10-6 x a b x
Bab II hal. 3
Penyelesaian Numerik Persamaan Non-Linear Untuk menghindari masalah yang mungkin terjadi bagi perilaku persamaan yang tidak dapat dilacak, perlu pembatasan tinjauan interval sesuai dengan sifat fungsi. Hal ini penting dalam teknik numerik untuk memperoleh solusi nyata. Sebagai penjelasan, jika cot x = 1/(2x). yang bila akan dicari besaran x persamaan ini, bentuk persamaan diubah menjadi f(x) = tan x - 2x = 0, (2.3) maka dengan mengabaikan akar x = 0 yang bukan solusi persamaan dasar, terlihat bahwa metode Bisection atau Regula Falsi tidak akan memberikan solusi. Hal ini perlu disadari bahwa fungsi f(x) bukan fungsi kontinu untuk nilai kelipatan ganjil dari /2, seperti dijelaskan di Gambar 2.5. y y=tanx y=2x
x
/2 3/2
Gambar 2.5 Fungsi periodik y = tan x diskontinu pada kelipatan ganjil /2. 2.2.1 Algoritma Program Algoritma program untuk metode Bisection a). Tentukan a, b, toleransi, dan jumlah iterasi maksimum. b). Periksa apakah f(a) x f(b) > 0; jika ya, keluar dari progam karena pada selang yang diberikan tidak terdapat akar persamaan. c). Hitung nilai m = (a + b)/2 d). Jika nilai mutlak (b-a) < toleransi, tuliskan m sebagai hasil perhitungan, dan akhiri program; jika tidak, lanjutkan ke langkah berikutnya. e). Jika jumlah iterasi > iterasi maksimum, akhiri program. f). Jika f(a) x f(m) < 0, maka b = m; jika tidak, a = m. g). Kembali ke langkah (c). Algoritma program untuk metode Regula Falsi a). Tentukan a, b, toleransi, dan jumlah iterasi maksimum. b). Periksa apakah f(a) x f(b) > 0; jika ya, keluar dari progam karena pada selang yang diberikan tidak terdapat akar persamaan. c). Hitung nilai m = a - f(b) x (b - a) / [f(b) - f(a)]. d). Jika nilai mutlak (m-a) < toleransi, tuliskan m sebagai hasil perhitungan, dan akhiri program; jika tidak, lanjutkan ke langkah berikutnya.
Bab II hal. 4
Penyelesaian Numerik Persamaan Non-Linear e). Jika jumlah iterasi > iterasi maksimum, akhiri program. f). Jika f(a) x f(m) < 0, maka b = m; jika tidak, a = m g). Kembali ke langkah (c). 2.2.2 Bagan Alir Program Dalam mempersiapkan program sumber, algoritma dijabarkan dalam bentuk bagan alir yang dapat dilihat pada dua bagan berikut ini. 2.2.2.1 Bagan Alir Metode Bisection
MULAI DEFINISIKAN FUNGSI Baca a, b, tol, iter_max Iter = 0 Fa = F(a) Fb = F(b)
Fa * Fb > 0 tidak
ya
Tulis Fa * Fb > 0
Ya
tidak a=m Fa = Fm
1 SELESAI
Bab II hal. 5
Penyelesaian Numerik Persamaan Non-Linear 2.2.2.2 Bagan Alir Metode Regula Falsi
MULAI
Fa * Fb > 0 tidak
ya
ya
tidak a=m Fa = Fm
Bab II hal. 6
y=x y = g(x)
Penyelesaian Numerik Persamaan Non-Linear 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. Tabel 2.1 Hasil perhitungan metode Iterasi.
k 0 1 2 3 4 5 6 7 8 9
Cara ii 5 35 14285
Cara iv 5 2.6458 3.2495 3.0257 3.1 3.0743 3.0831 3.0801 3.0811 3.0808
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 g(x)=(x -20)/3 7 y=x 6 5 4 3 2 1 0 0 -1 -2 1 2 3 4 5 6 7 8
2 3
g(x)=(3+20/x)
0.5
g(x)=20/(x -3)
Gambar 2.7
Sajian fungsi y = g(x) cara (iii) dan (iv)
Bab II hal. 8
Penyelesaian Numerik Persamaan Non-Linear 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=x y=g(x)
2.3.1 Algoritma Program Algoritma program dengan metode Iterasi a). Tentukan xo, toleransi, dan jumlah iterasi maksimum. b). Hitung xbaru = g(xo). c). Jika nilai mutlak (xbaru - xo) < toleransi, diperoleh tulisan xbaru sebagai hasil perhitungan; jika tidak, lanjutkan ke langkah berikutnya. d). Jika jumlah iterasi > iterasi maksimum, akhiri program. e). xo = xbaru , dan kembali ke langkah (b).
2.3.2 Bagan Alir Program Dalam mempersiapkan program sumber, algoritma dijabarkan dalam bentuk bagan alir berikut, dan bagan alir metode ini dapat dilihat pada Bagan 2.3.2.1.
Bab II hal. 9
iter = iter +1
xb = G(xo)
|xb-xo|<tol iter>iter_max
ya
Tidak xo = xb
Bab II hal. 10
Penyelesaian Numerik Persamaan Non-Linear 2.4 METODE NEWTON-RAPHSON 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 xk
f(x)
Gambar 2.9 Garis singgung f(xk) memotong di xk+1. Dari diagram ini terlihat tagensial (garis singgung) f(x) adalah : f(x k ) f(x k + 1 ) f' (x ) = (x k x k + 1 ) f(x k ) f' (x ) = (x k x k + 1 ) sehingga x k+1 = x k - f( x k ) / f(x k), k = 0,1,2,....
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 x3 = 3.0859 x0 = 5 x1 = 3.75 x4 = 3.0809 x2 = 3.2018 x5 = 3.0809
Bab II hal. 11
Kekurangan metode ini adalah : a). Harus mencari f(x), dan nilainya mungkin 0. b). Tidaklah sederhana melacak proses untuk konvergen. c). Dalam perhitungan ada kemungkinan besar proses memberikan hasil divergen, kecuali nilai perkiraan awal x cukup tepat.
Dengan memperhatikan rumusan xk=1 = xk - f (xk )/f (xk ), k = 0, 1, 2, dan syarat konvergensi | g (x) | < 1, berarti d f (x ) f (x ) f" (x ) g' (x ) = = <1 x f' (x ) dx x = x [f' (x )]2
(2.9)
Apabila nilai turunan fungsi susah didapat, nilai ini dapat didekati dengan harga fungsi dari hasil dua tahapan proses sebelumnya.
xk
xk+1
xk+2
Gambar 2.10 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 f (x k +1 ) f (x k ) Penentuan nilai turunan fungsi dengan cara ini disebut metode SECANT. x k +2 = x k +1 f (x k +1 )
(2.10)
2.4.2 Algoritma Program Algoritma program untuk metode Newton-Raphson a). Tentukan xo, toleransi, dan jumlah iterasi maksimum. b). Hitung xbaru = x - f(xo)/f(xo). c). Jika nilai mutlak (xbaru - xo) < toleransi, diperoleh tulisan xbaru sebagai hasil perhitungan; jika tidak, lanjutkan ke langkah berikutnya. d). Jika jumlah iterasi > iterasi maksimum, akhiri program. e). x = xbaru , dan kembali ke langkah (b).
Bab II hal. 13
Dalam mempersiapkan program sumber, algoritma dijabarkan dalam bentuk bagan alir berikut.
2.4.3.1 Bagan Alir Metode Newton-Raphson
MULAI DEFINISIKAN FUNGSI Baca xo, tol, iter_max Iter = 0
xb =xo-Fx/F1x
ya
Bab II hal. 14
|xb-xo|<tol iter>iter_max
ya
Tidak xo = xb
Bab II hal. 15
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++.
2.6.1 Program Sumber untuk Metode Bisection
Program berikut menggunakan algoritma metode Bisection untuk menyelesaikan persamaan non-linear. Program akan dicoba untuk menyelesaikan persamaan : tan (x) - x - 0,5 = 0
2.6.1.1 DEKLARASI SUMBER PROGRAM dalam BAHASA 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;
*/
Bab II hal. 16
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"); } }
Bab II hal. 17
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 + b) / 2; 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 b := 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.
2.6.1.3 Contoh eksekusi program Eksekusi program dilakukan dalam selang interval [0,1], toleransi 10-7 dan jumlah iterasi maksimum sebanyak 30. Hasil eksekusi program adalah sebagai berikut :
Batas bawah Batas atas Toleransi Jumlah iterasi maksimum It. 1 2 3 4 5 a 0.00000 0.50000 0.75000 0.87500 0.93750 m 0.50000 0.75000 0.87500 0.93750 0.96875 = = = = 0 1 0.0000001 30 b 1.00000 1.00000 1.00000 1.00000 1.00000 f(a) -0.50000 -0.45370 -0.31840 -0.17758 -0.07543 f(b) abs[f(b)-f(a)]/2 -0.45370 2.79e-01 -0.31840 2.56e-01 -0.17758 1.88e-01 -0.07543 1.17e-01 -0.01345 6.64e-02
Bab II hal. 18
Dari hasil eksekusi ini didapat hasil x = 0.975017. Hasil ini tercapai setelah iterasi ke-24.
2.6.2 Program Sumber untuk Metode Regula Falsi
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
2.6.2.1 DEKLARASI SUMBER PROGRAM dalam BAHASA C++
// 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;
*/
Bab II hal. 19
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"); } }
Bab II hal. 20
Eksekusi program dilakukan dengan menggunakan data yang sama dengan metode Bisection. Hasil eksekusi program adalah sebagai berikut :
Batas bawah Batas atas Toleransi Jumlah iterasi maksimum It. 1 2 3 4 5 6 7 a 0.00000 0.89701 0.97073 0.97479 0.97501 0.97502 0.97502 m 0.89701 0.97073 0.97479 0.97501 0.97502 0.97502 0.97502 = = = = 0 1 0.0000001 30 f(a) -0.50000 -0.14456 -0.00925 -0.00050 -0.00003 -0.00000 -0.00000 f(b) -0.14456 -0.00925 -0.00050 -0.00003 -0.00000 -0.00000 -0.00000 abs[f(b)-f(a)]/2 2.79e-01 1.01e-01 3.33e-02 2.90e-02 2.87e-02 2.87e-02 2.87e-02
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.
Bab II hal. 21
Penyelesaian Numerik Persamaan Non-Linear 2.6.3 Program Sumber untuk Metode Iterasi
Program berikut menggunakan algoritma metode Iterasi untuk menyelesaikan persamaan nonlinear. 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
2.6.3.1 DEKLARASI SUMBER PROGRAM dalam BAHASA C++
// 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"); }
*/
Bab II hal. 22
Penyelesaian Numerik Persamaan Non-Linear 2.6.3.2 DEKLARASI SUMBER PROGRAM dalam BAHASA PASCAL
{ Program 1.3b Metode Iterasi Daftar Variable x0 = harga awal tol = toleransi max_iter = jumlah iterasi maksimum } Var x0,xb,tol max_iter,it epsilon : real; : integer; : real;
function g(x : real) : real; Begin g := (x*x + exp(x) - 2)/3; End; 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.
Dari hasil eksekusi ini didapat hasil x = -0.390272 yang tercapai setelah iterasi ke-8.
Metode Numerik Dalam Ilmu Rekayasa Sipil Bab II hal. 23
Program berikut menggunakan algoritma metode Newton-Raphson untuk menyelesaikan persamaan non-linear. Program akan dicoba untuk menyelesaikan persamaan : f(x) = ex + x2 - 3x - 2 = 0 Turunan pertama fungsi ini adalah : f(x) = ex + 2x - 3
2.6.4.1 DEKLARASI SUMBER PROGRAM dalam BAHASA C++
// 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; printf("Harga awal = "); scanf("%f",&x0); printf("Toleransi = "); scanf("%f",&tol); printf("Jumlah iterasi maksimum = "); scanf("%d",&max_iter); 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"); }
*/
Bab II hal. 24
function f(x : real) : real; Begin f := x*x - 3*x + exp(x) - 2; End; function f1(x : real) : real; Begin f1 := 2*x - 3 + exp(x); End; 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.
Eksekusi program dilakukan dengan menggunakan harga awal 0, toleransi 10-5, dan jumlah iterasi maksimum sebesar 20. Hasil eksekusi program adalah sebagai berikut :
Harga awal = 0 Toleransi = 0.00001 Jumlah iterasi maksimum = 20
Bab II hal. 25
It. 1 2 3 4
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.
2.6.5 Program Sumber untuk Metode Secant
Program berikut menggunakan algoritma metode Secant untuk menyelesaikan persamaan nonlinear. Program kembali akan dicoba untuk menyelesaikan persamaan : F(x) = ex + x2 - 3x - 2 = 0
*/
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);
Bab II hal. 26
function f(x : real) : real; Begin f := x*x - 3*x + exp(x) - 2; End; Begin write('Harga awal write('Harga kedua write('Toleransi write('Jumlah iterasi maksimum = = = = '); '); '); '); read(x0); read(x1); read(tol); 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.
Eksekusi program dilakukan dengan menggunakan harga awal dan -0.1, toleransi 10-5, dan jumlah iterasi maksimum sebesar 20. Hasil eksekusi program adalah sebagai berikut :
Harga awal = 0
Bab II hal. 27
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 ke6. Walaupun konvergensi hasil perhitungan lebih lambat dibandinggkan dengan penggunaan metode Newton-Raphson, namun metode ini memiliki kelebihan karena tidak memerlukan penentuan turunan fungsi.
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)
Perletakan jepit
Balok
dengan l EI
= 2/EI = panjang elemen balok = 1 meter = berat jenis elemen balok = 2.4 x 104 = frekuensi pribadi balok (sec-1) = kekakuan lentur balok = 2.5 x 106
(b)
Bab II hal. 28
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 Batas atas Toleransi Jumlah iterasi maksimum It. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 a 7.00000 7.50000 7.75000 7.75000 7.81250 7.84375 7.84375 7.85156 7.85156 7.85352 7.85449 7.85449 7.85474 7.85474 7.85474 7.85474 7.85475 7.85475 7.85476 7.85476 7.85476 7.85476 7.85476 7.85476 b 7.50000 7.75000 7.87500 7.81250 7.84375 7.85938 7.85156 7.85547 7.85352 7.85449 7.85498 7.85474 7.85486 7.85480 7.85477 7.85475 7.85476 7.85476 7.85476 7.85476 7.85476 7.85476 7.85476 7.85476 = = = = 7 8 0.0000001 30 f(a) f(c) abs[f(c)-f(a)]/2 414.37745 314.36577 3.2E+02 314.36577 121.48308 2.7E+02 121.48308 -26.64433 1.7E+02 121.48308 52.24211 7.4E+01 52.24211 14.04382 3.9E+01 14.04382 -5.98411 2.0E+01 14.04382 4.10828 1.0E+01 4.10828 -0.91823 5.0E+00 4.10828 1.59993 2.5E+00 1.59993 0.34208 1.3E+00 0.34208 -0.28777 6.3E-01 0.34208 0.02723 3.1E-01 0.02723 -0.13025 1.6E-01 0.02723 -0.05150 7.9E-02 0.02723 -0.01214 3.9E-02 0.02723 0.00755 2.0E-02 0.00755 -0.00229 9.8E-03 0.00755 0.00263 4.9E-03 0.00263 0.00017 2.5E-03 0.00017 -0.00106 1.2E-03 0.00017 -0.00045 6.2E-04 0.00017 -0.00014 3.1E-04 0.00017 0.00001 1.5E-04 0.00001 -0.00006 7.7E-05
c 8.00000 8.00000 8.00000 7.87500 7.87500 7.87500 7.85938 7.85938 7.85547 7.85547 7.85547 7.85498 7.85498 7.85486 7.85480 7.85477 7.85477 7.85476 7.85476 7.85476 7.85476 7.85476 7.85476 7.85476
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
Bab II hal. 29
Penyelesaian Numerik Persamaan Non-Linear 2.7.2 BidangTeknik Transportasi Dalam desain tikungan jalan lingkar, terdapat rumusan berikut :
R2
2
R=
T M
(R
+ T2
1/2
+M
(a)
dengan R = jari-jari kurva jalan T = jarak tangensial = 273.935 m M = ordinat tengah = 73.773 m Hitunglah berapa nilai R dengan menggunakan metode iterasi.
Penyelesaian Dengan memasukkan nilai-nilai yang diketahui ke persamaan (a) didapat : R2 R= + 73.773.773 1/2 R 2 + 273.935 2 Tulis kembali persamaan dalam variabel bebas x sebagai berikut: x2 x= 2 + 73.773 (x + 75040.38)1/2 Selanjutnya digunakan program 2.6.3 dengan memodifikasi bagian definisi fungsi sebagai berikut: return x*x / sqrt(x*x + 75040.38) + 73.773 (C++) g := x*x / sqrt(x*x + 75040.38) + 73.773 (Pascal) Program dieksekusi dengan memberikan harga awal xo =125. Hasil eksekusi program adalah :
Harga awal = 125 Toleransi = 0.001 Jumlah iterasi maksimum = 30 It. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x 125.00000 125.66487 126.17022 126.55552 126.84999 127.07544 127.24828 127.38093 127.48282 127.56112 127.62132 127.66763 127.70326 127.73068 127.75178 g(x) 125.66487 126.17022 126.55552 126.84999 127.07544 127.24828 127.38093 127.48282 127.56112 127.62132 127.66763 127.70326 127.73068 127.75178 127.76803 f(x) 6.6E-01 5.1E-01 3.9E-01 2.9E-01 2.3E-01 1.7E-01 1.3E-01 1.0E-01 7.8E-02 6.0E-02 4.6E-02 3.6E-02 2.7E-02 2.1E-02 1.6E-02
Bab II hal. 30
Koefisien gesek untuk aliran turbulen dalam sebuah pipa diberikan dalam persamaan berikut : e 1 9.35 = 1.14 2.0 * log10 + (a) D R f 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 :
e 9.35 f = 1.14 - 2.0 * log10 + , maka D Re f metode yang paling cocok digunakan adalah metode iterasi.
Kasus (i) Dengan memasukkan nilai-nilai yang diketahui ke dalam persamaan akan didapat :
0.0025 9.35 f = 1.14 - 2.0 * log10 + 4 3 *10 * f 0.1 0.0003117 f = 1.14 - 2.0 * log10 0.025 + f
2 2
Bab II hal. 31
0.00000187 f = 1.14 - 2.0 * log10 0.015 + f Tulis fungsi dalam variabel bebas x akan diperoleh persamaan berikut: 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 It. 1 2 3 x 1.00000 0.04363 0.04363 g(x) 0.04363 0.04363 0.04363 f(x) 9.6E-01 7.5E-06 8.1E-10
2
Bab II hal. 32
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 = 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
Kedua parameter ini dimasukkan ke persamaan (a) : KP D3 - KA (H + D)3 = 0 2.770 D3 - 0.361 (15 + D)3 = 0 Tulis kembali persamaan dalam variabel bebas x sebagai : 2.770 x3 - 0.361 (15 + x)3 = 0 maka turunan fungsi adalah : f (x) := 8.310 x2 - 1.083 (15 + x)2 = 0 Selanjutnya gunakan program 2.6.4 dengan modifikasi pada definisi fungsi : Fungsi f(x) : return 2.770 * x * x * x - 0.361 * (15 + x) * (15 + x) * (15 + x); (C++) f : = 2.770 * x * x * x - 0.361 * (15 + x) * (15 + x) * (15 + x); (Pascal) Fungsi f (x) : return 8.310 * x * x - 1.083 * (15 + x) * (15 + x); (C++) f1 : = 8.310 * x * x - 1.083 * (15 + x) * (15 + x); (Pascal) Hasil eksekusi program adalah:
Harga awal = 10 Toleransi = 0.001 Jumlah iterasi maksimum = 20 It. 1 2 3 4 5 6 7 x 28.62530 21.25399 17.22334 15.67640 15.43196 15.42605 15.42605 f(x) 35000.10294 9393.24741 2073.78951 250.07278 5.76369 0.00332 0.00000 epsilon 1.9E+01 7.4E+00 4.0E+00 1.5E+00 2.4E-01 5.9E-03 3.4E-06
2.7.5 Manajemen Konstruksi 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)
Bab II hal. 34