Upload
voquynh
View
336
Download
4
Embed Size (px)
Citation preview
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
1
Modul
Dasar dasar C
1. Struktur Program di C++
Dalam bahasa pemrograman C++ strukturnya adalah sebagai berikut:
a. Header. Ex: #include<iostream.h>
b. Main adalah isi dari program diawali {……. dan diakhiri dengan ……..}
Contoh:
1. #include <iostream.h> #include<math.h>
2. #define square (x) ((x)*(x))
3. float masukandata(void);
4. float luasp(float sisi)
5.
6. void tampil(float luasnya);
7. int main()
8. {
9. float sisi;
10. float luas; 11. sisi = masukandata(); 12. luas = luasp(sisi); 13. tampil(luas); 14. } 15. 16. float masukandata(void) 17. { 18. float input; 19. cout <<”Masukkan sisi bujursangkar = “ ; 20. cin >> input; 21. return (input); 22. } 23. 24. float luasp(float sisi) 25. { 26. float luas; 27. luas = square(sisi); 28. return(luas); 29. } 30. void tampil (float luas) 31. { 32. cout << “\n\nluas Bujursangkarnya adalah = “ << luas
<< “persegi”;
33. }
I
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
2
2. Fungsi
Fungsi dalam suatu program sangat berguna untuk membuat source code dari
program tersebut menjadi ringkas dan padat. Suatu fungsi dalam source code akan
dipanggil dan dikerjakan sesuai dengan urut-urutan source code-nya. Fungsi harus
mengembalikan suatu nilai, baik isi maupun kosong, yang disebut void.
Latihan:
1. #include <iostream.h>
2. int tambah (int x, int y)
3. {
4. cout <<”Berada di dalam fungsi tambah ( )\n”;
5. cout << “Angka I = “;
6. cin >> a;
7. cout << “Angka II = “;
8. cin >> b;
9. cout << “\nPanggil fungsi tambah ( ) …..\n “;
10. c = tambah(a,b); 11. cout << “\n Kembali ke fungsi main ( )\n “; 12. cout << “Hasil penjumlahan “ << a << “dan “ << b <<
“adalah “ << c << “\n”;
13. cout << “ \nSelesai…\n”; 14. return 0; 15. }
3. Input dan Output
Program komputer berfungsi mengolah dan memroses suatu data yang diinputkan
menjadi informasi yang dioutputkan menjadi informasi yang dioutputkan. Statemen
input dalam c++, cin dengan cara penulisannya :
cin >> a;
statemen output dalam c++, cout dengan cara penulisan
cout << “-----------------------“;
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
3
4. Analisa Program
Menganalisa bagian perbagian dan menjelaskan dari kegunaan masing-masing bagian
program
Contoh:
#include <iostream.h> // mencari (#) preprosesor (include) file
iostream.h dalam (< >) yang digunakan
untuk input dan output.
int main () // menjalankan fungsi main yang dipanggil
secara otomatis leh sistem operasi yang akan
mengembalikan nilai integer.
1. { 2. int nomer; 3. cout << “Masukkan suatu angka “; 4. cin >> nomer; 5. cout << “Angkanya adalah “ << number; 6. return 0; 7. }
Tugas
1. Buatlah source code dari program yang memiliki algoritma sebagai berikut :
a. Masukkan suatu kalimat = “Hallo, ini program pertamaku”
b. Tulis/ tampilkan kalimat yang pernah dimasukkan
2. Analisa program tersebut.
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
4
Modul
Bilangan Random
Tujuan praktikum:
Memahami pseudo-random pada komputer dan cara membangkitkannya.
Mengetahui batasan-batasan pseudo-random untuk tipe integer.
Mengetahui cara memanipulasi untuk membangkitkan bilangan random tipe
float menggunakan „benih‟ yang dibangkitkan dengan fungsi timer().
Mengetahui cara membangkitkan bilangan random menggunakan fungsi
standard rand() dan srand() pada C.
Dasar teori:
Bahasa pemrograman C menyediakan fungsi librari rand() untuk
membangkitkan bilangan random tipe integer antara 0 sampai dengan RAND_MAX,
yang adalah harga maksimum yang bergantung pada sistem komputer yang digunakan.
Pada modul 1 kita akan mencoba menggunakan fungsi rand() dan memodifikasi output
yang dihasilkan.
Bilangan random yang dihasilkan oleh komputer adalah pseudo-random
(buatan), yang bukan benar-benar bilangan random seperti „melempar uang logam‟
dalam ilmu statistik. Output dari fungsi rand() menghasilkan bilangan random yang
cukup valid namun pada implementasinya akan bergantung pada librari dari sistem
komputer yang digunakan. Pada kuliah Metode Numerik akan dipelajari pentingnya
pentingnya ke-random-an dari pseudo-random komputer dan aplikasinya pada bidang
ilmu pengetahuan.
Fungsi yang lain adalah srand(), yang berfungsi untuk inisialisasi „benih‟ untuk
pseudo-random dengan rand(). Dengan benih pseudo-random yang berbeda akan
dihasilkan urutan bilangan random yang berbeda pula.
Batan atas urutan bilangan random RAND_MAX adalah system-dependend
yang didefinisikan pada stdlib.h, dan untuk mengetahui harga batas atas bilangan
integer bilangan random yang dihasilkan tersebut dapat digunakan dengan program
singkat sebagai berikut:
II
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
5
1. #include <stdio.h> 2. #include <stdlib.h> 3. int main() 4. { 5. printf("%d\n", RAND_MAX); 6. return 0; 7. }
(Buatlah program di atas pada komputer, lalu compile dan jalankan)
Fungsi rand() mengembalikan harga-harga random tipe integer antara 0 –
RAND_MAX. Program di bawah ini adalah cara menggunakan fungsi rand().
1. #include <stdio.h> 2. #include <stdlib.h> 3. int main() 4. { 5. int i; 6. for(i=0; i<5; i++) 7. { 8. printf("%d\n",rand()); 9. } 10. return 0;
11. }
(Buatlah program di atas pada komputer, lalu compile dan jalankan berulang-ulang dan
catat hasil outputnya).
Output program di atas adalah urutan bilangan random dengan harga yang selalu
sama. Hal itu disebabkan inisialisasi benih adalah identik setiap waktu. Untuk
mendapatkan urutan harga random yang berbeda pada setiap program tersebut
dijalankan anda dapat menggunakan fungsi time() untuk membangkitkan benih dengan
fungsi srand(). Fungsi srand() menggunakan unsigned int sebagai argument dan me-set
benih random yang akan dipakai untuk membangkitkan bilangan random dengan rand().
Pada banyak aplikasi, penggunaan fungsi time() untuk membangkitkan benih adalah
cara yang baik dan valid. Modifikasi program anda sehingga menjadi program di bawah
ini:
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <time.h>
4. int main()
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
6
5. {
6. int i;
7. /* set benih untuk rand() */
8. srand((unsigned)time(NULL));
9. for(i=0; i<5; i++) {
10. printf("%d\n", rand()); 11. } 12. return 0; 13. }
Untuk membangkitkan bilangan random pada range tertentu dapat dilakukan
dengan cara me-map bilangan integer yang dikembalikan oleh fungsi rand(). Dua
program berikut membangkitkan bilangan random tipe float.
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <time.h>
4. int main()
5. {
6. float x;
7. int i;
8. /* set benih untuk rand() */
9. srand((unsigned)time(NULL));
10. for(i=0; i<5; i++) { 11. x = (float) rand()/(RAND_MAX); 12. printf("%f\n", x); 13. } 14. return 0; 15. }
(Buatlah kedua program tersebut, lalu compile dan jalankan. Perhatikan dan catat output
dari masing-masing program).
Tugas:
Buatlah program dengan fungsi rand() untuk membangkitkan bilangan random antara 0
dan 99. Kemudian modifikasi program anda agar keluar dari loop pada saat bilangan
random yang dibangkitkan melampui angka 88.
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
7
Modul
Operasi Matrix
Tujuan praktikum:
Mengetahui cara inisialisasi dan memanipulasi data elemen dari sebuah matrix
Dapat melakukan operasi matrix, penambahan, pengurangan, perkalian, inverse
dll. dengan program komputer
Dapat menggunakan array 2D pada C untuk melakukan operasi matrix
Dasar teori:
Sebuah matrix terdiri dari array segiempat dari elemen-elemen yang ditandai dengan
simbul [A]. Individual elemen-elemen dari sebuah matrix [A] dinotasikan dengan ija .
Set dari elemen-elemen horizontal disebut baris dan set dari elemen-elemen vertikal
disebut kolom. Dengan demikian sebuah program matrix dapat diimplementasikan
menggunakan array 2D.
Contoh:
int a[2][3];
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
Array 2D adalah array dari arrays, sehingga deklarasi di atas adalah array dari dua array
integer. Matrix di atas mempunyai jumlah baris 2 dan jumlah kolom 3. Berikut adalah
contoh program untuk mengisi data elemen-elemen 1 s/d 6 dan me-print elemen-elemen
dalam baris dan kolomnya.
1. #include<iostream.h>
2. #include<conio.h>
3. void main(){
4. clrscr();
5. int a[3][3];
6. int b[3][3];
7. int c[3][3];
8. int i,j;
9. for (i=1;i<3;i++) {
10. for (j=1;j<3;j++) { 11. cout << "Masukkan elemen matrik A " << i << "," << j
<< " : ";
12. cin >> a[i][j]; 13. } 14. }
III
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
8
15. cout << "Matrik A : " <<endl; 16. for (i=1;i<3;i++) { 17. for (j=1;j<3;j++) { 18. cout << a[i][j] << " "; 19. } 20. cout << endl;
21. }
22. }
Penambahan atau pengurangan dua buah matrix [A] dan [B] dapat dilakukan dengan
cara menambahkan atau mengurangkan masing elemen yang bersesuaian dari tiap-tiap
matrix [A] dan [B] tersebut.
[C] = [A] + [B] ijijij bac
[C] = [A] – [B] ijijij bac
Program penambahan dua buah matrix 2 x 2. Pada program penambahan matrix di
bawah terdapat dua buah function mat_read (int mat[2][2]) dan function mat_print (int
mat[2][2]) belum dibuat. Buatlah sendiri kedua function tersebut dengan mengacu
potongan program di atas dan kemudian selesaikan program penambahan dua buah
matrix di bawah.
Program untuk menambah dua matrix 2 x 2:
1. #include<iostream.h>
2. #include<conio.h>
3.
4. void main(){
5. clrscr();
6. int a[3][3];
7. int b[3][3];
8. int c[3][3];
9. int i,j;
10. 11. for (i=1;i<3;i++) { 12. for (j=1;j<3;j++) { 13. 14. cout << "Masukkan elemen matrik A " << i << "," << j
<< " : ";
15. cin >> a[i][j]; 16. } 17. } 18. 19. cout << "Matrik A : " <<endl; 20. for (i=1;i<3;i++) { 21. for (j=1;j<3;j++) {
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
9
22. cout << a[i][j] << " "; 23. 24. } 25. cout << endl; 26. } 27. 28. for (i=1;i<3;i++) { 29. for (j=1;j<3;j++) { 30. 31. cout << "Masukkan elemen matrik B " << i << "," << j
<< " : ";
32. cin >> b[i][j]; 33. } 34. } 35. 36. cout << "Matrik B : " <<endl; 37. for (i=1;i<3;i++) { 38. for (j=1;j<3;j++) { 39. 40. cout << b[i][j] << " "; 41. 42. } 43. cout << endl; 44. } 45. 46. for (i=1;i<3;i++) { 47. for (j=1;j<3;j++) { 48. c[i][j]=a[i][j]+b[i][j]; 49. } 50. } 51. 52. cout << "Matrik C : " << endl; 53. for (i=1;i<3;i++) { 54. for (j=1;j<3;j++) { 55. cout << c[i][j] << " "; 56. } 57. cout << endl; 58. } 59. }
Perkalian sebuah matrix [A]: m x n, dengan bilangan skalar c, dapat dihitung sebagai
berikut:
c a11 c a12 ... c a1n
[B] = c [A] = c a21 c a22 ... c a2n
c am1 c am2 ... c amm
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
10
Sedang perkalian dua buah matrix [C] = [A] [B] dapat dilakukan dengan persamaan
sebagai berikut (ingat jumlah baris-kolom dari matrik [C]).
n
k
kjikij bac1
Inverse dari sebuah matrix [A] adalah [A]-1
yang dapat dihitung sebagai berikut:
[A] [A]-1
= [A]-1
[A] = [I]
dengan [I] adalah matrix identitas.
Untuk matrix inversi dari matrix 2 x 2 inverse matrix dapat dihitung dengan jauh lebih
sederhana sebagai berikut.
1121
1222
21122211
1 1][
aa
aa
aaaaA
Tugas:
Buat program perkalian matrix 2 x 2 dengan bilangan skalar c yang dapat
divariasi. Kemudian tentukan matrix inverse dari matrix 2 x 2 tersebut.
Buat program perkalian matrix persegi m x n dengan m dan n = 4.
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
11
Modul
Metode Jacobi
Tujuan praktikum:
Dapat memahami penyelesaian sistem persamaan linear dimensi banyak dengan
iterasi Jacobi.
Memahami metode trial-and-error dengan metode Jacobi.
Dapat membuat program metode numerik Jacobi untuk mencari akar-akar
persamaan linear suku banyak.
Dasar teori:
Metode Jacobi merupakan salah satu metode penyelesaian sistem persamaan
linear (baca: matriks) berdimensi banyak (baca: lebih dari 2). Untuk matriks dengan
dimensi kecil (kurang atau sama dengan dua), lebih efektif diselesaikan dengan aturan
eliminasi atau metode Cramer.
Sistem persamaan linear dapat di-representasikan (dimodelkan) dalam bentuk
matriks sebagai berikut:
Sebagai contoh:
3x1 + x2 - x3 = 5
4x1 + 7x2 - 3x3 = 20
2x1 - 2x2 + 5x3 = 10
dapat di-representasikan sebagai:
IV
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
12
Tujuannya supaya mudah untuk diselesaikan secara matematis.
Aturan Jacobi:
Iterasi Jacobi memiliki rumus persamaan sebagai berikut:
atau
Iterasi berakhir jika:
Atau perhitungan saat ini tidak berbeda jauh (baca: mirip) dengan perhitungan
sebelumnya.
Jika di-implementasikan ke contoh di atas menjadi:
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
13
Jika inisialisasi nilai awal x1, x2 dan x3 = 0, maka:
Iterasi berikutnya ditunjukkan pada tabel berikut ini:
Jika diperhatikan pada tabel di atas, nilai x1, x2 dan x3 semakin stabil (perbedaan nilai
saat ini dengan nilai sebelumnya semakin kecil). Proses ini dapat diteruskan sesuka hati
sampai diperoleh toleransi error yang diinginkan.
Menulis Kode Program Iterasi Jacobi
1. #include<iostream.h>
2. void main()
3. {
4. int i, j, k, l, ukuran, iterasi;
5. float f[10], a[10][10],b[10],x[10], toleransi, sigma[10];
6.
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
14
7. //input ukuran matrik
8. cout << "Masukkan besar matriks : ";
9. cin >> ukuran;
10. 11. Step #4 : Input matriks A dan matriks B 12. 13. //masukkan matrik a 14. for (i=1;i<=ukuran;i++){ 15. for (j=1;j<=ukuran;j++){
16. cout << "Masukkan a[" << i << "][" << j << "] = ";
17. cin >> a[i][j];
18. }
19. } 20. 21. //masukkan matrik b 22. for (i=1;i<=ukuran;i++){ 23. cout << "Masukkan elemen matrik b[" << i << "] = ";
24. cin >> b[i];
25. } 26. 27. //inisialisasi nilai awal 28. for (i=1;i<=ukuran;i++){ 29. x[i]=0;
30. } 31. 32. toleransi = 10; 33. iterasi = 0; 34. 35. while (toleransi > 0.00001) 36. { 37. iterasi++;
38. cout << "---------------------------------------\n";
39. cout << "iterasi ke " << iterasi << endl;
40. 41. if (iterasi > 50) 42. break;
43. 44. 45. //menghitung jumlah total sigma 46. for (k=1;k<=ukuran;k++) { 47. sigma[k] = 0;
48. for (l=1;l<=ukuran;l++) {
49. 50. if (k != l) {
51. sigma[k] = sigma[k] + (a[k][l]*x[l]);
52. } // tutup if k != l
53. } // tutup for l
54. 55. f[k] = (b[k] - sigma[k])/a[k][k];
56. cout << "x[" << k << "] = " << f[k] << endl;
57. } // tutup for k
58.
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
15
59. toleransi = (f[1]-x[1])+(f[2]-x[2])+(f[3]-x[3]);
60. if (toleransi < 0) {
61. toleransi *= -1;
62. }
63. 64. for (i=0;i<=ukuran;i++) { 65. x[i] = f[i];
66. } 67. 68. } //tutup while
69. } //tutup void
Latihan:
1. Ujilah Program di atas dengan beberapa matrik dengan beberapa dimensi.
2. Lakukan analisis program di atas
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
16
Modul
Metode Bisection
Tujuan praktikum:
Dapat memahami penyelesaian persamaan f(x) = 0 dan mencari akar-akar
persamaannya dengan metode penggambaran grafis.
Memahami metode trial-and-error dengan metode Bisection untuk mencari akar-
akar persamaan f(x) = 0.
Dapat membuat program metode numerik Bisection untuk mencari akar-akar
persamaan f(x) = 0.
Dasar teori:
Metode paling sederhana untuk mencari akar-akar persamaan f(x) = 0 adalah dengan
me-plot fungsi yang dicari akar-akarnya. Akar-akar persamaan adalah harga-harga f(x)
yang memotong sumbu x. Metode ini biasa disebut metode grafis.
Contoh:
Gunakan metode grafis untuk menentukan koefisien penurunan parasut c yang turun
dengan massa m = 68.1 kg, kecepatan v = 40 m/s, pada waktu turun t = 10 detik.
Grafitasi bumi adalah g = 9.8 m/detik2.
Persamaan: vec
gmcf tmc )/(1)(
c (ordinat) f(c) (absis)
4
8
12
16
20
34.115
17.653
6.067
-2.269
-8.401
12 16
Akar persamaan c
f(c)
V
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
17
Akar persamaan didapatkan c = 14.75. Cara mengecek kebenaran dari estimasi grafis di
atas adalah dengan memasukkan kembali harga tersebut ke dalam persamaannya.
059.040175.14
38.667)75.14( )75.14(146843.0 ef
Anda juga dapat mengecek validitasnya dengan mencari harga kecepatannya.
059.40175.14
)1.68(8.9 10)1.68/75.14( ev
yang harganya mendekati kecepatan jatuh parasut v = 40 m / detik.
Metode Bisection:
Secara umum jika f(x) adalah berharga real dan kontinyu pada interval ul xx dan
harga-harga )( lxf dan )( uxf mempunyai tanda yang berbeda, maka berlaku
persamaan 0)()( ul xfxf . Dan paling tidak akan ada satu persamaan yang berharga
di antara ul xx .
Mencari akar-akar persamaan dengan metode Bisection adalah dengan membagi dua
interval ul xx kemudian mencari akar-akarnya pada tiap-tiap interval, lalu membagi
dua kembali interval yang memuat akar-akar persamaannya. Step-step algoritma dari
metode Bisection adalah sebagai berikut:
Pilih harga rendah lx dan harga tinggi ux di mana akar-akar persamaanya akan
termuat di antaranya.
Tentukan estimasi akar persamaan 2
ulr
xxx
Evaluasi hasilnya dengan cara sebagai berikut:
a. Jika 0)()( ul xfxf , maka akar persamaan yang dicari ada pada interval
bawah. Maka set ru xx dan kembali ke step 2.
b. Jika 0)()( ul xfxf , maka akar persamaan yang dicari ada pada interval
atas. Maka set rl xx dan kembali ke step 2.
c. Jika 0)()( ul xfxf , maka akar persamaan yang dicari adalah rx .
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
18
Program mencari akar persamaan dengan metode Bisection:
/* User perlu memdefinisikan fungsi yang dicari akarnya sebagai fungsi pada program
dengan nama: ffunction. Contoh diberikan pada program ini. */
1. #include<iostream.h>
2. void main() {
3. float a,b,c,fa,fb,fc,konvergensi;
4. int iterasi;
5.
6. cout << "Masukkan Nilai A : ";
7. cin >> a;
8. cout << "Masukkan Nilai B : ";
9. cin >> b;
10. 11. konvergensi=1; 12. iterasi=0; 13. while (konvergensi > 0.000005) 14. { 15. c=(a+b)/2; 16. 17. fa=(2*a)+3; 18. fb=(2*b)+3; 19. fc=(2*c)+3; 20. 21. if ((fc*fb) > 0) 22. b=c; 23. else 24. a=c; 25. 26. konvergensi=a-b; 27. if (konvergensi < 0) 28. konvergensi=konvergensi*-1; 29. 30. iterasi++; 31. } 32. 33. cout << "Jumlah iterasi : " << iterasi << endl; 34. cout << "Akar persamaan : " << a <<endl; 35. 36. }
Tugas:
Buatlah program untuk mencari akar-akar persamaan pada metode grafis di atas
menggunakan metode Bisection.
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
19
Modul
Metode Secant
Tujuan praktikum:
Mempelajari pemrograman komputer untuk menyelesaikan persamaan linear
simultan
Mempelajari teknik metode secant untuk menyelesaikan persamaan non linear
Dasar teori:
Metode Secant
Metode ini juga pengembangan dari metode Interpolasi Linier. Metode ini
dapat disebut metode Ekstrapolasi Linier. Pada metode ini fungsi f(x1) tidak perlu
berlawanan tanda dengan f(x2), namun dipilih dua harga yang dekat dengan akar
sebenarnya yang ditunjukkan oleh fungsi dari kedua titik tersebut. Algoritma dari
metode ini adalah :
1. Memilih harga pendekatan awal, x1 dan x2.
2. Menentukan harga ))()((
)()(
12
21223
xfxf
xfxxxx
3. Jika |f(x3)| ≤ toleransi, maka harga x3 adalah harga x yang dicari, bila tidak
dilanjutkan ke tahap 4.
4. Jika |f(x1)| > |f(x2)|, maka x1baru
= x2, jika tidak maka x1baru
= x1. Kemudian
menentukan harga x2baru
= x3, dan kembali ke tahap 2.
VI
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
20
Latihan:
1. #include<iostream.h>;
2. void main()
3. {
4. float x1,x2,x3,y1,y2,toleransi;
5. int iterasi;
6. cout << "Masukkan X1 : ";
7. cin >> x1;
8. cout << "Masukkan X2 : ";
9. cin >> x2;
10. toleransi=2;
11. iterasi=1;
12. x3=0;
13. while (toleransi > 0.0001) {
14.
15. cout << "Iterasi " << iterasi << endl;
16. cout << "X2 = " << x2 << endl;
17. cout << "X3 = " << x3 << endl;
18.
19. y1=x1*x1-10;
20. y2=x2*x2-10;
21.
22. x3=(-(y1*x2)+(y2*x1))/(y2-y1);
23. cout << "X3 : " << x3 << endl;
24.
25. toleransi=(x3*x3)-10;
26. if (toleransi<0) {
27. toleransi*=-1;
28. }
29. cout << "Toleransi = " << toleransi << endl;
30. x1=x2;
31. x2=x3;
32.
33. iterasi++;
34. }
35. cout << "Akar Persamaan = " << x3 << endl;
36. }
Tugas:
1. Pilih input persamaan yang sesuai sehingga program di atas dapat dijalankan
2. Tulis jawaban dari persamaan anda dalam selembar kertas dan dikumpulkan
pada akhir praktikum
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
21
Modul
Metode Regula Falsi
Tujuan praktikum:
Mempelajari pemrograman komputer untuk menyelesaikan persamaan non
linear dengan metode regula falsi
Dasar teori:
Metode biseksi dapat diperbaiki apabila proses penetuan interval tidak perlu
setengah dari interval sebelumnya.
Jika bisa dicari interval yang lebih baik maka proses penyelesaian akan
memakan waktu yang lebih cepat dengan jumlah iterasi yang lebih sedikit.
Metode regula falsi titik xc ditentukan dari perpotongan garis linear g(x) yang
menghubungkan f(xa) dan f(xb) dengan y=0
Perhatikan grafik berikut:
Xc dicari dengan persamaan :
Sama dengan metode biseksi jika f(xc)*f(xb)<0 maka xb=xc
Jika f(xc)*f(xb)>0 maka xa=xc.
Pada gambar dengan bertambahnya iterasi, nilai xc akan konvergen ke akar
persamaan (penyelesaian).
VII
)()(
))((
ab
aba
acxfxf
xxxfxx
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
22
Proses iterasi berhenti jika selisih nilai xc pada suatu iterasi dengan xc pada
iterasi sebelumnya kurang dari nilai toleransi error yang diberikan
Latihan:
1. #include<iostream.h>;
2. void main()
3. {
4. float x1,x2,x3,y1,y2,toleransi;
5. int iterasi;
6. cout << "Masukkan X1 : ";
7. cin >> x1;
8. cout << "Masukkan X2 : ";
9. cin >> x2;
10. toleransi=2; 11. iterasi=1; 12. x3=0; 13. while (toleransi > 0.0001) { 14. 15. cout << "Iterasi " << iterasi << endl; 16. cout << "X2 = " << x2 << endl; 17. cout << "X3 = " << x3 << endl; 18. 19. y1=x1*x1-10; 20. y2=x2*x2-10; 21. 22. x3= ........... 23. 24. cout << "X3 : " << x3 << endl; 25. 26. toleransi=(x3*x3)-10; 27. if (toleransi<0) { 28. toleransi*=-1; 29. } 30. cout << "Toleransi = " << toleransi << endl; 31. x1=x2; 32. x2=x3; 33. 34. iterasi++; 35. } 36. cout << "Akar Persamaan = " << x3 << endl; 37. }
Tugas:
3. Pilih input persamaan yang sesuai sehingga program di atas dapat dijalankan
4. Tulis jawaban dari persamaan anda dalam selembar kertas dan dikumpulkan
pada akhir praktikum
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
23
Modul
Persamaan Diferensial
Tujuan praktikum:
Mahasiswa mampu menyelesaikan persamaan-persamaan diferensial biasa
beserta masalah syarat awalnya.
Mahasiswa mampu menyelesaikan sistem linear beserta masalah syarat awalnya.
Mahasiswa dapat melakukan studi lanjut tentang persamaan diferensial.
Dasar teori:
Persamaan diferensial adalah hubungan antara sekelompok fungsi dengan turunan-
turunannya. Persamaan diferensial biasa adalah sebuah persamaan diferensial yang
menghubungkan fungsi dengan sebuah variabel ke turunannya terhadap variabel itu
sendiri
1. #include<iostream.h>
2. #include<math.h>
3. void main()
4. {
5. int a,i,derajat;
6. float hasil,hasil1,x,koef[6],koef1[6];
7. cout << "Masukkan derajat tertinggi dari persamaan : ";
8. cin >> derajat;
9. cout << "Masukkan nilai x : ";
10. cin >> x;
11. for (i=derajat;i>=0;i--)
12. {
13. cout << "Masukkan koef dari x^"<< i << " : ";
14. cin >> koef[i];
15. }
16. cout << "Persamaan yang anda masukkan adalah :\n ";
17. cout << "f(x) = ";
18. hasil=0;
19. for (i=derajat;i>=1;i--)
20. {
21. cout << koef[i] << "x^" <<i<< " + ";
22. hasil+=(koef[i]*pow(x,i));
23. }
24. cout << koef[0]<< "\n";
25. hasil+=koef[0];
26. cout << "f(" <<x<< ") : " << hasil <<endl;
27.
28. cout << endl;
29. cout << "Turunan dari persamaan adalah : " <<endl;
30. cout << "f`(x) = ";
VIII
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
24
31. hasil1=0;
32. for (a=derajat-1;a>=1;a--)
33. {
34. koef1[a]=koef[a+1]*(a+1);
35. cout << koef1[a] <<"x^" << a << " + ";
36. hasil1+=(koef1[a]*pow(x,a));
37. }
38. cout << koef[1] << endl;
39. hasil1+=koef[1];
40. cout << "f`(" <<x<< ") : " << hasil1 <<endl;
41. }
Tugas:
1. Amati program di atas, jalankan dengan memasukkan data beberapa derajat
pangkat dan koefisien masing-masing pangkat tersebut
2. Tulis persamaan dan jawaban (hasil turunan) dan dikumpulkan pada akhir
praktikum
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
25
Modul
Iterasi Newton
Tujuan praktikum:
Mahasiswa mampu menyelesaikan persamaan-persamaan non linear dengan
metode iterasi regula falsi
Dasar teori:
Metode Newton-Raphson
Metode ini menggunakan fungsi derivatif sebagai fungsi garis singgung.
Algoritma dari metode ini adalah :
1. Memilih harga pendekatan awal, x1.
2. Menentukan harga )('
)(
1
112
xf
xfxx
3. Jika |f(x2)| ≤ toleransi, maka harga x2 adalah harga x yang dicari, bila tidak
dilanjutkan ke tahap 4.
4. Menetukan harga x1baru
= x2. Kemudian kembali ke tahap 2.
Latihan:
1. #include<iostream.h>;
2. #include<math.h>;
IX
Modul Praktikum Komputasi Numerik, Teknik Informatika, STTA Yogyakarta
26
3. void main()
4. {
5. float x1,x2,toleransi;
6. int iterasi;
7. cout << "Masukkan X1 : ";
8. cin >> x1;
9.
10. toleransi=2;
11. iterasi=1;
12. x2=0;
13.
14. while (toleransi > 0.0001) {
15.
16. cout << "Iterasi " << iterasi << endl;
17. cout << "X1 = " << x1 << endl;
18.
19. x2=x1-((((2*x1*x1)-(10*x1)+12))/((4*x1)-10));
20. cout << "X2 : " << x2 << endl;
21.
22. toleransi=(x2-x1);
23. if (toleransi<0)
24. {
25. toleransi*=-1;
26. }
27. cout << "Toleransi = " << toleransi << endl;
28. x1=x2;
29.
30. iterasi++;
31. }
32. cout << "Akar Persamaan = " << x2 << endl;
33. }
Tugas:
1. Amati program di atas, jalankan dengan persamaan yang dapat diinput.