dasar dasar c modul i 1. struktur program di c++ - stta.namestta.name/materi/2018 - modul komputasi...

26
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

Upload: voquynh

Post on 20-Jun-2018

335 views

Category:

Documents


4 download

TRANSCRIPT

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.