penyelesain soal metode numerik
DESCRIPTION
- Dekomposisi LU dan Partial Pivot- Interpolasi polinom Newton- Polynomial LagrangeTRANSCRIPT
-
TUGAS METODE NUMERIK
PEMBUATAN ALGORITMA PROGRAM C++
UNTUK MENYELESAIKAN SOAL UTS
Oleh Mahasiswa Pra S2 Matematika 2013:
Dosen:
Dr. Dwi Ratna S., M.T
Jurusan Matematika - Fakultas MIPA
Institut Teknologi Sepuluh Nopember (ITS)
Surabaya
2014
Arif Fadllullah (1213200039)
Dwi Lesmideyarti (1213200044)
Salya Rater (1213200036)
-
SOAL:
1. a) Selesaikan sistem persamaan berikut dengan menggunakan dekomposisi LU dan partial pivot:
21 62 3 = 38 31 2 + 73 = 34 81 + 2 23 = 20
b) Tentukan matriks invers.
2. Jika diberikan data:
x1= 3 f(x1) = 6.5
x2= 4 f(x2) = 2
x3= 2,5 f(x3) = 7
x4= 5 f(x4) = 0
a) Hitung f(3,4) dengan menggunakan polinom interpolasi Newton orde ke-1 sampai orde ke-3.
b) Hitung galat yang terjadi pada masing-masing orde dengan menggunakan persamaan berikut:
[+1, , 1, . . , 0]( 0)( 1) . . ( )
3. Diketahui data berikut:
x 1 2 3 5 6
f(x) 4,75 4 5,25 19,75 36
Hitung f(3,5) dengan menggunakan metode polynomial lagrange dari orde ke-1 sampai orde ke-3.
Pilihlah titik-titik awal untuk mendapatkan hasil yang akurat. Apakah hasil yang diperoleh
menunjukkan adanya hubungan dengan orde polynomial yang digunakan?
JAWAB:
1. a) Berikut ditampilkan algoritma dan hasil program untuk mencari dekomposisi LU dan partial pivot
Partial pivot: /*---------------------------------------Fungsi Partial Pivoting------------------------------------------*/
void partial_pivoting(int baris, int kolom)
{
float temp[5]; //inisialisasi variabel array temp untuk menampung sementara data nilai
int i, j; //inisialisasi variabel untuk increement
//i=0 dijalankan jika nilai baris ke 0 kolom ke 0 lebih besar daripada baris ke 1 kolom ke 0 dan baris ke 2 kolom ke 0
if(nilai[0][0]>nilai[1][0]&&nilai[0][0]>nilai[2][0]) i=0;
//i=1 dijalankan jika nilai baris ke 1 kolom ke 0 lebih besar daripada baris ke 0 kolom ke 0 dan baris ke 2 kolom ke 0
else if(nilai[1][0]>nilai[0][0]&&nilai[1][0]>nilai[2][0]) i=1;
//i=2 dijalankan jika nilai baris ke 2 kolom ke 0 lebih besar daripada baris ke 0 kolom ke 0 dan baris ke 1 kolom ke 0
else if(nilai[2][0]>nilai[0][0]&&nilai[2][0]>nilai[1][0]) i=2;
for(j=0;j
-
{
nilai[0][j]=nilai[0][j]/temp[4]; //partial pivoting, dimana semua baris pertama pada matriks dibagi dengan nilai
baris ke-0 kolom ke-0
}
}
Dekomposisi LU: /*-------------------------------Fungsi Mencari Akar Persamaan Dengan LU---------------------------------*/
void proses_LU(int baris, int kolom)
{
//inisialisasi variabel dan array untuk temp data
int l=0, k;
float x, temp[3];
char jud;
/*-------------------------MENCARI MATRIKS U-----------------------------------*/
temp[0]=nilai[1][0]; //mengcopy nilai yang tersimpan pada nilai[1][0] ke temp[0]
temp[1]=nilai[2][0]; //mengcopy nilai yang tersimpan pada nilai[2][0] ke temp[1]
//perulangan untuk menghasilkan nilai 0 pada baris ke 2 kolom ke 0, baris ke 3 kolom ke 0, dan baris ke 3 kolom ke 1
secara gauss elimination
for(i=1;i
-
nilai[6][0]=nilai[0][3];
nilai[6][1]=nilai[1][3]-(nilai[4][0]*nilai[6][0]);
nilai[6][2]=nilai[2][3]-(nilai[5][0]*nilai[6][0])-(nilai[5][1]*nilai[6][1]);
/*---------------------MENCETAK NILAI AKAR PERSAMAAN-----------------------------------*/
nilai[7][2]=nilai[6][2]/nilai[2][2];
nilai[7][1]=(nilai[6][1]-(nilai[1][2]*nilai[7][2]))/nilai[1][1];
nilai[7][0]=(nilai[6][0]-(nilai[0][1]*nilai[7][1])-(nilai[0][2]*nilai[7][2]))/nilai[0][0];
cout
-
Tampilan Hasil Program Dekomposisi LU dan Partial Pivot:
b) Berikut ditampilkan algoritma dan hasil program untuk mencari matriks invers: void olah_invers_identitas(int l, int m, int kolom)
{
float temp[3];
int r, s;
/* Proses Pertama--------------------------------------*/
temp[0]=nilai[m][m];
for(j=0;j
-
int k, l, m;
//Membuat matrik identitas
for(i=0;i
-
}
//Mencari nilai f(x) dan galat untuk orde ke-2
b[1]=(((nilai_fx[m]-nilai_fx[l])/(nilai_x[m]-nilai_x[l]))-b[0])/(nilai_x[m]-nilai_x[i]);
if(orde==2)
{
L=nilai_fx[i]+(b[0]*(x-nilai_x[i]))+(b[1]*(x-nilai_x[i])*(x-nilai_x[l]));
galat=(b[1]*(x-nilai_x[i])*(x-nilai_x[l]));
}
//Mencari nilai f(x) dan galat untuk orde ke-3
k=(((nilai_fx[n]-nilai_fx[m])/(nilai_x[n]-nilai_x[m]))-((nilai_fx[m]-nilai_fx[l])/(nilai_x[m]-
nilai_x[l])))/(nilai_x[n]-nilai_x[l]);
b[2]=(k-b[1])/(nilai_x[n]-nilai_x[i]);
if(orde==3)
{
L=nilai_fx[i]+(b[0]*(x-nilai_x[i]))+(b[1]*(x-nilai_x[i])*(x-nilai_x[l]))+(b[2]*(x-nilai_x[i])*(x-
nilai_x[l])*(x-nilai_x[m]));
galat=(b[2]*(x-nilai_x[i])*(x-nilai_x[l])*(x-nilai_x[m]));
}
cout
-
Tampilan Hasil Program untuk mencari f(3.4) orde ke-1 s/d 3 serta galatnya berdasarkan rumus
interpolasi newton:
3. Berikut ditampilkan algoritma polinom interpolasi Lagrange orde ke-1 sampai orde ke-3.
Interpolasi Lagrange /*-----------------------------Fungsi Proses Lagrange berdasarkan orde ke 1 s/d 3-------------------------*/
void orde_lagrange(int orde, int i, float x, int p)
{
float L=0, p1, p2, p3;
int l,m,n;
for(i=p; i
-
Tampilan Hasil Program untuk mencari f(3.5) orde ke-1 s/d 3 berdasarkan rumus interpolasi
lagrange:
Input Pilih Menu
Input Banyaknya Baris Data
Input data tabel nilai x dan f(x) secara
berurutan dari terkecil hingga ke besar
Input nilai yang dicari, misal
f(3.5)