laporan akhir - solusi persamaan non linier
DESCRIPTION
lapak metnum SPNLTRANSCRIPT
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)
{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;
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:
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;
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)
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
{
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
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:
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);
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
{
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;
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>
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:
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);
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>
#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();
}
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)
{
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)
{
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:
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
{
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()
{
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:
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
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.
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.