PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN...

29
MODUL PRAKTIKUM PEMROGRAMAN KOMPUTER Disusun oleh: Ir. BALZA ACHMAD, M.Sc.E. PROGRAM STUDI FISIKA TEKNIK JURUSAN TEKNIK FISIKA FAKULTAS TEKNIK UNIVERSITAS GADJAH MADA YOGYAKARTA 2005

Transcript of PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN...

Page 1: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

MODUL PRAKTIKUM PEMROGRAMAN KOMPUTER

Disusun oleh:

Ir. BALZA ACHMAD, M.Sc.E.

PROGRAM STUDI FISIKA TEKNIK JURUSAN TEKNIK FISIKA

FAKULTAS TEKNIK UNIVERSITAS GADJAH MADA

YOGYAKARTA 2005

Page 2: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL I – PENDAHULUAN

Sistem bilangan & ralat pemotongan Sistem bilangan yang sering kita gunakan adalah sistem bilangan desimal. Komputer melakukan perhitungan menggunakan bilangan biner. Konversi bilangan desimal ke biner menyebabkan adanya kesalahan pembulatan. Tulislah program berikut, yang intinya hanya menjumlahkan angka 0.1 sebanyak N buah..

// RALAT.CPP #include <iostream.h> main() { float Step, Jumlah; long int N; Step = 0.1; N = 10; Jumlah = 0; for (long int i=1; i<=N; i++) { Jumlah = Jumlah + Step; } cout << N << "*" << Step << " = " << Jumlah << endl; }

1. Jalankan program tersebut untuk nilai N = 10, 100, 1000, 10000 dan 100000. Apa yang

terjadi? 2. Jalankan dengan nilai N = 10000, serta nilai Step yang bervariasi = 0.1, 0.2, 0.25, 0.33,

0.5, dan 0.125. Apakah yang terjadi? Mengapa bisa begitu? 3. Ubahlah tipe variabel Jumlah menjadi double serta variasikan nilai Step dan N.

Bagaimana hasilnya? Akar persamaan kuadrat Persamaan kuadrat dapat dicari akar-akarnya menggunakan rumus abc biasa maupun dengan cara alternatif.

Cara I.: a

acbbx2

42

1−+−

= dan a

acbbx2

42

2−−−

=

Cara II.: acbb

cx4

221−+

−= dan

acbb

cx4

222−−

−=

Tulislah program berikut, untuk mencari akar persamaan kuadrat menggunakan rumus abc.

// AKARKUAD.CPP #include <iostream.h> #include <math.h>

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 1

Page 3: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

#include <stdlib.h> main() { float A, B, C, D, X1, X2; cout << "A = "; cin >> A; cout << "B = "; cin >> B; cout << "C = "; cin >> C; D = B*B-4*A*C; if (D < 0) { cout << "D bernilai negatif, akar kompleks" << endl; exit(1); } cout << "Akar D = " << sqrt(D) << endl; cout << "Dengan cara pertama:" << endl; X1 = (-B+sqrt(D))/(2*A); X2 = (-B-sqrt(D))/(2*A); cout << " X1 = " << X1 << endl; cout << " X2 = " << X2 << endl; cout << "Dengan cara kedua:" << endl; X1 = (-2*C)/(B+sqrt(D)); X2 = (-2*C)/(B-sqrt(D)); cout << " X1 = " << X1 << endl; cout << " X2 = " << X2 << endl; }

4. Jalankan program tersebut untuk nilai-nilai berikut, dan tuliskan hasilnya:

a) A = 1, B = -5, C = 4 b) A = 1, B = 10, C = 1 c) A = 1, B = 100.01, C = 1 d) A = 1, B = -1000.001, C = 1 e) A = 1, B = -40.025, C = 1 f) A = 1, B = 80.0125, C = 1

5. Cara manakah yang lebih tepat untuk mencari akar persamaan kuadrat di atas? Petunjuk: perhatikan nilai B dan √D.

Menampilkan grafik fungsi Program berikut ini menampilkan grafik y = x4-2x3-4x2+4x+4 yang didefinisikan dalam fungsi f(x). Perhatian: untuk dapat menggunakan perintah-perintah yang berhubungan dengan grafik dari Borland Graphics Interface, pada saat membuat project, pilihlah Target Type: Application [*.exe], Platform: DOS (Standard), Libraries: BGI.

// GRAFIK.CPP #include <stdio.h> #include <conio.h> #include <graphics.h> #include <math.h> int lebarLayar, tinggiLayar; float xMin = -3.1; float xMaks = 3.1; float yMin = -6.1;

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 2

Page 4: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

float yMaks = 6.2; float xStep = 1; float yStep = 2; float plotStep = 0.1; float f(float x) { return x*x*x*x-2*x*x*x-4*x*x+4*x+4; } void konversi(int &kolom, int &baris, float x, float y) { kolom = lebarLayar*(x-xMin)/(xMaks-xMin); baris = tinggiLayar*(1-(y-yMin)/(yMaks-yMin)); } main() { int grDriver = DETECT, grMode, grErr; int k1, b1, k2, b2; char s[5]; float i; initgraph(&grDriver, &grMode, "C:\\BC5\\BGI"); grErr = graphresult(); if (grErr != grOk) { printf("BGI error: %s\n", grapherrormsg(grErr)); return grErr; } lebarLayar = getmaxx(); tinggiLayar = getmaxy(); setfillstyle(SOLID_FILL, WHITE); bar(0, 0, lebarLayar, tinggiLayar); setcolor(BLUE); konversi(k1, b1, xMin, 0); konversi(k2, b2, xMaks, 0); line(k1, b1, k2, b2); setcolor(BLUE); konversi(k1, b1, 0, yMin); konversi(k2, b2, 0, yMaks); line(k1, b1, k2, b2); setcolor(GREEN); settextjustify(CENTER_TEXT, CENTER_TEXT); settextstyle(DEFAULT_FONT, HORIZ_DIR, 1); for (i=ceil(xMin); i<=floor(xMaks); i=i+xStep) { sprintf(s, "%.0f", i); konversi(k1, b1, i, 0); line(k1, b1-2, k1, b1+2); outtextxy(k1, b1+10, s); } for (i=ceil(yMin); i<=floor(yMaks); i=i+yStep) { sprintf(s, "%.0f", i); konversi(k1, b1, 0, i); line(k1-2, b1, k1+2, b1); outtextxy(k1-10, b1, s); } setcolor(RED); konversi(k1, b1, xMin, f(xMin)); moveto(k1, b1);

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 3

Page 5: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

for (i=xMin; i<=xMaks; i=i+plotStep) { konversi(k2, b2, i, f(i)); lineto(k2, b2); } getch(); closegraph(); return 0; }

6. Modifikasi nilai plotStep, xMin, xMaks, yMin, yMax, xStep, yStep. untuk

Apakah kegunaan masing-masing variabel tersebut? 7. Modifikasi program di atas untuk menampilkan fungsi berikut ini, gambarlah hasilnya,

serta tentukan kira-kira nilai x untuk y = 0. a) y = ex - x - 2 b) y = x2 – 3*x – 4

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 4

Page 6: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN

Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4 menggunakan metode Bisection.

// BISECT.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> double f(double x) // fungsi yang dicari zerosnya { return x*x*x*x-2*x*x*x-4*x*x+4*x+4; } main() { int i, Nmax; double a, b, x, xp, Emax, e; i = 1; cout << "Mencari akar persamaan dengan metode Bisection\n" << "Tebakan awal bawah (a) = "; cin >> a; cout << "Tebakan awal atas (b) = "; cin >> b; cout << "Galat maksimum (Emax) = "; cin >> Emax; cout << "Iterasi maksimum (Nmax) = "; cin >> Nmax; cout << " i a b x" << " f(a) f(b) f(x) e" << endl; xp = a; while (i <= Nmax) { x = (a+b)/2; e = fabs((x-xp)/x); cout << setw(3) << i << setiosflags(ios::fixed) << setprecision(5) << setw(10) << a << setw(10) << b << setw(10) << x << setw(10) << f(a) << setw(10) << f(b) << setw(10) << f(x); if (i > 1) { cout << setw(10) << e; } cout << endl; if (e <= Emax) { break; } if (f(a)*f(x) < 0)

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 5

Page 7: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

{ b = x; } else { a = x; } i++; xp = x; } cout << "Jadi akarnya adalah " << x << endl; }

1. Berapa iterasi yang diperlukan agar galat tidak lebih dari 0.001, jika tebakan awal a = 1

dan b = 4? Berapakah nilai akar yang diperoleh? 2. Carilah ke-4 nilai akar dari persamaan tersebut. 3. Modifikasi program tersebut untuk menghitung akar dari persamaan y = ex - x - 2.

Tentukan kedua nilai akarnya. Metode Newton-Raphson Program metode Newton-Raphson untuk mencari akar persamaan y = x4-2x3-4x2+4x+4.

// NEWTON.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> double f(double x) // fungsi yang dicari zerosnya { return x*x*x*x-2*x*x*x-4*x*x+4*x+4; } double f1(double x) { return 4*x*x*x-6*x*x-8*x+4; } main() { int i, Nmax; double x, x1, Emax, e; i = 1; cout << "Mencari akar persamaan dengan metode Newton-Raphson\n" << "Tebakan awal = "; cin >> x; cout << "Galat maksimum (Emax) = "; cin >> Emax; cout << "Iterasi maksimum (Nmax) = "; cin >> Nmax; cout << " i x f(x) f'(x)" << " xi+1 e" << endl; while (i <= Nmax) { x1 = x - f(x)/f1(x); e = fabs((x1-x)/x1); cout << setw(3) << i << setiosflags(ios::fixed) << setprecision(5)

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 6

Page 8: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

<< setw(10) << x << setw(10) << f(x) << setw(10) << f1(x) << setw(10) << x1 << setw(10) << e << endl; if (e <= Emax) { break; } x = x1; i++; } cout << "Jadi akarnya adalah " << x1 << endl; }

4. Berapa iterasi yang diperlukan agar galat tidak lebih dari 0.0001, jika tebakan awal =

-2, 0, 2, dan 5? Berapakah nilai akar yang diperoleh? 5. Modifikasi program tersebut untuk menghitung akar dari persamaan y = ex - x - 2.

Tentukan kedua nilai akarnya. Metode Secant Program berikut untuk mencari akar persamaan y = x4-2x3-4x2+4x+4 menggunakan metode Secant.

// SECANT.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> double f(double x) { return x*x*x*x-2*x*x*x-4*x*x+4*x+4; } main() { int i, Nmax; double x, x1, xp, Emax, e; i = 1; cout << "Mencari akar persamaan dengan metode Secant\n" << "Tebakan awal x(0) = "; cin >> xp; cout << "Tebakan awal x(1) = "; cin >> xp; cout << "Galat maksimum (Emax) = "; cin >> Emax; cout << "Iterasi maksimum (Nmax) = "; cin >> Nmax; cout << " i x f(x)" << " x(i+1) e" << endl; while (i <= Nmax) { x1 = x - (f(x)*(x-xp))/(f(x)-f(xp)); e = fabs((x1-x)/x1); cout << setw(3) << i << setiosflags(ios::fixed) << setprecision(5) << setw(10) << x

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 7

Page 9: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

<< setw(10) << f(x) << setw(10) << x1 << setw(10) << e << endl; if (e <= Emax) { break; } x = x1; i++; } cout << "Jadi akarnya adalah " << x1 << endl; }

6. Modifikasi program tersebut untuk menghitung akar dari persamaan y = x2 – x – 1.

Tentukan kedua nilai akarnya. 7. Modifikasi program Bisection di atas untuk mencari akar persamaan dengan metode

Regula Falsi. Berikan contoh tabel hasil interasi untuk persamaan y = x4-2x3-4x2+4x+4.

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 8

Page 10: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL III – PENYELESAIAN PERSAMAAN SIMULTAN

Eliminasi Gauss Program berikut merupakan penyelesaian persamaan simultan menggunakan cara eliminasi Gauss untuk sistem persamaan simultan berikut:

x1 - x2 + 2x3 - x4 = -8 2x1 - 2x2 + 3x3 - 3x4 = -20

x1 + x2 + x3 = -2 x1 - x2 + 4x3 + 3x4 = 4

// GAUSS.CPP #include <iostream.h> #include <math.h> #include <stdlib.h> main() { double A[4][5] = {{1, -1, 2, -1, -8}, {2, -2, 3, -3, -20}, {1, 1, 1, 0, -2}, {1, -1, 4, 3, 4}}; double x[4], M, jumlah, temp; int N = 3, i, j, k, p, q; for (p=0; p<=N; p++) { for (q=0; q<=N+1; q++) { cout << A[p][q] << " "; } cout << endl; } cout << endl; for (j=0; j<=N-1; j++) { for (k=j+1; k<=N; k++) { if (fabs(A[k][j]) > fabs(A[j][j])) { for (i=j; i<=N+1; i++) { temp = A[j][i]; A[j][i] = A[k][i]; A[k][i] = temp; } } } if (A[j][j] == 0) { cout << "Matriks singular!" << endl; exit(1); } for (k=j+1; k<=N; k++)

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 9

Page 11: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

{ M = A[k][j]/A[j][j]; for (i=j; i<=N+1; i++) { A[k][i] = A[k][i]-M*A[j][i]; } } } if (A[N][N] == 0) { cout << "Matriks singular!" << endl; exit(1); } x[N] = A[N][N+1]/A[N][N]; for (k=N-1; k>=0; k--) { jumlah = 0; for (i=k+1; i<=N; i++) { jumlah = jumlah+A[k][i]*x[i]; } x[k] = (A[k][N+1]-jumlah)/A[k][k]; } for (k=0; k<=N; k++) { cout << "x[" << k << "] = " << x[k] << endl; } cout << endl; for (p=0; p<=N; p++) { for (q=0; q<=N+1; q++) { cout << A[p][q] << " "; } cout << endl; } }

1. Tuliskan nilai akhir dari matriks augmented A. (keterangan: angka dengan pangkat

negatif tinggi, misalnya 10-16 atau 10-17 dianggap nol). 2. Berapakah nilai x untuk sistem persamaan di atas? 3. Selesaikan sistem persamaan berikut:

x1 + 2x2 + x3 + 4x4 = 13 2x1 + 4x3 + 3x4 = 28

4x1 + 2x2 + 2x3 + x4 = 20 -3x1 + x2 + 3x3 + 2x4 = 6

Eliminasi Gauss-Jordan Program berikut merupakan penyelesaian persamaan simultan menggunakan cara eliminasi Gauss-Jordan untuk sistem persamaan simultan di atas.

// GJORDAN.CPP #include <iostream.h> #include <math.h> #include <stdlib.h> main() {

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 10

Page 12: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

double A[4][5] = {{1, -1, 2, -1, -8}, {2, -2, 3, -3, -20}, {1, 1, 1, 0, -2}, {1, -1, 4, 3, 4}}; double x[4], M, jumlah, temp; int N = 3, i, j, k, p, q; for (p=0; p<=N; p++) { for (q=0; q<=N+1; q++) { cout << A[p][q] << " "; } cout << endl; } cout << endl; for (j=0; j<=N; j++) { for (k=j+1; k<=N; k++) { if (fabs(A[k][j]) > fabs(A[j][j])) { for (i=0; i<=N+1; i++) { temp = A[j][i]; A[j][i] = A[k][i]; A[k][i] = temp; } } } if (A[j][j] == 0) { cout << "Matriks singular!" << endl; exit(1); } M = A[j][j]; for (i=0; i<=N+1; i++) { A[j][i] = A[j][i]/M; } for (k=0; k<=N; k++) if (j != k) { M = A[k][j]/A[j][j]; for (i=0; i<=N+1; i++) { A[k][i] = A[k][i]-M*A[j][i]; } } } if (A[N][N] == 0) { cout << "Matriks singular!" << endl; exit(1); } for (k=0; k<=N; k++) { x[k] = A[k][N+1]; cout << "x[" << k << "] = " << x[k] << endl; } cout << endl; for (p=0; p<=N; p++)

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 11

Page 13: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

{ for (q=0; q<=N+1; q++) { cout << A[p][q] << " "; } cout << endl; } }

4. Tuliskan nilai akhir dari matriks augmented A dan nilai x untuk sistem persamaan di

atas. Bandingkan hasilnya dengan metode eliminasi Gauss. Iterasi Jacobi Program berikut merupakan penyelesaian persamaan simultan menggunakan cara iterasi Jacobi untuk sistem persamaan simultan berikut.

-2x1 + x2 + 5x3 = 15 4x1 - 8x2 + x3 = -21 4x1 - x2 + x3 = 7

// JACOBI.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> main() { double A[3][4] = {{-2, 1, 5, 15}, { 4, -8, 1, -21}, { 4, -1, 1, 7}}; double x[3], x1[3], jumlah, Emax, e; int N = 2, Nmax, i, j, k; Emax = 1e-6; Nmax = 20; x[0] = 0; x[1] = 0; x[2] = 0; e = 1; i = 0; cout << " i "; for (j=0; j<=N; j++) { cout << " x[" << j << "] "; } cout << endl << setprecision(6) << setiosflags(ios::fixed); while ((i <= Nmax) && (e > Emax)) { cout << setw(3) << i; for (j=0; j<=N; j++) { cout << setw(12) << x[j]; } for (j=0; j<=N; j++) { jumlah = A[j][N+1]; for (k=0; k<=N; k++) { if (j != k)

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 12

Page 14: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

{ jumlah = jumlah-A[j][k]*x[k]; } x1[j] = jumlah/A[j][j]; } } e = 0; for (j=0; j<=N; j++) { e = e+fabs(x1[j]-x[j]); } for (j=0; j<=N; j++) { x[j] = x1[j]; } cout << endl; i++; } }

5. Jalankan program di atas, apakah penyelesaiannya diperoleh? 6. Ubahlah urutan persamaan (baris) pertama dengan ketiga, kemudian jalankan. Tentukan

penyelesaian sistem persamaan tersebut. Berapakah iterasi yang diperlukan? Iterasi Gauss-Seidell Program berikut merupakan penyelesaian persamaan simultan menggunakan cara iterasi Gauss-Seidell untuk sistem persamaan simultan yang sama dengan di atas.

// GSEIDELL.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> main() { double A[3][4] = {{ 4, -1, 1, 7}, { 4, -8, 1, -21}, {-2, 1, 5, 15}}; double x[3], x1[3], jumlah, Emax, e; int N = 2, Nmax, i, j, k; Emax = 1e-6; Nmax = 20; x[0] = 0; x[1] = 0; x[2] = 0; e = 1; i = 0; cout << " i "; for (j=0; j<=N; j++) { cout << " x[" << j << "] "; } cout << endl << setprecision(6) << setiosflags(ios::fixed); while ((i <= Nmax) && (e > Emax)) { cout << setw(3) << i; for (j=0; j<=N; j++) { cout << setw(12) << x[j];

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 13

Page 15: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

} for (j=0; j<=N; j++) { jumlah = A[j][N+1]; for (k=0; k<=N; k++) { if (j < k) { jumlah = jumlah-A[j][k]*x[k]; } if (j > k) { jumlah = jumlah-A[j][k]*x1[k]; } x1[j] = jumlah/A[j][j]; } } e = 0; for (j=0; j<=N; j++) { e = e+fabs(x1[j]-x[j]); } for (j=0; j<=N; j++) { x[j] = x1[j]; } cout << endl; i++; } }

7. Jalankan program di atas dan tuliskan penyelesaian sistem persamaan tersebut.

Berapakah iterasi yang diperlukan? Bandingkan dengan cara interasi Jacobi. 8. Modifikasilah program eliminasi Gauss-Jordan di atas untuk mencari invers suatu

matriks.

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 14

Page 16: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL IV – INTERPOLASI

Interpolasi Linier Program berikut merupakan contoh untuk interpolasi linier dengan pasangan data berikut:

x -2 -1 0 1 2 3 y -5 1.5 1 0.5 3 11.5

// INLINIER.CPP #include <iostream.h> #include <stdlib.h> #define N 6 main() { double x[N] = {-2, -1, 0, 1, 2, 3}; double y[N] = {-5, 1.5, 1, 0.5, 3, 11.5}; double xi, yi; int k; cout << "xi = "; cin >> xi; if ((xi < x[0]) || (xi > x[N-1])) { cout << "x berada di luar batas interpolasi" << endl; exit(1); } for (k=0; k<N-1; k++) { if (xi < x[k+1]) { break; } } yi = y[k]+(xi-x[k])*(y[k+1]-y[k])/(x[k+1]-x[k]); cout << "y interpolasinya = " << yi << endl; }

1. Hitunglah nilai interpolasi untuk x = -1.5, -0.2, 1.5, 2.34, dan 3.5 2. Tabel tersebut sebenarnya merupakan bagian dari fungsi y = 0.5*x3-x+1. Berapakah

galat masing-masing nilai interpolasi pada soal nomor 1 dengan nilai fungsinya? Interpolasi Polinomial Newton Program berikut merupakan contoh untuk interpolasi polinomial Newton dengan pasangan data yang sama dengan di atas:

// INNEWTON.CPP #include <iostream.h> #include <math.h> #define N 6 main() {

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 15

Page 17: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

double x[N] = {-2, -1, 0, 1, 2, 3}; double y[N] = {-5, 1.5, 1, 0.5, 3, 11.5}; double d[N][N]; double xi, yi, jumlah; int j, k; for (k=0; k<N; k++) { d[k][0] = y[k]; } for (j=1; j<N; j++) { for (k=j; k<N; k++) { d[k][j] = (d[k][j-1]-d[k-1][j-1])/(x[k]-x[k-j]); } } cout << "xi = "; cin >> xi; jumlah = d[N-1][N-1]; for (k=N-2; k>=0; k--) { jumlah = jumlah*(xi-x[k])+d[k][k]; } yi = jumlah; cout << "y interpolasinya = " << yi << endl; }

3. Hitung hasil interpolasi menggunakan polinomial Newton untuk variasi nilai x

sebagaimana soal nomor 1. Interpolasi Polinomial Lagrange Program berikut merupakan contoh untuk interpolasi polinomial Lagrange.

// INLAGRA.CPP #include <iostream.h> #include <math.h> #define N 6 main() { double x[N] = {-2, -1, 0, 1, 2, 3}; double y[N] = {-5, 1.5, 1, 0.5, 3, 11.5}; double xi, yi, jumlah, kali; int j, k; cout << "xi = "; cin >> xi; jumlah = 0; for (k=0; k<N; k++) { kali = y[k]; for (j=0; j<N; j++) { if (j!=k) { kali = kali*(xi-x[j])/(x[k]-x[j]); } } jumlah = jumlah+kali; }

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 16

Page 18: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

yi = jumlah; cout << "y interpolasinya = " << yi << endl; }

4. Hitung hasil interpolasi menggunakan polinomial Newton untuk variasi nilai x

sebagaimana soal nomor 1. Interpolasi Spline Kuadratik Program berikut merupakan contoh untuk interpolasi spline kuadratik.

// INSPLINE.CPP #include <iostream.h> #include <stdlib.h> #define N 6 main() { double x[N] = {-2, -1, 0, 1, 2, 3}; double y[N] = {-5, 1.5, 1, 0.5, 3, 11.5}; double z[N]; double xi, yi; int k; z[0] = 0; for (k=1; k<N; k++) { z[k] = -z[k-1]+2*(y[k]-y[k-1])/(x[k]-x[k-1]); cout << z[k] << endl; } cout << "xi = "; cin >> xi; if ((xi < x[0]) || (xi > x[N-1])) { cout << "x berada di luar batas interpolasi" << endl; exit(1); } for (k=0; k<N-1; k++) { if (xi < x[k+1]) { break; } } yi = (z[k+1]-z[k])*(xi-x[k])*(xi-x[k])/(2*(x[k+1]-x[k])) + z[k]*(xi-x[k])+y[k]; cout << "y interpolasinya = " << yi << endl; }

5. Hitung hasil interpolasi menggunakan polinomial Newton untuk variasi nilai x

sebagaimana soal nomor 1 6. Bandingkan antar galat yang diperoleh dari keempat metode di atas. 7. Gunakan keempat metode interpolasi di atas untuk data berikut:

x 1 1.5 2 3 3.5 5 6 10 y 0 1.35 1.73 1.83 1.79 1.61 1.49 1.15

Hitunglah nilai interpolasi untuk x = 1.25, 1.75, 2.5, 3.25, 4.25, 5.5, dan 8. Bandingkan hasilnya untuk keempat metode tersebut.

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 17

Page 19: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL V – INTEGRASI

Metode Pendekatan Jumlah Kiri Program berikut menghitung integral fungsi menggunakan metode pendekatan jumlah kiri.

∫ dxex

// INTKIRI.CPP #include <iostream.h> #include <math.h> double f(double x) { return exp(x); } main() { double a, b, h, x, jumlah, integral; int N; a = 0; b = 1; N = 10; h = (b-a)/N; jumlah = 0; for (int i=0; i<=N-1; i++) { x = a+i*h; jumlah = jumlah+f(x); } integral = h*jumlah; cout << "Integralnya adalah " << integral << endl; }

1. Tuliskan cara menghitung integral fungsi di atas dengan cara analitis (rumus) dengan

batas bawah 0 dan batas atas 1. (jawaban: 1.718282) 2. Menggunakan program di atas, berapakah nilai integral fungsi tersebut untuk variasi

nilai N = 5, 10, 50, dan 100. Berapakah galat masing-masing terhadap nilai yang sebenarnya?

3. Modifikasilah program tersebut untuk metode Pendekatan Jumlah Kanan dan metode Pendekatan Nilai Tengah.

4. Berdasarkan variasi nilai N seperti pada nomor 2, metode manakah yang terbaik di antara ketiga metode tersebut?

Aturan Trapezoidal Program berikut menghitung integral fungsi menggunakan aturan trapezoidal. ∫ dxex

// TRAPEZ.CPP #include <iostream.h> #include <math.h>

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 18

Page 20: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

double f(double x) { return exp(x); } main() { double a, b, h, x, jumlah, integral; int N; a = 0; b = 1; N = 10; h = (b-a)/N; jumlah = 0; for (int i=1; i<=N-1; i++) { x = a+i*h; jumlah = jumlah+2*f(x); } integral = h*(f(a)+jumlah+f(b))/2; cout << "Integralnya adalah " << integral << endl; }

5. Hitunglah integral dan galat berdasarkan variasi nilai N seperti pada nomor 2. Apakah

aturan trapezoidal lebih baik daripada metode sebelumnya? 6. Gunakan program tersebut untuk menghitung nilai integral untuk fungsi f(x) = 1/x antara

x = 1 dan x = 9. (Bandingkan dengan hasil cara analitis: 2.197225) Aturan Simpson Program berikut menghitung integral fungsi f(x) = 1/x menggunakan aturan Simpson.

// SIMPSON.CPP #include <iostream.h> #include <math.h> double f(double x) { return 1/x; } main() { double a, b, h, x, jumlah, integral; int N; a = 1; b = 9; N = 8; h = (b-a)/N; jumlah = 0; for (int i=1; i<=N-1; i++) { x = a+i*h; if (i%2==1) { jumlah = jumlah+4*f(x); } else {

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 19

Page 21: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

jumlah = jumlah+2*f(x); } } integral = h*(f(a)+jumlah+f(b))/3; cout << "Integralnya adalah " << integral << endl; }

7. Variasikan nilai N = 10, 11, 24, 25, 49, dan 50. Simpulkan hasilnya. 8. Buktikan aturan Simpson memberikan hasil lebih baik daripada aturan trapezoidal. Aturan Trapezoidal Berulang Program berikut menghitung integral fungsi f(x) = (x2+x+1)*cos(x) dengan batas [0, π/2] menggunakan aturan trapezoidal berulang. Nilai integral yang sesungguhnya adalah 2.03819743.

// TRAPEZ2.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> #define PI 3.1415926535897932384626433832795 double f(double x) { return (x*x+x+1)*cos(x); } main() { double a, b, h, jumlah; double R[20]; int N; a = 0; b = PI/2; N = 5; R[1] = (b-a)*(f(a)+f(b))/2; cout << " i R[i]" << endl; cout << setiosflags(ios::fixed) << setprecision(8) << " 1" << setw(12) << R[1] << endl; for (int i=1; i<=N-1; i++) { h = (b-a)/pow(2,i); jumlah = 0; for (int k=1; k<=pow(2,i-1); k++) { jumlah = jumlah+f(a+(2*k-1)*h); } R[i+1] = R[i]/2+h*jumlah; cout << setw(2) << (i+1) << setw(12) << R[i+1] << endl; } cout << "Integralnya adalah " << R[N] << endl; cout << "Galatnya adalah " << (R[N]-2.03819743) << endl; }

9. Tuliskan tabel yang dihasilkan oleh program di atas. 10. Berapa iterasi yang diperlukan untuk mencapai galat tak lebih dari 0.00001?

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 20

Page 22: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

Metode Romberg Program berikut menghitung integral fungsi f(x) = (x2+x+1)*cos(x) dengan batas [0, π/2] menggunakan metode Romberg..

// ROMBERG.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> #define PI 3.1415926535897932384626433832795 double f(double x) { return (x*x+x+1)*cos(x); } main() { double a, b, h, jumlah; double R[20][20]; int N; a = 0; b = PI/2; N = 3; R[1][1] = (b-a)*(f(a)+f(b))/2; cout << " i R[i][i]" << endl; cout << setiosflags(ios::fixed) << setprecision(8) << " 1" << setw(12) << R[1][1] << endl; for (int i=1; i<=N-1; i++) { h = (b-a)/pow(2,i); jumlah = 0; for (int k=1; k<=pow(2,i-1); k++) { jumlah = jumlah+f(a+(2*k-1)*h); } R[i+1][1] = R[i][1]/2+h*jumlah; cout << setw(2) << (i+1) << setw(12) << R[i+1][1]; for (int k=1; k<=i; k++) { R[i+1][k+1] = R[i+1][k]+(R[i+1][k]-R[i][k])/(pow(4,k)-1); cout << setw(12) << R[i+1][k+1]; } cout << endl; } cout << "Integralnya adalah " << R[N][N] << endl; cout << "Galatnya adalah " << (R[N][N]-2.03819743) << endl; }

11. Tuliskan tabel yang dihasilkan oleh program di atas. 12. Berapa iterasi yang diperlukan untuk mencapai galat tak lebih dari 0.00001? 13. Gunakan program tersebut untuk menghitung integral fungsi f(x) = 1/x dengan batas

[1,9].

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 21

Page 23: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL VI – TURUNAN FUNGSI

Formula Selisih Maju, Mundur, dan Tengah Program berikut menghitung nilai turunan fungsi f(x) = ln(x) menggunakan formula selisih maju dua titik untuk sebuah nilai x dan h.

// SELMAJU.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> double f(double x) { return log(x); } main() { double x, h, f1; int N; cout << "x = "; cin >> x; cout << "h = "; cin >> h; f1 = (f(x+h)-f(x))/h; cout << setiosflags(ios::fixed) << setprecision(10); cout << "f(x) = " << f(x) << endl; cout << "f(x+h) = " << f(x+h) << endl; cout << "turunan f(x) = " << f1 << endl; }

1. Hitunglah nilai turunan fungsi di atas pada x = 1, untuk h = 0.1, 0.01, 0.001, 0.0001, dan

0.00001. Bandingkan dengan nilai yang sebenarnya (secara analitik). Nilai h manakah yang terbaik?

2. Hitunglah nilai turunan untuk f(x) = ex, pada x = 1, untuk h = 0.2, 0.02, 0.002, dan 0.0002. Bandingkan dengan nilai yang sebenarnya.

3. Modifikasi program tersebut untuk menghitung fungsi pada nomor 2 di atas menggunakan formula selisih mundur dua titik.

4. Modifikasi program tersebut untuk menghitung fungsi pada nomor 2 di atas menggunakan formula selisih tengah dua titik. Manakah di antara ketiga formula tersebut yang memberikan nilai yang paling mendekati nilai yang sebenarnya?

Turunan Orde Dua Program berikut menghitung nilai turunan fungsi f(x) = x3-2x2+x-3 menggunakan formula selisih maju dan tengah.

// SELORDE2.CPP #include <iostream.h> #include <iomanip.h> #include <math.h>

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 22

Page 24: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

double f(double x) { return x*x*x-2*x*x+x-3; } main() { double x, h, f2m, f2t; int N; cout << "x = "; cin >> x; cout << "h = "; cin >> h; f2m = (f(x+2*h)-2*f(x+h)+f(x))/(h*h); f2t = (f(x+2*h)-2*f(x)+f(x-2*h))/(4*h*h); cout << setiosflags(ios::fixed) << setprecision(10); cout << "f''(x) maju = " << f2m << endl; cout << "f''(x) tengah = " << f2t << endl; }

5. Hitunglah nilai turunan orde dua dari fungsi di atas pada x = 1, untuk h = 0.1, 0.01,

0.001, 0.0001, dan 0.00001. Bandingkan dengan nilai yang sebenarnya (secara analitik). Manakah pendekatan yang lebih baik?

6. Hitunglah nilai turunan orde dua untuk f(x) = ex, pada x = 1, untuk h = 0.2, 0.02, 0.002, dan 0.0002. Bandingkan dengan nilai yang sebenarnya.

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 23

Page 25: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL VII – PERSAMAAN DIFERENSIAL SEDERHANA

Metode Euler Program berikut menghitung penyelesaian persamaan diferensial sederhana f'(x) = x+y, untuk y(1) jika y(0) = 1 menggunakan metode Euler. Penyelesaian analitiknya adalah y = 2ex-x-1 dan y(1) = 3.43656366

// EULER.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> double f(double x, double y) { return x+y; } main() { double x, y, h; int n; x = 0.0; y = 1.0; h = 0.2; n = 0; cout << " n xn yn err" << endl; do { cout << setw (4) << n << setiosflags(ios::showpoint | ios::fixed) << setprecision(8) << setw(15) << x << setw(15) << y << setw(15) << (y-(2*exp(x)-x-1)) << endl; x = x+h; y = y+h*f(x,y); n++; } while (x<=1.0001); }

1. Hitunglah nilai penyelesaian persamaan di atas untuk h = 0.2, 0.1, 0.05, 0.01, dan

0.0001. Catatlah nilai y dan error hanya pada x=1. Nilai h manakah yang memberikan hasil terbaik?

2. Modifikasi persamaan di atas untuk menghitung y(1) jika f'(x)=y dan y(0)=1. Penyelesaian analitiknya adalah y = ex dan y(1) = 2.71828183. Gunakan variasi nilai h seperti nomor 1. Apa kesimpulan anda?

Metode Runge-Kutta Program berikut menghitung persoalan pada nomor 2 di atas menggunakan metode Runge-Kutta orde 2 (metode Heun).

// RK2.CPP #include <iostream.h> #include <iomanip.h> #include <math.h>

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 24

Page 26: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

double f(double x, double y) { return y; } main() { double x, y, h, k1, k2; int n; x = 0.0; y = 1.0; h = 0.2; n = 0; cout << " n xn yn err" << endl; do { cout << setw (4) << n << setiosflags(ios::showpoint | ios::fixed) << setprecision(8) << setw(15) << x << setw(15) << y << setw(15) << (y-exp(x)) << endl; x = x+h; k1 = h*f(x,y); k2 = h*f(x+h,y+k1); y = y+(k1+k2)/2; n++; } while (x<=1.0001); }

3. Hitunglah nilai penyelesaian persamaan di atas untuk h = 0.2, 0.1, 0.05, 0.01, dan

0.0001. Catatlah nilai y dan error hanya pada x=1. Manakah yang memberikan hasil lebih baik antara metode Euler dan metode Runge-Kutta orde 2?

Program berikut merupakan modifikasi program di atas untuk menyelesaikan persamaan diferensial sederhana menggunakan metode Runge-Kutta orde 4 (hanya mengganti bagian pendefinisian variabel dan menghitung y pada program di atas)

... double x, y, h, k1, k2, k3, k4; ... k1 = h*f(x,y); k2 = h*f(x+h/2,y+k1/2); k3 = h*f(x+h/2,y+k2/2); k4 = h*f(x+h,y+k3); y = y+(k1+2*k2+2*k3+k4)/6; ...

4. Hitunglah nilai penyelesaian persamaan di atas untuk h = 0.2, 0.1, 0.05, 0.01, dan

0.0001. Catatlah nilai y dan error hanya pada x=1. Apakah hasilnya lebih baik daripada metode Euler dan metode Runge-Kutta orde 2?

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 25

Page 27: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER MODUL VIII – REGRESI

Regresi Linier Program berikut menghitung regresi linier, y = Ax+B, dari pasangan data berikut:

-2

0

2

4

6

8

10

12

-2 0 2 4 6 8

x y -1 10 0 9 1 7 2 5 3 4 4 3 5 0 6 -1

// REGLIN.CPP #include <iostream.h> #include <iomanip.h> main() { int N = 8; double x[] = {-1, 0, 1, 2, 3, 4, 5, 6}; double y[] = {10, 9, 7, 5, 4, 3, 0, -1}; double Sx = 0, Sxx = 0 , Sy = 0, Sxy = 0, A, B; for (int i=0; i<N; i++) { Sx = Sx +x[i]; Sxx = Sxx+x[i]*x[i]; Sy = Sy +y[i]; Sxy = Sxy+x[i]*y[i]; } A = (N*Sxy-Sx*Sy)/(N*Sxx-Sx*Sx); B = (Sxx*Sy-Sx*Sxy)/(N*Sxx-Sx*Sx); cout << "y = Ax + B" << endl; cout << "A = " << A << endl; cout << "B = " << B << endl; }

1. Jalankan program di atas dan tuliskan persamaan regresi linier dari pasangan data di

atas (y = ... x + ...). 2. Tentukan persamaan regresi untuk data eksperimen pengukuran arus transduser sebagai

fungsi linier terhadap temperatur berikut ini.

T (ºC) 0 5 10 20 25 30 40 50 60 80 100 I (mA) 4.0 4.4 6.2 7.5 8.0 9.3 11.0 12.2 14.1 17.5 20.0

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 26

Page 28: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

Metode Linierisasi Data untuk regresi eksponensial & power Program berikut menghitung regresi eksponensial, y = AeBx, dari pasangan data berikut:

x y 0 4.0 1 4.4 2 6.2 3 7.5 4 8.0 5 9.3 6 11.0 7 12.2 8 14.1 9 17.5

10 20.0

y = 4.1891e0.1575x

R2 = 0.98690

5

10

15

20

25

0 2 4 6 8 10

// REGNORM.CPP #include <iostream.h> #include <iomanip.h> #include <math.h> main() { int N = 11; double x[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; double y[] = {4.0, 4.4, 6.2, 7.5, 8.0, 9.3, 11.0, 12.2, 14.1, 17.5, 20.0}; double Sx = 0, Sxx = 0 , Sy = 0, Sxy = 0, A, B; for (int i=0; i<N; i++) { Sx = Sx +x[i]; Sxx = Sxx+x[i]*x[i]; Sy = Sy +log(y[i]); Sxy = Sxy+x[i]*log(y[i]); } A = exp((Sxx*Sy-Sx*Sxy)/(N*Sxx-Sx*Sx)); B = (N*Sxy-Sx*Sy)/(N*Sxx-Sx*Sx); cout << "y = A exp(Bx)" << endl; cout << "A = " << A << endl; cout << "B = " << B << endl; }

3. Jalankan program di atas dan tuliskan persamaan regresi eksponensialnya. 4. Modifikasilah program di atas untuk menentukan persamaan regresi power, y = AxB,

dari pasangan data berikut. Tuliskan persamaan hasilnya.

x y 1 1 2 5 3 15 4 20 5 40 6 55 7 70 8 90 9 120

10 150

020406080

100120140160180

0 2 4 6 8 10

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 27

Page 29: PRAKTIKUM PEMROGRAMAN KOMPUTER 2005 ... PEMROGRAMAN KOMPUTER MODUL II – MENCARI AKAR PERSAMAAN Metode Bisection Program berikut untuk mencari akar persamaan (zeros) y = x4-2x3-4x2+4x+4

PRAKTIKUM PEMROGRAMAN KOMPUTER - IR. BALZA ACHMAD, M.SC.E. 28