Nim : 0708002010058
Prodi : Inskom
Tugas Komputasi Numerik.!

Program C++ tentang Metode Bisection :
Program berikut meggunakan algoritma metode Bisection untuk menyelesaikan persamaan non-linear. Program akan dicoba untuk menyelesaikan persamaan berikut
tan (x) – x – 0,5 =0 .
Input :
// Program 1.1a
// Metode Bisection
#include
#include
/* 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;
printf("Batas bawah = "); scanf("%f",&a);
printf("Batas atas = "); scanf("%f",&b);
printf("Toleransi = "); scanf("%f",&tol);
printf("Jumlah iterasi maksimum = "); scanf("%d",&max_iter);
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");
}
}
Output :
Eksekusi program dilakukan dalam selang interval [0,1], toleransi 10-7 dan jumlah iterasi maksimum sebanyak 30. Hasil eksekusi program yaitu :
Batas bawah = 0
Batas atas = 1
Toleransi = 0.0000001
Jumlah iterasi maksimum = 30
It. a m b f(a) f(b) abs[f(b)-f(a)]/2
1 0.00000 0.50000 1.00000 -0.50000 -0.45370 2.79e-01
2 0.50000 0.75000 1.00000 -0.45370 -0.31840 2.56e-01
3 0.75000 0.87500 1.00000 -0.31840 -0.17758 1.88e-01
4 0.87500 0.93750 1.00000 -0.17758 -0.07543 1.17e-01
5 0.93750 0.96875 1.00000 -0.07543 -0.01345 6.64e-02
6 0.96875 0.98438 1.00000 -0.01345 0.02078 3.54e-02
7 0.96875 0.97656 0.98438 -0.01345 0.00337 1.71e-02
8 0.96875 0.97266 0.97656 -0.01345 -0.00511 8.41e-03
9 0.97266 0.97461 0.97656 -0.00511 -0.00089 4.24e-03
10 0.97461 0.97559 0.97656 -0.00089 0.00124 2.13e-03
11 0.97461 0.97510 0.97559 -0.00089 0.00018 1.06e-03
12 0.97461 0.97485 0.97510 -0.00089 -0.00036 5.31e-04
13 0.97485 0.97498 0.97510 -0.00036 -0.00009 2.66e-04
14 0.97498 0.97504 0.97510 -0.00009 0.00004 1.33e-04
15 0.97498 0.97501 0.97504 -0.00009 -0.00002 6.64e-05
16 0.97501 0.97502 0.97504 -0.00002 0.00001 3.32e-05
17 0.97501 0.97501 0.97502 -0.00002 -0.00001 1.66e-05
18 0.97501 0.97502 0.97502 -0.00001 0.00000 8.30e-06
19 0.97501 0.97502 0.97502 -0.00001 -0.00000 4.15e-06
20 0.97502 0.97502 0.97502 -0.00000 -0.00000 2.07e-06
21 0.97502 0.97502 0.97502 -0.00000 -0.00000 1.04e-06
22 0.97502 0.97502 0.97502 -0.00000 0.00000 5.19e-07
23 0.97502 0.97502 0.97502 -0.00000 -0.00000 2.59e-07
24 0.97502 0.97502 0.97502 -0.00000 0.00000 1.30e-07
Toleransi terpenuhi
Hasil akhir = 0.975017
Dari hasil eksekusi ini didapat hasil x = 0.975017. Hasil ini tercapai setelah iterasi ke-24.
Program C++ Tentang Metode Newton-Raphson :
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
Input :
// Program 1.4a
// Metode Newton-Raphson
#include
#include
/* 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");
}
Output :
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
It. x f(x) epsilon
1 -0.50000 0.35653 5.00e-01
2 -0.39494 0.01451 1.05e-01
3 -0.39028 0.00003 4.66e-03
4 -0.39027 0.00000 9.33e-06
Toleransi terpenuhi
Hasil akhir = -0.390272
Dari hasil eksekusi ini didapat hasil x = -0.390272 yang tercapai setelah iterasi ke-4. Dapat dilihat bahwa untuk kasus ini penggunaan metode Newton-Rapson memberikan hasil yang lebih cepat daripada metode Iterasi.
Program C++ Tentang Metode secant :
Program berikut menggunakan algoritma metode Secant untuk menyelesaikan persamaan non-linear. Program kembali akan dicoba untuk menyelesaikan persamaan :
F(x) = ex + x2 - 3x - 2 = 0
Input :
// Program 1.5a
// Metode Secant
#include
#include
/* Daftar Variable
x0 = harga awal
x1 = harga kedua
tol = toleransi
max_iter = jumlah iterasi maksimum */
float x0,x1,tol;
int max_iter;
float f(float x)
{
return x*x - 3*x + exp(x) - 2;
}
void main()
{
int it;
float epsilon,xb;
printf("Harga awal = "); scanf("%f",&x0);
printf("Harga kedua = "); scanf("%f",&x1);
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 = 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);
x0 = x1;
x1 = 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");
}
Output :
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
Harga kedua = -0.1
Toleransi = 0.00001
Jumlah iterasi maksimum = 20
It. x f(x) epsilon
1 -0.46547 0.24091 4.65e-01
2 -0.37966 -0.03278 2.80e-01
3 -0.38994 -0.00103 7.55e-02
4 -0.39027 0.00000 1.06e-02
5 -0.39027 0.00000 3.33e-04
6 -0.39027 0.00000 1.52e-06
Toleransi terpenuhi
Hasil akhir = -0.390272
Dari hasil eksekusi ini didapat hasil x = -0.390272, sama dengan hasil yang didapat dengan menggunakan metode iterasi dan metode Newton-Raphson. Hasil ini tercapai setelah iterasi ke-6. Walaupun konvergensi hasil perhitungan lebih lambat dibandinggkan dengan penggunaan metode Newton-Raphson, namun metode ini memiliki kelebihan karena tidak memerlukan penentuan turunan fungsi.
No comments:
Post a Comment