Anda di halaman 1dari 23

LAPORAN TUGAS AKHIR MATA KULIAH

METODE NUMERIK

Disusun Oleh :
Alga Mahida – 08011181924012
Mira Sulistiana – 08011381924082

Dosen Pembimbing :
Anita Desiani, S.Si., M.Kom.

JURUSAN MATEMATIKA
FAKULTAS MATEMATIKA DAN PENGETAHUAN ALAM
UNIVERSITAS SRIWIJAYA
INDRALAYA 2021
SISTEM PERSAMAAN NIRLANJAR
METODE NEWTON-RAPHSON

Link Youtube : https://youtu.be/c0_dYC3iIMI


1. Penjelasan Metode Newton-Raphson
Metode Newton-Raphson merupakan metode penyelesaian persamaan non-linier dengan
menggunakan pendekatan satu titik awal dan mendekatinya dengan memperhatikan slope atau
gradien. Dengan turunan pertama pada adalah ekuivalen terhadap kemiringan (slope) [2]:
f ( x n)
x n+1=x n −
f ' (x n)
Algoritma Metode Newton-Rapshon
1. Mendefinisikan fungsi f (x) dan f ' (x).
2. Menentukan nilai toleransi e dan iterasi maksimum sebesar N.
3. Menentukan tebakan awal x 0.
4. Hitung fungsi f ( x 0) dan f ' (x 0).
5. Untuk iterasi i=1 s/d N atau |f ( x )|≥ e , hitung x menggunakan persamaan diatas.
6. Akar persamaan merupakan nilai x i terakhir yang diperoleh
Prosedur pemograman dengan metode Newton-Rapshon ini memiliki 2 jenis
pemberhentian diantaranya dengan menggunakan banyak iterasi dan besar galat. Prosedur
pemograman ini diawali dengan mendefinisikan terlebih dahulu fungsi dan variable.
Algoritma Pemograman:
Pendifinisian fungsi:

Ae x x B + sinz Cx S . sin x + Mx x Z

g ( x )= − +e
e Dx √ ex

( ae x x b +abe x xb −1 +2 c sin cx cos cx )−de−dx ( ae x x b +sin 2 cx ) + fx +sinx x − cos xx+ f +2 xe x


2
−dx
g ' ( x )=e
2√e √e
2

2. Ilustrasi Perhitungan Manual dan Implementasi Koding

#include<iostream> \\membaca cin dan cout


#include<stdlib.h> \\fungsi maks dan min
#include<conio.h> \\membaca fungsi getch
#include<math.h> \\membaca fungsi matematika
#include<stdio.h> \\membaca fungsi printf, getch
#define maks 100
using namespace std;

float a,b,c,d,f,x0,x1,xb,toleran; //variabel akan digunakan dalam tipe data float


return (((a*exp(x)*pow(x,b)+sin(c*x)*sin(c*x))/exp(d*x))-((sin(x)+f*x)/sqrt(exp(x)))+(exp(x)
*exp(x))); } \\mendefinisikan fungsi
float g1(float x)
{
Langkah pertama, mendeklarasikan file header beserta variabel yang akan digunakan.
Selanjutnya, masukkan fungsi matematika dan turunan fungsi yang digunakan pada program.

Ae x x B +sin z Cx S . sin x + Mx x Z

f ( x )= − +e
e Dx √ ex
fx+ sin x cos x + f
g ( x )=e−dx ( ae x x b +abe x xb −1 +2 c sin cx cos cx )−de−dx ( ae x x b +sin 2 cx ) +
2

− +2 xe x
2 √e x
√e
2
x

Selanjutnya, masuk pada penginputan nilai variabel.


A= 1 D=1 Z=1
B=2 M=2
C=1 S=1

1∗e x x 2 +sin 1 1∗x 1. sin x+1 x x 1

f ( x )= − +e
e1∗x √ ex
cout<<" Masukkan Nilai A :"; cin>>a; \\nilai variabel A
cout<<" Masukkan Nilai B :"; cin>>b; \\nilai variabel B
cout<<" Masukkan Nilai C :"; cin>>c; \\nilai variabel C
cout<<" Masukkan Nilai D :"; cin>>d; \\ nilai variabel D
cout<<" Masukkan Nilai M :"; cin>>m; \\nilai variabel M
cout<<" Masukkan Nilai S :"; cin>>s; \\nilai variabel S
cout<<" Masukkan Nilai Z :"; cin>>z; \\nilai variabel Z

g ( x )=e
−1 x
( 1∗e x x 2+1∗2∗e x x 2−1+1∗1 sin1 x cos 1 x )−1 e−1 x ( 1∗e x x 2+ sin 2 1∗x ) + 2 x+ sinx x − cos xx+2 + 1∗x
1√ e √e
1

Selanjutnya, masuk pada fungsi switch yang berisi pilihan untuk mencari nilai galat atau nilai
iterasi.

Dalam fungsi switch, terbagi menjadi dua, yakni case 1 yang berfungsi untuk mencari nilai
iterasi dan case 2 untuk mencari nilai galat. Jika, mencari nilai iterasi, maka akan berlaku
perulangan pada fungsi do.
Iterasi 1

cout<<" Pilih : "<<endl; //menampilkan output pada program


cout<<" 1. Iterasi "<<endl; //menampilkan output pada program
cout<<" 2. Galat "<<endl; //menampilkan output pada program
cout<<" Masukkan Pilihan :";
cin>>pilih; //memasukkan pilihan
cout<<endl; //memberikan jarak pada program
switch (pilih) //untuk menetukkan pilihan
1∗e(1) (1)2+sin 1 1∗(1) 1. sin(1)+ 1(1) (1) 1

f ( 1) = − +e
e
1∗(1)
√ e(1)
¿−2.9355081859

2(1
g ( 1 )=e−1 (1) ( 1∗e(1) (1)2+1∗2∗e(1 )( 1)2−1 +1∗1 sin 1(1)cos 1(1) )−1 e−1(1) ( 1∗e(1) (1)2 +sin 2 1∗(1) ) +

¿ 1.6497520176
Setelah itu untuk menentukan x selanjutnya digunakan rumus berikut:
Iterasi 2:
f ( x n)
x n+1=x n −
f ' ( x n)
f (x 1 )
x 2=x 1−
f '(x 1 )

−2.9355081859
x 2=1−
1.6497520176
x 2=2.779363295

Setelah didapat tebakan selanjutnya (x2), lalu kita cari fungsi dengan memasukkan nilai
tebakan diatas kemudian didapatkan nilai berikut:
(2.779363295) 2 1
1∗e (2.779363295) +sin 1∗(2.779363295) 1. sin(2.779363295)+ 1(2.779363
f ( 2.779363295 ) = −
e 1∗(2.779363295) √e (2.779363295)
f ( 2.779363295 ) =−0.3361785282

g ( 2.779363295 )=e
−1 (2.779363295)
( 1∗e(2.779363295) (2.779363295)2 +1∗2∗e(2.7793632951) ( 2.779363295)2−1 +

¿ 3,494.5795618845
Setelah didapat tebakan (xi+1), kita akan mencari galat dengan menggunakan rumus berikut:

e= | |
x i+1−x i
xi +1

e=
| |
x 2−x 1
x2

case 1: //untuk menetukkan nilai iterasi


{
int it,p,max_iter; //variabel integer yang digunakan
float epsilon,xb,x0; //variabel float yang digunakan
cout<<" Menentukan Solusi Akar Berdasarkan Iterasi "<<endl; //menampilkan output
pada program
cout<<" Masukkan Nilai Awal :"; //menampilkan output pada program
cin>>x0; //input nilai awal
e= |2.779363295−1
2.779363295 |
=0.9997138425

Pada fungsi if, jika nilai iterasi kurang dari sama dengan jumlah maksimal iterasi maka, nilai
iterasi akan ditampilkan dan jika syarat tersebut tidak terpenuhi maka, akan masuk ke dalam
fungsi else. Sehingga, pada program akan ditampilkan kalimat bahwa iterasi belum terpenuhi.
Iterasi Xi f(x) g(x) E
1 1 −2.9355081859 1.6497520176  
2 2.779363295 −0.3361785282 3,494.5795618845 0.9997138425

while(it<max_iter); //pengecekan untuk iterasi kurang dari iterasi maksimal


if(it<=max_iter) //jika iterasi kurang dari samadengan iterasi maksimal
{ cout<<" Hampiran Akar : "<<xb; //jika nilai iterasi <= jumlah maksimal iterasi
}
Else //jika nilai tidak memenuhi iterasi
{ cout<<" Jumlah Iterasi yang Anda Masukkan Belum Terpenuhi. "; //jika nilai
iterasi > jumlah maksimal iterasi
cout<<" Hampiran Akar : "<<xb; } //mencetak pada output
cout<<"\n\n\n";
getch(); //mempause output
return kembali; //mengeluarkan fungsi
} }

Selanjutnya, apabila memilih untuk mencari nilai galat, maka akan langsung masuk pada
case 2 dengan kmenginputkan nilai awal dan toleransi. Pada fungsi do, akan melakukan
perhitungan untuk mencari nilai f(x), f(x), dan galat.
Setelah didapat tebakan (xi+1), kita akan mencari galat dengan menggunakan rumus
berikut untuk mencari galat:

e=
| |
x i+1−x i
xi +1

e=
| |
x 2−x 1
x2

case 2: //mencari nilai galat


{
int it; //variabel pada type data integer
float epsilon,xb,x0; //variabel pada type data float
cout<<" Menentukkan Solusi Akar Berdasarkan Nilai Galat"<<endl;
cout<<" Masukkan Nilai Awal :"; //output program
cin>>x0; //inputan nilai awal dari galat
cout<<" Masukkan Toleransi : "; //output program
cin>>toleran; //inputan nilai toleransi
it=0; //nilai iterasi pertama adalah 0
cout<<"\nit. x f(x) epsilon\n"; //output program
do //fungsi perulangan do
{
e= |2.779363295−1
2.779363295 |
=0.9997138425

apabila nilai galat lebih kecil dari sama dengan nilai toleransi yang diinputkan, maka,
nilai hampiran akan muncul. Namun, jika sebaliknya, maka, program akan hanya
menampilkan kata “batas galat tidak terpenuhi”.

while(it<=100 && epsilon > toleran); //perulangan pengecekan nilai galat


if(epsilon<=toleran) //batas galat kurang dari samadengan nilai toleransi
{
cout<<" Batas Galat yang Dimasukkan Telah Terpenuhi."; //jika nilai
galat <= toleransi
cout<<" Hampiran Akhir : "<<xb; //output program
}
else
{
cout<<" Batas Galat Tidak Terpenuhi."; //jika nilai galat > toleransi
}
getch(); //mempause output program
}
cout<<"\n\n\n";
getch(); //mempause output program
return kembali; }} //mengeluarkan fungsi

3. Uji Coba Program


Diketahui:
x b 2
ae x +sin cx sin x + gx x 2

g ( x )= − +e
e
dx
√ ex

−dx
g ' ( x )=e ( ae x x b +abe x xb −1 +2 c sin cx cos cx )−de−dx ( ae x x b +sin 2 cx ) + gx+ sinx x − cos x+ g
+2 xe
x

2√e √e
2
x

Jika, diinputkan nilai koefisien pada variabel, A = 2, B = 3, C = 6, D = 7, G = 5 maka fungsi


persamaan non linear menjadi
1∗e x∗23 + sin2∗6∗x sin x +5 x x 2

g ( x )= − +e
e7∗x √ ex

−7∗x
g ' ( x )=e ( 1. e x 33 +2∗3∗e x ¿ x3−1 +2∗6∗sin6 x∗cos 6 x )−7∗e−7 x ( 2∗e x x 3 +sin2 6 x ) + 5 x +sinx x −
2 √e

Hasil output program


Jika diinputkan nilai A

Jika, diinputkan nilai A=82, B=12, C=7, D=34, M=77, S=2, Z=2.

Mencari Nilai Iterasi ke-50

Mencari nilai galat sebesar 0.00000001

4. Pembahasan hasil dengan membandingkan aplikasi desmos calculator grafik.


Jika, dibandingkan nilai galat atau iterasi yang diperoleh dari program C++ dan aplikasi
Desmos maka, selisih yang didapatkan sebesar 0.0001501. sehingga, dapat disimpulkan
bahwa program C++ dapat berjalan dengan baik.
SISTEM PERSAMAAN NIRLANJAR
METODE GAUSS-SEIDEL

Link Youtube: https://youtu.be/re7AHjrjaAo


1. Penjelasan Metode Gauss Seidel
Eliminasi Gauss-Seidel adalah metode yang menggunakan proses iterasi hingga diperoleh
nilai – nilai yang berubah.Bila n persamaan dan n bilangan tak diketahui :
a 11 x1 + a12 x 2+ …+a1 n x n=b1
a 21 x1 + a22 x 2+ …+a 2n x n=b 2
.
.
.
a n1 x 1+ an 2 x 2 +…+ ann x n=bn
Dapat diekspresikan sebagai
n
a ii xi + ∑ aij x j=bi dengan i=1,2,3 , … , n
j=1 , j ≠ i

Karena dalam metode Gauss-Seidel, nilai estimasi baru digunakan dalam perhitungan maka
penyelesaian persamaan ke-i diekspresikan sebagai :
1
x i= ¿
aii
Dengan demikian, algoritma metode Gauss-Seidel diekspresikan sebagai :
1
x(ki +1)= ¿
aii

Prosedur pemograman Gauss-Seidel ini memiliki 2 jenis pemberhentian diantaranya


dengan menggunakan banyak iterasi dan besar epsilon. Prosedur pemograman ini diawali
dengan mendefinisikan terlebih dahulu fungsi dan variable.

2. Ilustrasi Perhiungan Manual dan Implementasi Program


Langkah pertama, masukkan file header yang akan digunakan. Setelah itu, masukkan
variabel dan type data yang digunakan.

#include<iostream> //memasukkan perintah cin, cout, dan endl


#include<iomanip> //mengatur jumlah digit desimal
#include<math> //memasukkan fungsi matematika
#include<conio.h> //menampilkan hasil antarmuka kepada pengguna
using namespace std;
int main() //fungsi utama C++
Selanjutnya, memasukkan besaran matriks yang akan digunakan. Dalam perulangan ini akan
menggunakan fungsi for. Pada matrisk bisa diinputkan matriks 2x2, 3x3, …,nxn
{
cout<<endl<<endl; //mengenter pada output
int pilih;
cout.precision(6); //mengatur jumlah digit decimal yang akan ditampilkan
cout.setf(ios::fixed); //memformat keluaran pada notasi eksponensial
int n,i,j,k,flag=0,count=0,it; //variabel data bertype integer
float q[30],r[30]; //variabel data bertype float
cout<<"\n Masukkan Jumlah Baris dan Kolom Matriks Persegi : "; //output program
cin>>n; //Input no. of equations
double a[n][n+1]; //menyimpan elemen matriks
double x[n]; //menyimpan nilai variabel
double eps,y; //pengelompokkan nilai desimal

Dimisalkan diinputkan dengan persamaan sebagai berikut :


3 y− y +2 z=9
2 x−7 y +2 z =−18
2 x−2 y+3 z=12
Dengan nilai awal x 0=2 , y 0=1 , dan z0 =1
Setelah menginputkan nilai dari variabel program akan meminta untuk memilih penyelesaian
matriks dengan mencari nilai epsilon atau nilai iterasi.
cout<<"========================================================"<<endl;
cout<<"\n Masukkan entri matriks perbaris yang diperbesar \n"; //output program
for (i=0;i<n;i++){ //perulangan penginputan entri baris matriks
for (j=0;j<=n;j++) //perulangan penginputan entri kolom matriks
{cout<<"Masukkan entri matriks pada baris ke-"<<i+1<<" kolom ke-"<<j+1<<" : "; //output
program
cin>>a[i][j];}} //input nilai baris dan kolom matriks
cout<<"Masukkan entri matriks kanan diperbesar"<<endl; ////output program
for (i=0;i<n;i++) //perulangan entri baris matriks yang diperbesar
{cout<<"Entri baris ke-"<<i+1<<" : "; //output program
cin>>x[i];} //input entri baris
cout<<"Pilih Salah satu"<<endl; //output program
cout<<"1. Epsilon"<<endl; //pilihan pertama
cout<<"2. Iterasi"<<endl; //pilihan kedua
cout<<"Masukkan Pilihan : ";cin>>pilih; //input pilihan

Jika, memilih case 1 artinya, penyelesaian mencari nilai epsilon. Penyelesaian secara manual
menggunakan rumus

e= | x i+1−x i
xi +1 |
Maka, jika dihitung nilai iterasinya terlebih dahulu maka, nilai galat sebagai berikut :
| 4.66667−1
e x 1=
4.66667 |
=0.57143 e =|
0.95238 |
0.95238−1
y1 =¿0.05

e =|
4.57142 |
4.57142−1
z1 =¿ 0.78124

switch(pilih) //fungsi untuk membuat pilihan


{
case 1: //mencari nilai epsilon
{
cout<<"\n Epsilon :\n"; //output program
cin>>eps; //input nilai epsilon
for (i=0;i<n;i++) //membuat persamaan yang dominan secara diagonal
for (k=i+1;k<n;k++) //membuat persamaan yang dominan secara diadonal
if (fabs(a[i][i])<fabs(a[k][i])) //nilai absolut pada baris matriks dan nilai matriks
for (j=0;j<=n;j++) //perulangan kolom pada matriks
{
double temp=a[i][j];
a[i][j]=a[k][j];
a[k][j]=temp;
}
cout<<"Iter"<<setw(10); //output program
for(i=0;i<n;i++) //perulangan perhitungan baris pada matriks
cout<<"x"<<i<<setw(18); //hasil dari nilai x
cout<<"\n----------------------------------------------------------------------";

Jika, dihitung secara manual sampai iterasi ke-5 maka, dihasilkan :


N e[1] e[2] e[3]
0 - - -
1 0.57143 0.05 0.78124
2 16.29357 0.19847 0.00885
3 0.15997 0.02268 0.01136
4 0.07426 0.00637 0.00268
5 0.02972 0.00038 0.00149

apabila dikerjakan dengan program maka, alurnya sebagai berikut:

do //melalukan perhitungan iterasi


{
cout<<"\n"<<count+1<<"."<<setw(16); //output program
for (i=0;i<n;i++) //perhitungan perulangan untuk mencari nilai epsilon
{
y=x[i]; //i berdasarkan angka yang kita inputkan
x[i]=a[i][n];
for (j=0;j<n;j++) //perulangan perhitungan kolom matriks
{
if (j!=i)
x[i]=x[i]-a[i][j]*x[j]; //rumus mencari nilai x ke-I pada matriks I dan J
}
x[i]=x[i]/a[i][i]; //rumus mencari nilai x ke-I pada matriks i

if (fabs(x[i]-y)<=eps) //membandingkan nilai baru dengan nilai sebelumnya


(terakhir)
flag++;
cout<<x[i]<<setw(18); //output nilai dari x
}
Selanjutnya, masuk pada case 2 untuk mencari nilai iterasi. Jika, menggunakan metode gauss
seidel maka, lelaran yang terbentuk sebagai berikut :
9+ y r−2 z r
x r +1=
3
18−2 x r−2 z r
y r +1=
7

12−2 x +2 y r
z r +1=
3
Selanjutnya, digunakan fungsi perulangan for untuk melakukan perhitungan dari iterasi ke-1
hingga iterasi ke-n. Jika, dihitung secara manual maka, nilai yang dihasilkan sebagai berikut.
Iterasi 1
9+(7)−(2.1)
x 1= =4.66667
3
18−2 ( 4.66667 )−2 ( 1 )
y 1= =0.95238
7
12−2 ( 4.66667 ) +2(0.95238)
z 1= =4.57142
3
Iterasi 2
9+(0.95238)−2 ( 4.57142 )
x 2= =0.26985
3
18−2 ( 0.26985 ) −2(4.57142)
y 2= =1.18821
7
12−2 ( 0.26985 ) +2(1.18821)
z 2= = 4.61224
3
Iterasi 3
9+1.18821−2( 4.61224)
x 3= =0.32124
3
18−2 ( 0.32124 )−2( 4.61224)
y 3= =1.16186
7
12−2 ( 0.32124 ) +2(1.16186)
z 3= =4.56041
3
Iterasi 4
9+ 1.16186−2( 4.56041)
x4= =0.34701
3
18−2 ( 0.34701 )−2( 4.56041)
y4 = =1.16931
7
12−2 ( 0.34701 ) +2(1.16931)
z4 = =4.5482
3
Iterasi 5
9+1.16931−2( 4.5482)
x 5= =0.35764
3
18−2 ( 0.35764 )−2( 4.5482)
y 5= =1.16976
7

cout<<"Iter"<<setw(10); //menentukkan lebar kolom


for(i=0;i<n;i++)
cout<<"x"<<i<<setw(18); //menentukkan lebar kolom
cout<<"\n----------------------------------------------------------------------";
do //melakukan perhitungan iterasi
{
cout<<"\n"<<count+1<<"."<<setw(16);
for (i=0;i<n;i++) //perhitungan perulangan untuk mencari nilai iterasi {
y=x[i];
x[i]=a[i][n]; //nilai matriks I dikali n yang dinputkan
for (j=0;j<n;j++) //perulangan matriks j
{
if (j!=i)
x[i]=x[i]-a[i][j]*x[j]; //rumus mencari x ke-i
}
x[i]=x[i]/a[i][i]; //rumus mencari x ke-i
cout<<x[i]<<setw(18); //output dari program
}
cout<<"\n";
count++;
it--; }

12−2 ( 0.35764 ) +2(1.16976)


z 5= =4.54141
3
Selanjutnya, setelah perhitungan iterasi selesai, akan ditampilkan table. Jika, melalui
perhitungan manual, maka nilai iterasi yang dihasilkan dari matriks 3x3, sebagai berikut :
n x r +1 y r +1 z r +1
0 2 1 1
1 4.66667 0.95238 4.57142
2 0.26985 1.18821 4.61224
3 0.32124 1.16186 4.56041
4 0.34701 1.16931 4.5482
5 0.35764 1.16976 4.54141

while(it>0) //berhenti perulangan jika iterasi kurang dari 0


cout<<"\n Solusi Persamaan :\n"; //output program
for (i=0;i<n;i++)
cout<<"x"<<i<<" = "<<x[i]<<endl; //nilai dari x
return 0; //mengembalikan fungsi
}}}

3. Uji Coba Program dan Pembandingan Hasil dengan Aplikasi Lain

a. Matriks 3 x 3
Inputkan matriks 2x2, dengan entri baris 1 = 20, baris 2 = 25, dan baris 3 = 30

Jika, memilih untuk mencari nilai epsilon, diinputkan epsilon=0.000001


Jika, dilakukan perulangan iterasi sebanyak 100 kali

Perbandingan matriks 3 x 3 dengan aplikasi CodeSansar


Nilai dari epsilon 0.000001 dan perulangan iterasi sebanyak 100 kali, hasil yang didapatkan
sudah bernilai sama dan jika dibandingkan dengan aplikasi codesarsan, nilainya juga sudah
sama. Artinya, program sudah berjalan dengan benar.
X Hasil Aplikasi Hasil Program Selisih
X1 7.333 7.333333 0.000333
X2 6.000 6.000000 0
X3 3.333 3.333333 0.000333

Dengan selisih dari program C++ dan aplikasi CodeSansar yang cukup tipis maka, artinya
program C++ telah berjalan dengan benar.

b. Matriks 8 x 8

Jika diinputkan matriks 8x8 maka, program akan menampilkan inputan baris dan
kolom.
Entri baris ke-1=30, baris ke-2=35, baris ke-3=40, baris ke-4=45, baris ke-5=50, baris ke-
6=55, baris ke-7=60, baris ke-8=65.

Dicari nilai iterasi ke-400

Perbandingan matriks 8 x 8 dengan aplikasi lain


Perbandingan nilai dari x1, x1,…, x8 antara hasil program C++ dan aplikasi software lain,
maka:

Maka, perbandingan dari kedua nilai sebagai berikut :


X Hasil Aplikasi Hasil Program Selisih

X1 0.5923 0.592456 0.000156

X2 0.7234 0.723363 0.000037

X3 0.819 0.818994 0.000006


X4 0.6673 0.667169 0.000131

X5 -0.6622 -0.662238 0.000038

X6 0.5111 0.511110 0.00001

X7 0.6994 0.699442 0.000042

X8 0.5845 0.584611 0.000111

Dilihat dari selisih kedua nilai yang cukup tipis maka, program C++ ini sudah dapat
berjalan dengan benar.

INTERPOLASI LAGRANGE

Link Youtube : https://youtu.be/FbHPVl1xZf0


1. Penjelasan Metode Interpolasi Lagrange
Diberikan n+1 buah titik berbeda, (x ¿ ¿ 0 , y 0) ¿, (x ¿ ¿ 1 , y 1 )¿ , …, ( x ¿ ¿ n , y n) ¿. Tentukan
polinom pn ( x ) yang menginterpolasi (melewati) semua titik-titik tersebut sedemikian rupa
sehingga
y i= pn ( x i ) untuk i=0 , 1, 2 , … , n
Nilai y i dapat berasal dari fungsi matematika f(x) (seperti ln x, sin x, fungsi Bessel, dan
sebagainya) sedemikian sehingga y i=f ( x i) , sedangkan pn ( x ) disebut fungsi hampiran
terhadap f(x). Atau, y i berasal dari nilai empiris yang diperoleh melalui percobaan atau
pengamatan.

Setelah polinom interpolasi pn (x ) ditemukan, pn ( x ) dapat digunakan untuk menghitung


perkiraan nilai y di x = a, yaitu y= p n(a). Bergantung pada letaknya, nilai x = a mungkin
terletak di dalam rentang titik-titik data ( x 0 < a < x n) atau di luar rentang titik-titik data (a < x 0
atau a > x n) :
(i) jika x 0 < a < x n maka y i= p(x k ) disebut nilai interpolasi (interpolated value)
(ii) jika x 0 < x k atau x 0 < x n maka y k = p ¿ ¿disebut nilai ekstrapolasi (extrapolated
value).
Misal diberikan tiga buah titik data, (x ¿ ¿ 0 , y 0) ¿, (x ¿ ¿ 1 , y 1 )¿ , (x ¿ ¿ 2 , y 2 )¿ . Polinom yang
menginterpolasi ketiga buah titik itu adalah polinom kuadrat yang berbentuk:
2
p2 ( x ) =a0 +a 1 x +a2 x
Algoritma p2 ( x ) ditetntukan dengan dengan
- Sulihkan ( x i , y ¿ ¿ i)¿ ke dalam persamaan misal, i = 0, 1, 2. Dari sini diperoleh tiga
buah persamaan dengan tiga buah parameter yang tidak diketahui, yaitu a 0 , a1 , dan a2:
2
a 0+ a1 x 0 + a2 x 0= y 0
a 0+ a1 x 1 +a 2 x 21= y 1
2
a 0+ a1 x 2 +a 2 x 2= y 2
- Hitung a 0 , a 1 , dan a2 dari sistem persamaan tersebut dengan metode eliminasi Gauss.

2. Ilustrasi Perhitungan Manual dan Implementasi Koding

r m d
qx +cos x sin x + gx x
− +e
√e x √ eb
Langkah pertama, menginputkan file header beserta type data. Langkah selanjutnya adalah
menginputkan jumlah derajat yang akan digunakan yang berfungsi untuk menentukan jumlah

#include<iostream> //biasa digunakan untuk menginputkan cin dan cout


#include<conio.h> //menampilakan antarmuka kepada pengguna
#include<stdlib.h> //operasi pembanding
cout<<"Masukkan Nilai q = ";cin>>q //Untuk menginput nilai ke variabel q
#include<math.h>
cout<<"Masukkan Nilai r = ";cin>>r;//menggunakan fungsi matematika
//Untuk menginput nilai ke variabel r
using namespace std; Nilai m = ";cin>>m;
cout<<"Masukkan //Untuk menginput nilai ke variabel m
intcout<<"Masukkan
main() //fungsi
Nilai d = ";cin>>d; utama C++ //Untuk menginput nilai ke variabel d
{ cout<<"Masukkan Nilai g =xp,
float x[100], y[100], ";cin>>g;
L=0, pi; //Untuk menginput
//tipe data bilangan nilai ke variabel g
desimal
cout<<"Masukkan Nilai b
int n,i,j,q,r,m,d,g,b; = ";cin>>b; //Untuk
//tipe data bilangan bulatke variabel b
menginput nilai
string jawab; //tipe data teks string jawab;
cout<<"Masukkan jumlah derajat: "; //output program
//tipe data teks
cin>>n; //menginput nilai derajat yang diinginkan //output program
cout<<endl<<"Masukkan nilai x"<< endl; //output program
for(i=0;i<=n;i++) //perulangan i
//Untuk fungsi perulangan
{
cout<<"x["<<i<<"] = "; //perulangan nilai x ke-i
cin>>x[i]; //menginput nilai x //output program
}
cout<<endl<<"Masukkan nilai p"<<n<<" atau x: "; //output program
cin>>xp;

x 0 hingga x n. Perulangan untuk menentukan banyaknya x yang dicetak berdasarkan derajat


menggunakan fungsi for.
Setelah menginputkan nilai x 0 hingga x n secara manual dan nilai x sejati, maka nilai y secara
otomatis akan keluar sebanyak jumlah derajat yang diinputkan. Berikutnya, program akan
menampilkan nilai sejati dari fungsi matematika yang digunakan.
f ( x )=(x−x 1)(x−x 2 )( x−x 3) ¿ ¿

( 15−0.9)(15−1.3)(15−1.7)(15−2.1) (15−0.5)(15−1.3)(15−1.7)(15−2.1
y ( 15 )= ×1.6691+
(0.5−0.9)(0.5−1.3)(0.5−1.7)(0.5−2.1) (0.9−0.5)(0.5−1.3)(0.5−1.7)(0.5−2

(14.1)(13.7)(13.3)(12.9) (14.5)(13.7)(13.3)(12.9) ( 14.5 ) ( 14.1 )( 13.3


y ( 15 )= × 1.6691+ × 1.9161+
(−0.4 )(−0.8 )(−1.2 ) (−1.6 ) (0.4)(−0.4)(−0.8)(−1.2) ( 0.8 ) (0.4)(−0.4 )
y ( 15 )=90,035.168+(−425,164.383)+688,053.119+(−557,018.39)+205,721.26
y ( 15 )=1,626.774

for(i=0;i<=n;i++) /perulangan variabel i


//Untuk fungsi perulangan
{
y[i]=(q*pow(x[i],r)+pow(cos(x[i]),m))/(sqrt(exp*(x[i])))-((sin(x[i])*sin(x[i]))
+g*x[i])/(sqrt(exp*(b)))+exp*(x[i]); //fungsi matematika
}
//Area Menampilkan data
cout<<"================================================="<<endl;
cout<<" x | y "<<endl; //tampilan output
cout<<"================================================="<<endl;
for(i=0;i<=n;i++) //perulanagn I untuk mencari nilai x
//Untuk fungsi perulangan
{ cout<<" "<<x[i]<<" | "<<y[i]<<endl; }
//Interpolasi metode Lagrange
for(i=0;i<=n;i++) //Untuk fungsi perulangan
{ pi=1;
for(j=0;j<=n;j++) //Untuk fungsi perulangan
{ if(i!=j) //Untuk fungsi perulangan
{ pi=pi*(xp- x[j])/(x[i]-x[j]); } } //rumus interpolasi lagrange
L=L+pi*y[i]; //rumus interpolasi lagrange
}
cout<<endl<<"Menggunakan polinom interpolasi p"<<n<<"(x) dengan nilai x="<<xp<<
" maka hasilnya: "<<L; } //output program
3. Uji Coba Hasil

Fungsi matematika:

Jika diinputkan nilai q=3, r=4, m=1, d=2, g=2, b=5 dan derajat yang digunakan adalah derajat
3.

Setelah menginputkan jumlah derajat, yakni derajat 2 maka, nilai x yang akan diinputkan
adalah x 0=0.25 , x 1=0.5 , x2 =0.75 , dan x 3=1.0 dengan menginputkan nilai x sejati sebesar 9,
maka;

Maka, nilai y akan ditampilkan secara otomatis oleh program. Hasil dari interpolasi
lagrange derajat 3 dengan x sejati sebesar 15 adalah 1513.5.

4. Pembahasan Hasil dengan Membandingkan dengan Aplikasi Atozmath


Perbandingan
Hasil Aplikasi Hasil Program Selisih
X9 1,514.9525 1,514.5 0.4525

Bersadarkan nilai X9 yang dihasilkan dari program C++ dan aplikasi maka, diketahui
selisih sebesar 0.4525. sehingga, dapat disimpulkan bahwa program C++ dapat berjalan
dengan cukup baik.

Anda mungkin juga menyukai