modul prak metnum
TRANSCRIPT
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 1/19
Modul Praktikum
Metode Numerik
2 0 1 2
FMIPA UNLAM
PROGRAM STUDI ILMU KOMPUTER
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 2/19
1
Praktikum 1
Persamanan Non Linier
A. Metode Bisection
a. Dasar Teori
Metode bisection merupakan metode pencarian akar yang menggunakan cara
pembagian dua dari range yang ditentukan sebelumnya. Dua bagian yang tercipta ini
kemudian diperiksa bagian yang ada akar persamaan di dalamnya secara matematis.
Perumusan mencari nilai tengah range :
Metode bisection dapat divisualkan dengan gambar berikut:
b. Algoritma Program
start
f(x), a, b, del dx,x=0, k=0
While dx>del
(a).f(x)<0
x= (a+)/2
b=x, dx= b-a
Finish
yes
no
no
yes
a=x, dx= a-b
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 3/19
2
c. Pelaksanaan Praktikum
Menuliskan kode program bisection pada IDE NetBean atau Eclipse lalu melakukan
run program untuk mengetahui hasilnya. Berikut kode program yang dicobakan:
package bisection;
public class Bisection {
public static double f(double x) {return Math.exp(x)*Math.log(x)-x*x;}
public static void main(String[] args) {
// TODO code application logic here
double x = 0, del = 1e-6, a = 1, b = 2;double dx = b-a;int k = 0;
while (Math.abs(dx) > del) {
x = (a+b)/2;
if ((f(a)*f(x)) < 0) {b = x;dx = b-a;}
else {a = x;dx = b-a;}k++;}
System.out.println("Iterasi ke-: " + k);System.out.println("Nilai Akar: " + x);System.out.println("error: " + dx);
}
}
B. Metode Regulasi Falsi
a. Dasar Teori dan Algoritma
Teori dan algoritma regulasi falsi sama dengan bisection. Perbedaannya hanya pada
metode pencarian titik antara yang menggunakan rumus berbeda. Rumus ini
memungkinkan titik antara mempunyai jarak lebih dekat dengan nilai akar yang
dituju sehingga jumlah perulangan yang diperlukan untuk mencapai toleransi error
yang dituju menjadi sedikit. Rumus yang digunakan adalah:
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 4/19
3
b. Pelaksanaan Praktikum
Menuliskan kode program Regulasi Falsi pada IDE NetBean atau Eclipse lalu
melakukan run program untuk mengetahui hasilnya. Berikut kode program yang
dicobakan:
package regufal;
public class Regufal {
public static double f(double x) {return Math.exp(x)*Math.log(x)-x*x;}
public static void main(String[] args) {
// TODO code application logic heredouble x = 0, del = 1e-6, a = 1, b = 2;double dx = b-a;int k = 0;
while (Math.abs(dx) > del) {
x=b-(f(b)*(b-a))/(f(b)-f(a));
if ((f(a)*f(x)) < 0) {b = x;dx = b-a;
}else {a = x;dx = b-a;}k++;}
System.out.println("Iterasi ke-: " + k);System.out.println("Nilai Akar: " + x);System.out.println("error: " + dx);
}
}
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 5/19
4
Praktikum 2
Metode Newton Raphson
a. Dasar Teori
Metode pendekatan yang menggunakan satu titik awal dan mendekatinya dengan
memperhatikan slope atau gradien pada titik tersebut.Titik pendekatan ke n+1 dituliskan
dengan :
Xn+1 = xn -
b. Algoritma Program
a. Definisikan fungsi f(x) dan f 1
(x)b. Tentukan toleransi error (e) dan iterasi maksimum (n)
c. Tentukan nilai pendekatan awal x0
d. Hitung f(x0) dan f ’(x0)
e. Untuk iterasi I = 1 s/d n atau |f(xi)|> e
a. Hitung f(xi) dan f 1(xi)
Akar persamaan adalah nilai xi yang terakhir diperoleh
a. Pelaksanaan Praktikum
Menuliskan kode program metode Newton Raphson pada IDE NetBean atau Eclipse lalu
melakukan run program untuk mengetahui hasilnya. Berikut kode program yang
dicobakan:
Package newtonraphson;import java.io.BufferedReader;import java.io.InputStreamReader;
public class Main {
n
n
xF
xF
1
i
iii
x f
x f x x
11
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 6/19
5
public static void main(String[] args) {double del=0, x=0;double dx=0;double x1;int k=0;BufferedReader data=new BufferedReader(new
InputStreamReader(System.in));try{while (dx<=del){System.out.print("Nilai Awal :
");x=Double.parseDouble(data.readLine());System.out.print("Pendekatan :
");dx=Double.parseDouble(data.readLine());System.out.print("Error :
");del=Double.parseDouble(data.readLine());}
while (Math.abs(dx)>del){x1=x-f(x)/d(x);dx=((x1-x)/x1)*100;x=x1;k++;
System.out.println("Iterasi ke-:" + k);System.out.println(" Pendekatan :" + x1);System.out.println(" error :" + Math.abs(dx));}System.out.println("Nilai Akar:" +x);System.out.println("error:" +dx);
} catch(Exception e)
{}}
//Method untuk menghitung fungsi f(x)=exp(x)*log(x)-x*x
public static double f(double x){return ((x*x)-(2*x)-3);
}//Method untuk menghitung turunan pertama, fungsi f'(x)public static double d(double x){
return ((2*x)-2);}
}
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 7/19
6
Praktikum 3
Solusi Sistem Persamaan Linier dengan Eliminasi Gaus
a. Dasar Teori
Metode Eliminasi Gauss : metode yang dikembangkan dari metode eliminasi, yaitu
menghilangkan atau mengurangi jumlah variable sehingga dapat diperoleh nilai dari suatu
variable bebas. Metode eliminasi gauss: metode dimana bentuk matrik augmented, pada
bagian kiri diubah menjadi matrik segitiga atas/segitiga bawah dg menggunakan OBE
(Operasi Baris Elementer).
Sehingga penyelesaian dapat diperoleh dengan:
b. Algoritma Program
Algoritma Metode Eliminasi Gauss adalah sbb :
1. Masukkan matrik A, dan vektor B beserta ukurannya n
2. Buat augmented matrik [A|B] namakan dengan A
3. Untuk baris ke i dimana i=1 s/d n, perhatikan apakah nilai ai,i =0 :
Bila ya :
pertukarkan baris ke i dan baris ke i+k≤n, dimana ai+k,i ≠0, bila tidak ada berarti
perhitungan tidak bisa dilanjutkan dan proses dihentikan dengan tanpa penyelesaian.
Bila tidak : lanjutkan
4. Untuk baris ke j, dimana j = i+1 s/d n
Lakukan operasi baris elementer:
Hitung :
Untuk kolom k dimana k=1 s/d n+1 hitung
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 8/19
7
Hitung akar, untuk i = n s/d 1 (bergerak dari baris ke n sampai baris pertama) :
dimana nilai i+k≤n
c. Pelaksanaan Praktikum
Menuliskan kode program eleminasi Gauss pada IDE NetBean atau Eclipse lalumelakukan run program untuk mengetahui hasilnya. Berikut kode program yang
dicobakan:
//Eliminasi Gauss
// Mencari solusi sistem persamaan linier
// melalui eliminasi gauss
public class EliminasiGauss {
private static final double EPSILON = 1e-10;
// Eliminasi Gauss
public static double[] lsolve(double[][] A, double[] b) {
int N = b.length;
for (int p = 0; p < N; p++) {
// mencari baris pivot dan menukar-tempat
int max = p;
for (int i = p + 1; i < N; i++) {
if (Math.abs(A[i][p]) > Math.abs(A[max][p])) {
max = i;
}
}
double[] temp = A[p]; A[p] = A[max]; A[max] = temp;
double t = b[p]; b[p] = b[max]; b[max] = t;
// matriks tunggal
if (Math.abs(A[p][p]) <= EPSILON) {
throw new RuntimeException("Matriks tunggal");
}
// pivot dalam A dan b
for (int i = p + 1; i < N; i++) {
double alpha = A[i][p] / A[p][p];
b[i] -= alpha * b[p];
for (int j = p; j < N; j++) {
A[i][j] -= alpha * A[p][j];
}
}
}
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 9/19
8
// Subtitusi balik
double[] x = new double[N];
for (int i = N - 1; i >= 0; i--) {
double sum = 0.0;
for (int j = i + 1; j < N; j++) {
sum += A[i][j] * x[j];}
x[i] = (b[i] - sum) / A[i][i];
}
return x;
}
// masukkan data persamaan linier dengan matriks
public static void main(String[] args) {
int N = 3;double[][] A = { { 0, 1, 1 },
{ 2, 4, -2 },
{ 0, 3, 15 }
};
double[] b = { 4, 2, 36 };
double[] x = lsolve(A, b);
for (int i = 0; i < N; i++) {
System.out.println(x[i]);
}
}
}
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 10/19
9
Praktikum 4
Metode Secant
a. Dasar Teori
Metode Secant merupakan perbaikan dari metode regula-falsi dan Newton Raphson,
dimana kemiringan dua titik dinyatakan secara diskrit, dengan mengambil bentuk garis
lurus yang melalui satu titik.
)
Dimana m diperoleh dari
Jika y=F(x), ny dan xn diketahui, maka titik ke n+1 adalah :
Bila titik xn+1 dianggap sebagai akar persamaan maka yn+1 = 0 sehingga
b. Algoritma Program
a. Definisikan fungsi F(x)
b. Definisikan torelansi error (e) dan iterasi maksimum (n)
c. Masukkan dua nilai pendekatan awal yang di antaranya terdapat akar yaitu x0 dan x1,
sebaiknya gunakan metode tabel atau grafis untuk menjamin titik pendakatannya
adalah titik pendekatan yang konvergensinya pada akar persamaan yang diharapkan.
d. Hitung F(x0) dan F(x1) sebagai y0 dan y1
e. Untuk iterasi I = 1 s/d n atau |F(xi)|
hitung yi+1 = F(xi+1)
f. Akar persamaan adalah nilai x yang terakhir.
c. Pelaksanaan Praktikum
Menuliskan kode program metode Secant pada IDE NetBean atau Eclipse lalu melakukan
run program untuk mengetahui hasilnya. Berikut kode program yang dicobakan:
public class demoSecant{public static void main(String[] args){
double e, x1, x2, x0, fx1,fx2,fx0;x0=1.0;x1=2.0;e=0.001;System.out.println("\t\tProgram Demo Metode Secant");System.out.println("\t\t\tOleh Waskita");System.out.println("\t\t\tVersi 1.0");System.out.println();for(int i=1;i<=4;i++){
fx0 = (x0*x0*x0) + 2*(x0*x0) -3* x0 - 3;fx1 = (x1*x1*x1) + 2*(x1*x1) -3* x1 - 3;x2 = x1 - ( fx1 *((x0 - x1)/(fx0 - fx1)));
1
11
ii
iiiii
y y
x x y x x
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 11/19
10
fx2 = (x2*x2*x2) + 2*(x2*x2) - 3*x2 - 3;System.out.println("iterasi ke-"+i);System.out.println("nilai x0 = "+x0);System.out.println("nilai x1 = "+x1);System.out.println("nilai x2 = "+x2);System.out.println("nilai fx0 = "+fx0);System.out.println("nilai fx1 = "+fx1);System.out.println("nilai fx2 = "+fx2);System.out.println();if(fx2<0){
fx2=-1*fx2;if(fx2<=e){System.out.println("akar telah ditemukan");break;}else {
x0 = x1;x1 = x2;}
if(fx2<=e){System.out.println("akar telah ditemukan");break;} else {
x0 = x1;x1 = x2;}
}}
}}
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 12/19
11
Praktikum 5
Metode Trapezoid
a. Dasar Teori
Pada metode trapezoida ini setiap bagian dinyatakan sebagai trapezium seperti gambar
berikut :
Luas trapezium ke-i (Li) adalah :
Dan luas keseluruhan dihitung dengan menjumlahkan luas dari
semua bagian trapezium. Sehingga diperoleh
b. Algoritma Program
1. Definisikan fungsi f(x)
2. Tentukan batas bawah dan batas atas integrasi
3. Tentukan jumlah pembagi area N
4. Hitung h=(b-a)/N
5. Hitung
c. Pelaksanaan Praktikum
Menuliskan kode program metode Trapezoid pada IDE NetBean atau Eclipse lalu
melakukan run program untuk mengetahui hasilnya. Berikut kode program yang
dicobakan:
import java.io.*;
import java.util.Scanner;
public class Trapezoid
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 13/19
12
{
static double trapezoidRule (int size, double[] x, double[] y)
{ double sum = 0.0,
increment;
for ( int k = 1; k < size; k++ )
{//Trapezoid rule: 1/2 h * (f0 + f1)
increment = 0.5 * (x[k]-x[k-1]) * (y[k]+y[k-1]);
sum += increment;
}
return sum;
}
public static void main ( String[] args ) throws Exception
{ String fileName = args.length > 0 ? args[0] :
"InpData.txt";
Scanner inp = new Scanner(new File(fileName));
int k, size;
double[] x, y;
double integral;
size = inp.nextInt();
System.out.println ("Number of points: " + size);
x = new double[size];
y = new double[size];
for ( k = 0; k < size; k++ )
{ x[k] = inp.nextDouble();
y[k] = inp.nextDouble();
}
integral = trapezoidRule (size, x, y);
System.out.printf ("Integral: %4.4f\n", integral);
System.out.printf ("Check: log(%2.2f) = %8.8f\n",
x[size-1], Math.log(x[size-1]) );
}
}
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 14/19
13
Praktikum 6
Interpolasi Langrange
a. Dasar Teori
Interpolasi Lagrange adalah salah satu formula untuk interpolasi berselang tidak samaselain formula interpolasi Newton umum & metoda Aitken. Walaupun demikian dapat
digunakan pula untuk interpolasi berselang sama.
Misalkan fgs. y(x) kontinu & diferensiabel sampai turunan (n+1) dalam interval buka
(a,b). Diberikan (n+1) titik (x0,y0), (x1,y1), …, (xn,yn) dengan nilai x tidak perlu berjarak
sama dengan yang lainnya, dan akan dicari suatu polinom berderajat n. Untuk
pemakaian praktis, formula interpolasi Lagrange dapat dinyatakan sbb. :
Jika y(x) : nilai yang diinterpolasi; x : nilai yg berkorespondensi dg y(x)
x0, x1, …., xn : nilai x dan y0, y1, …., yn : nilai y
b. Algoritma Program
(1) Tentukan jumlah titik (N) yang diketahui
(2) Tentukan titik-titik Pi(xi,yi) yang diketahui dengan i=1,2,3,…,N
(3) Tentukan x dari titik yang dicari
(4) Hitung nilai y dari titik yang dicari dengan formulasi interpolasi lagrange
(5) Tampilkan nilai (x,y)
c. Pelaksanaan Praktikum
Menuliskan kode program Interpolasi Langrange pada IDE NetBean atau Eclipse lalu
melakukan run program untuk mengetahui hasilnya. Berikut kode program yang
dicobakan:
// Solusi Numerik dengan Lagrange interpolation
public class Lagrange {
public static void main(String argv[]) {double xi[] = {0, 0.5, 1, 1.5, 2};
0
02010
21
))...()((
))...()(()( y
x x x x x x
x x x x x x x y
n
n
1
12101
20
))...()((
))...()(( y
x x x x x x
x x x x x x
n
n
n
nnnn
n
y
x x x x x x
x x x x x x
))...()((
))...()((
.
.
110
110
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 15/19
14
double fi[] = {1, 0.938470, 0.765198, 0.511828,0.223891};
double x = 0.9;
double f = aitken(x, xi, fi);
System.out.println("Nilai Interpolasi: " + f);
}
// Method Aitken untuk melaksanakan rekursi.
public static double aitken(double x, double xi[],
double fi[]) {
int n = xi.length-1;
double ft[] = (double[]) fi.clone();
for (int i=0; i<n; ++i) {
for (int j=0; j<n-i; ++j) {
ft[j] = (x-xi[j])/(xi[i+j+1]-xi[j])*ft[j+1]
+(x-xi[i+j+1])/(xi[j]-xi[i+j+1])*ft[j];}
}
return ft[0];
}
}
Penyelesaian Pers.Diferensial
//penyelesaian pers.diferensial dengan metode Euler dan
Runge_Kutta
public class EulerKutta
{
// Jumlah langkah yang digunakan
public static final int STEPS = 100;
// turunan dy/dx untuk nilai x dan y.
public static double deriv(double x, double y)
{
return x * Math.sqrt(1 + y*y);
}
// `main' method
public static void main(String[] argv)
{
// `h' adalah ukuran setiap langkah.
double h = 1.0 / STEPS;
double k1, k2, k3, k4;
double x, y;
int i;
// perhitungan dengan metode Euler// inisialisasi y
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 16/19
15
y = 0;
for (i=0; i<STEPS; i++)
{
// perbaharui nilai x dan nilai y
x = i * h;
y += h * deriv(x, y);
}
// Print out hasil yang diperoleh.
System.out.println("Menggunakan Metode Euler "
+ "nilai pada x=1 adalah :");
System.out.println(y);
// Perhitungan dengan Runge-Kutta Orde ke 4// inisialisasi y
y = 0;
for (i=0; i<STEPS; i++)
{
// updating x
x = i * h;
// Menghitung nilai K
k1 = h * deriv(x, y);
k2 = h * deriv(x + h/2, y + k1/2);
k3 = h * deriv(x + h/2, y + k2/2);
k4 = h * deriv(x + h, y + k3);
// Incrementing y
y += k1/6 + k2/3+ k3/3 + k4/6;
}
// Print out hasil yang diperoleh.
System.out.println();
System.out.println("Runge-Kutta dengan menggunakan Orde ke 4 "+ "Nilai pada x=1 adalah:");
System.out.println(y);
// Print out hasil yang diperoleh.
System.out.println();
System.out.println("Nilai sesungguhnya :");
y = (Math.exp(0.5) - Math.exp(-0.5)) / 2;
System.out.println(y);
}}
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 17/19
16
Praktikum 7
Integral
a. Dasar Teori
Metode integrasi Simpson merupakan pengembangan metode integrasi trapezoida, hanyasaja daerah pembaginya bukan berupa trapesium tetapi berupa dua buah trapesium dengan
menggunakan pembobot berat di titik tengahnya seperti telihat pada gambar berikut ini.
Atau dengan kata lain metode ini adalah metode rata-rata dengan pembobot kuadrat.
Luas daerah yang dibatasi fungsi y=f(x) dan sumbu x, dihitung dengan aturan Simpson :
Atau dapat ditulis :
b. Algoritma Program
1. Definisikan fungsi f(x)
2. Tentukan batas bawah dan batas ata integrasi
3. Tentukan jumlah pembagi area N
4. Hitung h=(b-a)/N
5. Hitung:
• Metode ini akan mendapatkan hasil yang baik bila diambil n genap.
c. Pelaksanaan Praktikum
Menuliskan kode program metode Simpson pada IDE NetBean atau Eclipse lalu
melakukan run program untuk mengetahui hasilnya. Berikut kode program yang
dicobakan:
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 18/19
17
Metode Sepertiga Simpson
package metnum_sepertigasimpson;import java.util.Scanner;public class Main {
public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("Metode 1/3 Simpson dengan banyak
pias");
System.out.println("=====================================");System.out.println("Fungsi = -X^3 - X^2 + 5X + 3");System.out.print("Batas Bawah (a) = ");double a = input.nextDouble();
System.out.print("Batas Atas (b) = ");double b = input.nextDouble();
System.out.print("Banyak Pias (n) = ");
double n = input.nextDouble();double hasil = In(a,b,n);if (hasil < 0) {
hasil=hasil*(-1);}System.out.println("Hasil yang diperoleh = "+hasil);double mula = asal(a,b);if (mula<0) {
mula = mula*(-1);}double error = ((mula-hasil)/mula)*100;System.out.println("Nilai error = "+error+" %
");}
public static double In(double a,double b, double n) {double deltax = (b-a)/n;double ulang = a;double intgrl = f(a) + f(b);double jmlganjil = 0;double jmlgenap = 0;for (int i=1;i<n;i++) {
ulang+=deltax;if (i % 2==1) {
jmlganjil+=(4*f(ulang));} else jmlgenap+=(2*f(ulang));
}return ((intgrl+jmlganjil+jmlgenap)*deltax/3);
}
public static double asal(double a,double b){return (fungsierror(b)-fungsierror(a));
}public static double f(double x) {
return (-(x*x*x)-(x*x)+(5*x)+3);}
public static double fungsierror(double x) {return ((-0.25*x*x*x*x)-(0.333*x*x*x)+(2.5*x*x)+3*x);
5/16/2018 Modul Prak Metnum - slidepdf.com
http://slidepdf.com/reader/full/modul-prak-metnum 19/19
18
}
}
Metode Tigaperdelapan Simpson
package metnum_tigaperlapansimpson;import java.util.Scanner;public class Main {
public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("Metode 3/8 simpson");System.out.println("==================");System.out.println("Fungsi = -X^3 - X^2 + 5X + 3");
System.out.print("Batas Bawah (a) = ");double a = input.nextDouble();System.out.print("Batas Atas (b) = ");double b = input.nextDouble();
double hasil = In(a,b);if (hasil<0) {
hasil=hasil*(-1);}System.out.println("Hasil yang diperoleh = "+hasil);
double mula = (fungsierror(b))-(fungsierror(a));if (mula < 0) {
mula = mula*(-1);}double error = (((mula-hasil)/mula)*100);System.out.println("Nilai error = "+error+" %
");}
public static double In(double a,double b) {double deltax = (b-a);double ulang = 0;double intgrl = f(a) + f(b);double temp = 0;
for (int i=1;i<3;i++) {ulang+=(a+b)/3;temp+=(3*f(ulang));
}return ((intgrl+temp)*deltax/8);
}public static double f(double x) {
return (-(x*x*x)-(x*x)+(5*x)+3);}public static double fungsierror(double x) {
return (-(0.25*x*x*x*x)-(0.333*x*x*x)+(2.5*x*x)+3*x);}
}