Você está na página 1de 24

V.

TUGAS PRAKTIKUM

Keterangan fungsi:
f1(x) = x2-3x-10
f2(x) = sin(x)
f3(x) = x3-3x-20
f4(x) = e-2x-4x
f5(x) = xe-x+cos(2x)

5.1.1 Program 1 - Solusi PNL f1(x) Metode Bisection


Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.0001

float f(float x)
{
return (pow(x,2)-(3*x)-10);
}

void main(void)
{
float a=-1,b=1,c=0;
int r=0;

printf("\nSolusi Persamaan Non Linier - Metode Bisection");


printf("\nf(x) = (x^2)-(3x)-(10)");
printf("\nSelang = [%f,%f]",a,b);
printf("\nEpsilon = %f",e);
printf("\n----------------------------------------------");

if(f(a)*f(b)>0)
printf("\n\nSelang tidak memenuhi syarat cukup akar");
else
{
printf("\n\nr \ta \t\tb \t\tc \t\tf(a) \t\tf(b) \t\tf(c)
\t\t[a-b]");
do
{
c=(a+b)/2;
r++;

printf("\n%d \t%f \t%f \t%f \t%f \t%f \t%f


\t%f",r,a,b,c,f(a),f(b),f(c),fabs(a-b));
Z vbif((f(a)*f(c))<0)
b=c
;
else
a=c;
}
while(fabs(f(c))>e);

printf("\n\nHampiran akar = %f",c);


}
}
Tampilan:

Analisa:
Pencarian akar menggunakan metode bisection ini pertama-tama di cek apakah
syarat keberadaan akar ada atau tidak. Jika ada maka dilajutkan proses lelaran dan
jika tidak (meskipun kemungkinan akar ada) proses tidak dilakukan dan program
langsung berakhir. Proses bisection adalah mengecek dimana selang [a,b] dipotong
di tengahnya oleh c sehingga nantinya di cek kembali selang yang memenuhi syarat
ada akar apakah di [a,c] ataukah di [c,b]. Di program diatas, nilai akar didapat jika
f(c) sudah mendekati nilai 0. Maka didapatlah nilai akar yaitu c. Dengan
menggunakan f1(x) dan batas [-1,1] ternyata tidak memenuhi syarat cukup
keberadaan akar sehingga tidak ada proses bisection untuk permasalahan tersebut.

5.1.2 Program 2 - Solusi PNL f2(x) Metode Bisection


Listing Kode:
#include <
stdio.h>
#include <math.h>
#define e 0.0001

float f(float x)
{
return (sin(x*M_PI/180));
}

void main(void)
{
float a=-45,b=45,c=0;
int r=0;

printf("\nSolusi Persamaan Non Linier - Metode Bisection");


printf("\nf(x) = sin(x)");
printf("\nSelang = [%f,%f]",a,b);
printf("\nEpsilon = %f",e);
printf("\n----------------------------------------------");
...
}
Tampilan:

Analisa:
Pencarian akar sin(x) dengan selang tersebut ternyata sangat cepat, dengan hanya
membutuhkan 1 kali lelaran. Hal ini dikarenakan nilai bagi dua selang pas di angka
0 yang dimana nilai sin(0) adalah nol.

5.1.3 Program 3 - Solusi PNL f3(x) Metode Bisection


Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.0001

float f(float x)
{
return (pow(x,3)-(3*x)-20);
}

void main(void)
{
float a=1,b=4,c=0;
int r=0;

printf("\nSolusi Persamaan Non Linier - Metode Bisection");


printf("\nf(x) = (x^3)-(3x)-(20)");
printf("\nSelang = [%f,%f]",a,b);
printf("\nEpsilon = %f",e);
printf("\n----------------------------------------------");
...
}
Tampilan:

Analisa:
Dalam f3(x) ini terdapat nilai akarnya pada selang yang diberikan. Dengan 16x
proses iterasi barulah nilai absolut f(c) dianggap sudah mendekati nol dimana c
adalah nilai akarnya.

5.1.4 Program 4 - Solusi PNL f4(x) Metode Bisection


Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (pow(M_E,-2*x)-(4*x));
}

void main(void)
{
float a=0,b=1,c=0;
int r=0;

printf("\nSolusi Persamaan Non Linier - Metode Bisection");


printf("\nf(x) = (e^-2x)-(4x)");
printf("\nSelang = [%f,%f]",a,b);
printf("\nEpsilon = %f",e);
printf("\n----------------------------------------------");
...
}
Tampilan:

Analisa:
Terlihat untuk penyelesaian fungsi eksponensial ini lebar selang cukup cepat
mengecil dan galat relatifnya sudah kecil juga perubahan nilai c pun kecil akan
tetapi nilai f(c) nya masih besar. Baru pada iterasi ke 22 nilai f(c) sudah dianggap
kecil dan nilainya mendekati nol.

5.1.5 Program 5 - Solusi PNL f5(x) Metode Bisection


Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return ((x*pow(M_E,-x))+(cos(2*x)));
}

void main(void)
{
float a=-1,b=1,c=0; //Selang lain [1,2] & [-1,1]
int r=0;

printf("\nSolusi Persamaan Non Linier - Metode Bisection");


printf("\nf(x) = (xe^-x)+(cos(2x)");
printf("\nSelang = [%f,%f]",a,b);
printf("\nEpsilon = %f",e);
printf("\n----------------------------------------------");
...
}
Tampilan:

Analisa:
Fungsi f5(x) ini dicari akarnya dalam 3 selang dan hanya selang pertama yang
mengandung akar. Nilai akar berada pada titik 0.973 hanya didapat dengan selang
pertama padahal nilai akar itu juga berada pada selang ke tiga. Terliha di program
ini kekurangan metode bisection yang dimana pengecekan syarat cukup akar tidak
efektif untuk beberapa kasus dimana banyaknya akar dalam selang tersebut ada
genap. Dengan selang ke tiga, program menyimpulkan tidak memenuhi syarat
cukup akar padahal ada akarnya.
5.2.1 Program 1 - Solusi PNL f1(x) Metode Iterasi Titik Tetap
5.2.2 Program 2 - Solusi PNL f2(x) Metode Iterasi Titik Tetap
5.2.3 Program 3 - Solusi PNL f3(x) Metode Iterasi Titik Tetap
5.2.4 Program 4 - Solusi PNL f4(x) Metode Iterasi Titik Tetap
5.2.5 Program 5 - Solusi PNL f5(x) Metode Iterasi Titik Tetap
5.3.1 Program 1 - Solusi PNL f1(x) Metode Newton-Raphson
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f0(float x)
{
return (pow(x,2)-(3*x)-10);
}

float f1(float x)
{
return ((2*x)-3);
}

void main(void)
{
float xo,xn,error=1;
int i=1;
printf("Masukkan nilai xo = ");scanf("%f",&xo);
printf("\nr\txo\txn\tgalat\n");

while(error>e)
{
xn=xo-(f0(xo)/f1(xo));
error=fabs(xn-xo);
printf("%d\t%.2f\t%.2f\t%.5f\n",i,xo,xn,error);
xo=xn;
i++;
}
printf("\nnilai akarnya sebesar %.5f\n",xn);
}
Tampilan:

Analisa:
Dengan metode ini fungsi diiterasi sebanyak 5 kali. Terlihat nilai galat langsung
turun secara drastis sehingga bisa dikatakan laju konvergensi metode ini cepat dari
pada sebelumnya.
5.3.2 Program 2 - Solusi PNL f2(x) Metode Newton-Raphson
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f0(float x)
{
return (sin(x*M_PI/180));
}

float f1(float x)
{
return (cos(x*M_PI/180));
}

void main(void)
{
float xo,xn,error=1;
int i=1;
printf("Masukkan nilai xo = ");scanf("%f",&xo);
printf("\nr\txo\txn\tgalat\n");

while(error>e)
{
xn=xo-(f0(xo)/f1(xo));
error=fabs(xn-xo);
printf("%d\t%.2f\t%.2f\t%.5f\n",i,xo,xn,error);
xo=xn;
i++;
}
printf("\nnilai akarnya sebesar %.5f\n",xn);
}
Tampilan:

Analisa:
Untuk fungsi sinusoida ini didapat iterasi yang dilakukan sangat banyak mencapai
>600 dikarenakan untuk pendekatan akar ini sulit karena fungsi berubah ubah
secara periodik sehingga pendekatannya pun naik turun sebelum mencapai error
yang sudah cukup kecil.
5.3.3 Program 3 - Solusi PNL f3(x) Metode Newton-Raphson
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f0(float x)
{
return (pow(x,3)-(3*x)-20);
}

float f1(float x)
{
return ((3*pow(x,2))-3);
}

void main(void)
{
float xo,xn,error=1;
int i=1;
printf("Masukkan nilai xo = ");scanf("%f",&xo);
printf("\nr\txo\txn\tgalat\n");

while(error>e)
{
xn=xo-(f0(xo)/f1(xo));
error=fabs(xn-xo);
printf("%d\t%.2f\t%.2f\t%.5f\n",i,xo,xn,error);
xo=xn;
i++;
}
printf("\nnilai akarnya sebesar %.5f\n",xn);
}
Tampilan:

Analisa:
Teramati bahwa nilai x0 dan xn untuk iterasi terakhir sudah tidak banyak perubahan
akan tetapi iterasi tetap dilanjutkan karena nilai selang errornya yang belum cukup
untuk menjadi syarat berhenti.
5.3.4 Program 4 - Solusi PNL f4(x) Metode Newton-Raphson
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f0(float x)
{
return (pow(M_E,-2*x)-(4*x));
}

float f1(float x)
{
return ((0.5*pow(M_E,-2*x))-4);
}

void main(void)
{
float xo,xn,error=1;
int i=1;
printf("Masukkan nilai xo = ");scanf("%f",&xo);
printf("\nr\txo\txn\tgalat\n");

while(error>e)
{
xn=xo-(f0(xo)/f1(xo));
error=fabs(xn-xo);
printf("%d\t%.2f\t%.2f\t%.5f\n",i,xo,xn,error);
xo=xn;
i++;
}
printf("\nnilai akarnya sebesar %.5f\n",xn);
}
Tampilan:

Analisa:
Sama seperti kasus sebelumnya, nilai x0 dan xn sudah tidak banyak berubah tetapi
syarat berhenti iterasi yang didefinisikan sebelumnya belum tercapai sehingga
perhitungan tetap dilakukan
5.3.5 Program 5 - Solusi PNL f5(x) Metode Newton-Raphson
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f0(float x)
{
return ((x*pow(M_E,-x))+(cos(2*x)));
}

float f1(float x)
{
return ((-x*pow(M_E,-x))-(2*sin(2*x)));
}

void main(void)
{
float xo,xn,error=1;
int i=1;
printf("Masukkan nilai xo = ");scanf("%f",&xo);
printf("\nr\txo\txn\tgalat\n");

while(error>e)
{
xn=xo-(f0(xo)/f1(xo));
error=fabs(xn-xo);
printf("%d\t%.2f\t%.2f\t%.5f\n",i,xo,xn,error);
xo=xn;
i++;
}
printf("\nnilai akarnya sebesar %.5f\n",xn);
}
Tampilan:

Analisa:
Nilai akar campuran fungsi eksponensial dengan sinusoid ini didapat dengan cepat
yaitu 5 kali iterasi dengan secara kasar nilai akar bisa ditarik sampai iterasi ke 3
karena nilai nya sudah mendekati. Akan tetapi nilai batas error yang terdefinisi
cukup kecil sehingga perlu di iterasi kembali.
VI. TUGAS AKHIR
6.1.1 Program 1 - Solusi PNL f1(x) Metode Secant
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (pow(x,2)-(3*x)-10);
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);
xo=x1;
x1=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}

Tampilan:
6.1.2 Program 2 - Solusi PNL f2(x) Metode Secant
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (sin(x*M_PI/180));
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);
xo=x1;
x1=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}

Tampilan:
6.1.3 Program 3 - Solusi PNL f3(x) Metode Secant
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (pow(x,3)-(3*x)-20);
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);
xo=x1;
x1=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}

Tampilan:
6.1.4 Program 4 - Solusi PNL f4(x) Metode Secant
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (pow(M_E,-2*x)-(4*x));
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);
xo=x1;
x1=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}

Tampilan:
6.1.5 Program 5 - Solusi PNL f5(x) Metode Secant
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return ((x*pow(M_E,-x))+(cos(2*x)));
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);
xo=x1;
x1=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}

Tampilan:
6.2.1 Program 1 - Solusi PNL f1(x) Metode Regulasi Falsi
Listing Kode:
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (pow(x,2)-(3*x)-10);
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);

if(f(x0)*f(xn)<0)
x1=xn;
else
x0=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}
6.2.2 Program 2 - Solusi PNL f2(x) Metode Regulasi Falsi
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (sin(x*M_PI/180));
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);

if(f(x0)*f(xn)<0)
x1=xn;
else
x0=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}
6.2.3 Program 3 - Solusi PNL f3(x) Metode Regulasi Falsi
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (pow(x,3)-(3*x)-20);
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);

if(f(x0)*f(xn)<0)
x1=xn;
else
x0=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}
6.2.4 Program 4 - Solusi PNL f4(x) Metode Regulasi Falsi
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return (pow(M_E,-2*x)-(4*x));
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);

if(f(x0)*f(xn)<0)
x1=xn;
else
x0=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}
6.2.5 Program 5 - Solusi PNL f5(x) Metode Regulasi Falsi
#include <stdio.h>
#include <math.h>
#define e 0.000001

float f(float x)
{
return ((x*pow(M_E,-x))+(cos(2*x)));
}

void main(void)
{
float xo,x1,xn,error=1;
int i=1;

printf("Masukkan nilai x0 = ");scanf("%f",&xo);


printf("Masukkan nilai x1 = ");scanf("%f",&x1);
printf("\nr\tX0\tX1\tXbar\tError\n");

while(error>e)
{
xn=x1-((f(x1)*(x1-xo))/(f(x1)-f(xo)));
error=fabs(xn-x1);
printf("%d\t%.2lf\t%.2lf\t%.2f\t%.5f\n",i,xo,x1,xn,error);

if(f(x0)*f(xn)<0)
x1=xn;
else
x0=xn;
i++;
}

printf("\nnilai akarnya sebesar %.2lf\n",xn);


}
6.3 Perbandingan Metode Untuk Persamaan dan Parameter Penyelesaian yang
Sama

Metode Nilai akar Iterasi Galat Akhir

Bisection 0,18 10 0,00050

Iterasi Titik tetap 0,18 9 0,00051


Newton Raphson 0,18 6 0,00081

Regula Falsi 0,18 5 0,00026

Secant 0,18 5 0,00026

Analisa:
Penyelesaian solusi akar yang diberikan menghasilkan tabel perbandingan seperti
yang ada di atas. Sebuah fungsi f(x) dalam kasus ini memiliki nilai akar yaitu 0.18.
Nilai akar tercepat didapatkan melalui metode Regula Falsi dan Secant. Kedua
metode ini laju konvergensinya cepat dan memiliki nilai error yang lebih kecil
dibandung metode lainnya. Baik regula falsi dan secant dalam proses pendekatan
akarnya memakai bantuan gradien dimana nilai f(a) dan f(b) untuk selang yang
dihitung turut dipertimbangkan sehingga laju konvergensinya cepat. Terlihat pula
dari urutan banyaknya iterasi, secara teoritik bisection memang metode yang lambat
dalam mencari akar karena hanya mengandalkan pembagian selang sama besar.
Selanjutnya sampai akhir adalah perbaikan dari metode metode sebelumnya
sehingga proses iterasi dan nilai error lebih sedikit.
VII. KESIMPULAN
Suatu persamaan non-linier yang kompleks dapat dicari solusinya berupa nilai akar
dengan bantuan numerik. Inti dari penyelesaian numerik dari pencarian akar suatu
fungsi ini adalah mencari nilai x yang mana nilai f(x)=0 atau mendekati nol.
Perbedaan tiap metode adalah seberapa tepat pencarian akar tersebut dilakukan dan
seberapa cepat hampiran nilai x tersebut didapat. Masing masing metode
mempunyai kelebihan dan kekurangan. Dalam hal ini metode terbuka lebih cepat
dan tepat dalam mencari solusi akar dari suatu persamaan tapi tidak selalu
konvergen dan begitu juga dengan metode tertutup, konvergen tetapi tidak selalu
cepat menemukan akarnya.

Você também pode gostar