laporan akhir - solusi persamaan non linier

25
LAPORAN AKHIR SOLUSI PERSAMAAN NON LINIER METNUM -1 SUNNY INEZA PUTRI 140310110017 Program Metode Bisection a. x 3 + 4x 2 10 = 0, untuk 1 ≤x≤2 Listing program: #include<stdio.h> #include<conio.h> #include<math.h> float f(float x) { float d; d = (x*x*x) + (4*x*x) - 10; return d; } main() { float a,b,c,toleransi,eror,m; int i=0; printf("Masukkan batas bawah (x1) = "); scanf("%f", &a); printf("Masukkan batas atas (x2) = "); scanf("%f", &b); printf("Masukkan toleransi = "); scanf("%f", &toleransi); if (f(a)*f(b) > 0) { printf("Tidak dapat menemukan akar"); } else { printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x1)*f(x3)\teror\n"); do { c = (a+b)/2; eror = (fabs(b-a))/2; m = f(a)*f(c); printf("%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\t%.3f\n",i,a,b ,c,f(a),f(b),m,eror); if (f(a)*f(c) > 0)

Upload: muhamad-bayu-perkasa

Post on 25-Oct-2015

76 views

Category:

Documents


6 download

DESCRIPTION

lapak metnum SPNL

TRANSCRIPT

Page 1: Laporan Akhir - Solusi Persamaan Non Linier

LAPORAN AKHIR

SOLUSI PERSAMAAN NON LINIER

METNUM -1

SUNNY INEZA PUTRI

140310110017

Program Metode Bisection

a. x3 + 4x

2 – 10 = 0, untuk 1 ≤x≤2

Listing program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

float d;

d = (x*x*x) + (4*x*x) - 10;

return d;

}

main()

{

float a,b,c,toleransi,eror,m;

int i=0;

printf("Masukkan batas bawah (x1) = "); scanf("%f", &a);

printf("Masukkan batas atas (x2) = "); scanf("%f", &b);

printf("Masukkan toleransi = "); scanf("%f", &toleransi);

if (f(a)*f(b) > 0)

{

printf("Tidak dapat menemukan akar");

}

else

{

printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x1)*f(x3)\teror\n");

do

{

c = (a+b)/2;

eror = (fabs(b-a))/2;

m = f(a)*f(c);

printf("%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\t%.3f\n",i,a,b

,c,f(a),f(b),m,eror);

if (f(a)*f(c) > 0)

Page 2: Laporan Akhir - Solusi Persamaan Non Linier

{a=c;}

else

{b=c;}

i++;

}

while (eror > toleransi);

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

printf("Banyaknya iterasi = %d", i);

}

getch();

return 0;

}

Tampilan:

b. 3x – ex = 0, untuk 1 ≤x≤2

Listing program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

float d;

d = (3*x)-exp(x);

return d;

}

main()

{

float a,b,c,toleransi,eror,m;

int i=0;

Page 3: Laporan Akhir - Solusi Persamaan Non Linier

printf("Masukkan batas bawah (x1) = "); scanf("%f", &a);

printf("Masukkan batas atas (x2) = "); scanf("%f", &b);

printf("Masukkan toleransi = "); scanf("%f", &toleransi);

if (f(a)*f(b) > 0)

{

printf("Tidak dapat menemukan akar");

}

else

{

printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x1)*f(x3)\teror\n");

do

{

c = (a+b)/2;

eror = (fabs(b-a))/2;

m = f(a)*f(c);

printf("%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\t%.3f\n",i,a,b

,c,f(a),f(b),m,eror);

if (f(a)*f(c) > 0)

{a=c;}

else

{b=c;}

i++;

}

while (eror > toleransi);

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

printf("Banyaknya iterasi = %d", i);

}

getch();

return 0;

}

Tampilan:

Page 4: Laporan Akhir - Solusi Persamaan Non Linier

c. x2 – 4x – 4 – ln x = 0, untuk 1 ≤x≤2 dan 2≤x≤4

Listing program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

float d;

d = (x*x)-(4*x)-4-log(x);

return d;

}

main()

{

float a,b,c,toleransi,eror,m;

int i=0;

printf("Masukkan batas bawah (x1) = "); scanf("%f", &a);

printf("Masukkan batas atas (x2) = "); scanf("%f", &b);

printf("Masukkan toleransi = "); scanf("%f", &toleransi);

if (f(a)*f(b) > 0)

{

printf("Tidak dapat menemukan akar");

}

else

{

printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x1)*f(x3)\teror\n");

do

{

c = (a+b)/2;

Page 5: Laporan Akhir - Solusi Persamaan Non Linier

eror = (fabs(b-a))/2;

m = f(a)*f(c);

printf("%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\t%.3f\n",i,a,b

,c,f(a),f(b),m,eror);

if (f(a)*f(c) > 0)

{a=c;}

else

{b=c;}

i++;

}

while (eror > toleransi);

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

printf("Banyaknya iterasi = %d", i);

}

getch();

return 0;

}

Tampilan:

Untuk (1,2)

Page 6: Laporan Akhir - Solusi Persamaan Non Linier

Untuk (2,4)

d. x cos x – 2x2 + 3x – 1 = 0, untuk 0.2≤x≤0.3 dan 1 .2≤x≤1.3

Listing program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

float d;

d = (x*cos(x))-(2*x*x)+(3*x)-1;

return d;

}

main()

{

float a,b,c,toleransi,eror,m;

int i=0;

printf("Masukkan batas bawah (x1) = "); scanf("%f", &a);

printf("Masukkan batas atas (x2) = "); scanf("%f", &b);

printf("Masukkan toleransi = "); scanf("%f", &toleransi);

if (f(a)*f(b) > 0)

{

printf("Tidak dapat menemukan akar");

}

else

{

printf("\ni\tx1\tx2\tx3\tf(x1)\tf(x2)\tf(x1)*f(x3)\teror\n");

do

{

Page 7: Laporan Akhir - Solusi Persamaan Non Linier

c = (a+b)/2;

eror = (fabs(b-a))/2;

m = f(a)*f(c);

printf("%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t\t%.3f\n",i,a,b

,c,f(a),f(b),m,eror);

if (f(a)*f(c) > 0)

{a=c;}

else

{b=c;}

i++;

}

while (eror > toleransi);

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

printf("Banyaknya iterasi = %d", i);

}

getch();

return 0;

}

Tampilan:

Analisa metode bisection:

Dengan menggunakan metode bisection, iterasi yang dihasilkan cukup banyak dan kita

harus mengetahui selang yang tepat untuk medapatkan akar. Karena ada persamaan yang

hanya mempunyai satu selang dan ada juga yang mempunyai beberapa selang. Semakin

kecil toleransi yang kita tentukan maka semakin banyak iterasi yang dihasilkan.

Program Metode Iterasi Titik Tetap

a. x = g1(x) = x – x3 – 4x

2 + 10

Page 8: Laporan Akhir - Solusi Persamaan Non Linier

Listing Program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

return ((x)-(x*x*x)-(4*x*x)+10);

}

main()

{

int i = 0;

float a,b,tol,er;

printf("Masukkan x1 : "); scanf("%f", &a);

printf("Masukkan toleransi : "); scanf("%f", &tol);

printf("i\ta\t\t|\tg(x)\t\t|\td\n");

do

{

i = i+1;

b = f(a);

er = fabs(b-a);

printf("%d\t%f\t| %f\t| %f\n", i,a,b,er);

a = b;

}

while (er>tol);

printf("Nilai aproksimasinya adalah : %f\n", b);

printf("Banyaknya iterasi : %d\n\n",i);

getch();

return 0;

}

Tampilan:

Page 9: Laporan Akhir - Solusi Persamaan Non Linier

b. x = g2(x) = 10

𝑥− 4𝑥

1

2

Listing Program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

return (pow(((10/x)-(4*x)),0.5));

}

main()

{

int i = 0;

float a,b,tol,er;

printf("Masukkan x1 : "); scanf("%f", &a);

printf("Masukkan toleransi : "); scanf("%f", &tol);

printf("i\ta\t\t|\tg(x)\t|\td\n");

do

{

i = i+1;

b = f(a);

er = fabs(b-a);

printf("%d\t%f\t| %f\t| %f\n", i,a,b,er);

a = b;

}

while (er>tol);

Page 10: Laporan Akhir - Solusi Persamaan Non Linier

printf("Nilai aproksimasinya adalah : %f\n", b);

printf("Banyaknya iterasi : %d\n\n",i);

getch();

return 0;

}

Tampilan:

c. x = g3(x) = 1

2 10 − 𝑥3

1

2

Listing Program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

return (0.5*(pow((10-(x*x*x)),0.5)));

}

main()

{

int i = 0;

float a,b,tol,er;

printf("Masukkan x1 : "); scanf("%f", &a);

printf("Masukkan toleransi : "); scanf("%f", &tol);

printf("i\ta\t\t|\tg(x)\t|\td\n");

do

{

Page 11: Laporan Akhir - Solusi Persamaan Non Linier

i = i+1;

b = f(a);

er = fabs(b-a);

printf("%d\t%f\t| %f\t| %f\n", i,a,b,er);

a = b;

}

while (er>tol);

printf("Nilai aproksimasinya adalah : %f\n", b);

printf("Banyaknya iterasi : %d\n\n",i);

getch();

return 0;

}

Tampilan:

d. x = g4(x) = 10

4+𝑥

1

2

Listing Program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

float f(float x)

{

return (pow((10/(4+x)),0.5));

}

main()

{

int i = 0;

Page 12: Laporan Akhir - Solusi Persamaan Non Linier

float a,b,tol,er;

printf("Masukkan x1 : "); scanf("%f", &a);

printf("Masukkan toleransi : "); scanf("%f", &tol);

printf("i\ta\t\t|\tg(x)\t|\td\n");

do

{

i = i+1;

b = f(a);

er = fabs(b-a);

printf("%d\t%f\t| %f\t| %f\n", i,a,b,er);

a = b;

}

while (er>tol);

printf("Nilai aproksimasinya adalah : %f\n", b);

printf("Banyaknya iterasi : %d\n\n",i);

getch();

return 0;

}

Tampilan:

e. x = g5(x) = x - 𝑥 3+4𝑥2−10

3𝑥2+8𝑥

Listing Program:

#include<stdio.h>

#include<conio.h>

#include<math.h>

Page 13: Laporan Akhir - Solusi Persamaan Non Linier

float f(float x)

{

return (x-(((x*x)+(4*x*x)-10)/((3*x*x)+(8*x))));

}

main()

{

int i = 0;

float a,b,tol,er;

printf("Masukkan x1 : "); scanf("%f", &a);

printf("Masukkan toleransi : "); scanf("%f", &tol);

printf("i\ta\t\t|\tg(x)\t|\td\n");

do

{

i = i+1;

b = f(a);

er = fabs(b-a);

printf("%d\t%f\t| %f\t| %f\n", i,a,b,er);

a = b;

}

while (er>tol);

printf("Nilai aproksimasinya adalah : %f\n", b);

printf("Banyaknya iterasi : %d\n\n",i);

getch();

return 0;

}

Tampilan:

Page 14: Laporan Akhir - Solusi Persamaan Non Linier

Analisa metode iterasi titik tetap:

Dengan metode ini kita tidak menggunakan 2 titik awal, tetapi hanya satu titik awal.

Banyak iterasinya bergantung pada seberapa tepat kita memilih titik awal tersebut. Jika

titik tersebut ternyata konvergen makan iterasinya akan lebih cepat.

Program Metode Newton-Raphson

a. x3 + 4x

2 – 10 = 0, untuk 1 ≤x≤2

Listing Program:

#include <stdio.h>

#include <math.h>

#include <conio.h>

float f(float x)

{

return (x*x*x) + (4*x*x) - 10;

}

float g(float x)

{

return (3*x*x) + (8*x);

}

main()

{

float a,b,er,tol;

int i=0;

printf("Masukkan nilai titik awal (x1) = ");

scanf("%f",&a);

printf("Masukkan nilai toleransi = ");

scanf("%f",&tol);

Page 15: Laporan Akhir - Solusi Persamaan Non Linier

printf("i.\t\tx1\t\t|x2 -x1|\n");

printf("%d\t\t%.3f\t\t-\n",i,a);

if(g(a) == 0)

{

printf("nilai turunan f(x1) = 0 tidak bisa melakukan

perhitungan");

}

else

{

do

{

b = a - (f(a)/g(a));

er = fabs(b-a);

printf("%d\t\t%.3f\t\t%.3f\n",i+1,b,er);

a=b;

i++;

}

while( er > tol );

printf("solusi akarnya adalah = %f\n",b);

printf("banyaknya iterasi = %d",i+1);

}

getch();

}

Tampilan:

b. 3x – ex = 0, untuk 1 ≤x≤2

Listing Program:

#include <stdio.h>

Page 16: Laporan Akhir - Solusi Persamaan Non Linier

#include <math.h>

#include <conio.h>

float f(float x)

{

return (3*x) - exp(x);

}

float g(float x)

{

return 3 - exp(x);

}

main()

{

float a,b,er,tol;

int i=0;

printf("Masukkan nilai titik awal (x1) = ");

scanf("%f",&a);

printf("Masukkan nilai toleransi = ");

scanf("%f",&tol);

printf("i.\t\tx1\t\t|x2 -x1|\n");

printf("%d\t\t%.3f\t\t-\n",i,a);

if(g(a) == 0)

{

printf("nilai turunan f(x1) = 0 tidak bisa melakukan

perhitungan");

}

else

{

do

{

b = a - (f(a)/g(a));

er = fabs(b-a);

printf("%d\t\t%.3f\t\t%.3f\n",i+1,b,er);

a=b;

i++;

}

while( er > tol );

printf("solusi akarnya adalah = %f\n",b);

printf("banyaknya iterasi = %d",i+1);

}

getch();

Page 17: Laporan Akhir - Solusi Persamaan Non Linier

}

Tampilan:

c. x2 – 4x – 4 – ln x = 0, untuk 1 ≤x≤2 dan 2≤x≤4

Listing Program:

#include <stdio.h>

#include <math.h>

#include <conio.h>

float f(float x)

{

return (x*x) - (4*x) - 4 - log(x);

}

float g(float x)

{

return (2*x) - 4 - (1/x);

}

main()

{

float a,b,er,tol;

int i=0;

printf("Masukkan nilai titik awal (x1) = ");

scanf("%f",&a);

printf("Masukkan nilai toleransi = ");

scanf("%f",&tol);

printf("i.\t\tx1\t\t|x2 -x1|\n");

printf("%d\t\t%.3f\t\t-\n",i,a);

if(g(a) == 0)

Page 18: Laporan Akhir - Solusi Persamaan Non Linier

{

printf("nilai turunan f(x1) = 0 tidak bisa melakukan

perhitungan");

}

else

{

do

{

b = a - (f(a)/g(a));

er = fabs(b-a);

printf("%d\t\t%.3f\t\t%.3f\n",i+1,b,er);

a=b;

i++;

}

while( er > tol );

printf("solusi akarnya adalah = %f\n",b);

printf("banyaknya iterasi = %d",i+1);

}

getch();

}

Tampilan:

d. x cos x – 2x2 + 3x – 1 = 0, untuk 0.2≤x≤0.3 dan 1 .2≤x≤1.3

Listing Program:

#include <stdio.h>

#include <math.h>

#include <conio.h>

float f(float x)

{

Page 19: Laporan Akhir - Solusi Persamaan Non Linier

return (x*cos(x))-(2*x*x)+(3*x)-1;

}

float g(float x)

{

return cos(x)-(x*sin(x))-(4*x)+3;

}

main()

{

float a,b,er,tol;

int i=0;

printf("Masukkan nilai titik awal (x1) = ");

scanf("%f",&a);

printf("Masukkan nilai toleransi = ");

scanf("%f",&tol);

printf("i.\t\tx1\t\t|x2 -x1|\n");

printf("%d\t\t%.3f\t\t-\n",i,a);

if(g(a) == 0)

{

printf("nilai turunan f(x1) = 0 tidak bisa melakukan

perhitungan");

}

else

{

do

{

b = a - (f(a)/g(a));

er = fabs(b-a);

printf("%d\t\t%.3f\t\t%.3f\n",i+1,b,er);

a=b;

i++;

}

while( er > tol );

printf("solusi akarnya adalah = %f\n",b);

printf("banyaknya iterasi = %d",i+1);

}

getch();

}

Tampilan:

Page 20: Laporan Akhir - Solusi Persamaan Non Linier

Analisa metode Newton-Raphson:

Dengan metode ini akan diperoleh solusi yang lebih cepat dibandingkan dengan metode

lain.

TUGAS AKHIR

1. Buatlah progam untuk mencari solusi persamaan nonlinear menggunakan metode

secant dan regula falsi.

Metode secant

Listing program: #include<stdio.h>;

#include<conio.h>;

#include<math.h>;

float f(float x)

{

return (x*x*x) + (4*x*x) - 10;

}

main ()

{

int iter, max;

float er, xb, x0, x1, tol;

printf("Masukan Nilai a : "); scanf("%f",&x0);

printf("Masukan Nilai b : ");scanf("%f",&x1);

printf("Masukan Nilai Toleransi : ");scanf("%f",&tol);

printf("Jumlah Iterasi Maksimum : ");scanf("%d",&max);

iter = 0;

printf("\n");

printf(" I\t x\t f(x)\t error\n");

printf("\n");

do

{

Page 21: Laporan Akhir - Solusi Persamaan Non Linier

iter = iter +1;

xb = x1 - f(x1)*(x1 - x0) / (f(x1) - f(x0));

er = fabs(xb-x0);

printf(" %d\t %.3f\t %.3f\t %.3e\n",iter, xb, f(xb),

er);

printf("\n");

x0 = x1;

x1 = xb;

}

while(iter <= max && er > tol);

if(iter <= max)

{

printf("\n");

printf("Toleransi terpenuhi\n\n");

printf("Hasil akhir=%g\n",xb);

printf("\n");

}

else

printf("Toleransi tidak terpenuhi\n");

getch();

}

Tampilan:

Metode regula falsi Listing program: #include<stdio.h>

#include<conio.h>

#include<math.h>

#define fungsi x*x-84

float f(float x)

{

return(x*x*x) + (4*x*x) -10;

}

main()

Page 22: Laporan Akhir - Solusi Persamaan Non Linier

{

float a,b,c,tol;

int max,i,status;

i=1;

status=1;

printf("Masukkan nilai a : ");scanf("%f",&a);

printf("Masukkan nilai b : ");scanf("%f",&b);

printf("Masukkan nilai tol : ");scanf("%f",&tol);

printf("Iterasi maksimal : ");scanf("%i",&max);

puts("\n");

printf("No\ta\tc\tb\tf(a)\tf(c)\tf(b)\n");

if (f(a)*f(b) < 0)

{

do

{

c=a-(f(a)*(b-a))/(f(b)-f(a));

printf("%i\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\n",i,a,c,b,f(a),

f(c),f(b));

if ( f(a)*f(c) == 0)

{

status=0;

}

else

{

if (f(a)*f(c) < 0)

b=c;

else

a=c;

if (tol > fabs(c))

status=0;

if (i >= max )

status=0;

}

i++;

}

while(status==1);

}

else

{

puts("Maaf, masukkan kembali nilai a dan b. Karena

tidak mengandung akar");

getch();

}

puts("\n");

printf("Akar = %.3f", c);

getch();

}

Tampilan:

Page 23: Laporan Akhir - Solusi Persamaan Non Linier

2. Buatlah tabel perbandingan untuk semua metoda dalam menghasilkan solusi dari x3 +

4x2 – 10 = 0 (parameter yang digunakan harus sama).

Metode bisection

Metode iterasi titik tetap

Page 24: Laporan Akhir - Solusi Persamaan Non Linier

Metode Newton-Raphson

3. Buatlah summary (tidak lebih dari satu halaman) untuk menganalisa dari semua

metode yang telah dikerjakan.

Dalam menentukan solusi persamaan nonlinear dapat menggunakan metode. Seperti

yang tercantum dalam modul praktikum metnum-1 ada tiga macam metode, yaitu

metode bisection, metode iterasi titik tetap, dan metode Newton-Raphson. Dalam

metode-metode tersebut dapat dibagi menjadi dua macam metode secara global, yaitu

metode tertutup dan terbuka. Dalam metode tertutup menggukan dua titik awal, dan

untuk mencari solusinya diantara selang nilai tersebut. Sedangkan dalam metode

terbuka hanya menggunakan satu titik awal. Jika ternyata titik awal tersebut

konvergen maka akan lebih cepat menggunakan metode terbuka dibandingkan

dengan metode tertutup.

Metode bisection atau metode bagi dua adalah metode yang mencari titik tengah dari

selang dan mencari titik tengah baru dari selang baru dan seterusnya untuk mendekati

solusimya.

Metode iterasi menggunakan turunan dari fungsinya agar mendekati solusinya.

Page 25: Laporan Akhir - Solusi Persamaan Non Linier

Sedangkan metode Newton-Raphson juga menurunkan dari fungsi tersebut untuk

mendekati solusinya.

KESIMPULAN

Dalam metode untuk menntukan solusi persamaan dapat digunakan beberapa metode.

Metode bisection kita harus menentukan dua titik awal yang mengurung akar sebenarnya.

Kelemahannya adalah kita harus benar menentukan dua titik awal tersebut, metoda

bisection tidak bisa digunakan jika dua fungsi awal tidak berlainan tanda, dan metoda

bisection tidak bisa menentukan langsung semua akar yang ada.

Metode iterasi titik tetap dan Newton-Raphson pada dasarnya sama karena

merupakan metode terbuka. Dengan kedua metode ini hanya menggunakan satu titik awal

sebagai acuan yang mendekati akar sebenarnya dan akan lebih cepat dalam menentukan

solusi dibandingkan dengan metode tertutup jika titik awal konvergen terhadap solusi

persamaan.