Senin, 14 Mei 2012

Least Square

PRAKTIKUM METODE NUMERIK

BAB I
TUJUAN DAN DASAR TEORI
1.1 Tujuan

  1. Menguasai metode least square line yang digunakan dalam komputasi numerik
  2. Memahami algoritma pemrograman untuk merancang program metode least square line yang ada dalam komputasi numerik
  3. Menerapkan algoritma untuk perancangan dan pembuatan program metode least square line.

1.2 Dasar Teori
Metode Least – Squares Line memperkirakan titik-titik (x1,y1),(x2,y2) ... (xn,Yn) mempunyai persamaan:

Y = a + bx

Kemudian kita menggunakan metode dari Least Squares.
Metode ini mencari nilai dari a dan b sebagai:



mempunyai nilai minimum berdasarkan pada grafik di bawah.


BAB II
ALAT DAN BAHAN
II.1 Alat dan Bahan yang perlu dipersiapkan:
1) Buku Teks
2) Unit Pemroses
3) Aplikasi Pembuatan Program
            a. Notepad / Notepad++
            b. Aplikasi IDE C++ (Bloodsheed Dev C++)
            c. Mathematica
            d. Matlab
            e. IDE Visual Studio 2010
            f. Netbeans atau Eclipse

BAB III
PROSEDUR PERCOBAAN
III.1 Prosedur Umum
  1. Memahami formulasi matematis Metode Least Square Line
  2. Menulis Algoritma penyelesaian masalah (dengan menggunakan teks dan/atau flow chart)
  3. Menulis pseudocode algoritma
  4. Menguji pseducode algoritma penyelesaian masalah (misalnya dengan menggunakan prosedur Desk Check)
  5. Melakukan kodifikasi
  6. Menguji Program (misalnya dengan menggunakan prosedur Joel Test dan/atau tools seperti NUnit, NCover, NCoverExplorer dan TestDriven.NET, atau menggunakan prosedur pengujian langsung)
  7. Membuat dokumentasi Praktikum (misalnya dengan menggunakan Version Control Subversion, Mercurial, Gita tau Veracity)
III.2 Prosedur Khusus
III.2.1 Contoh menulis program menggunakan IDE Bloodshed Dev C++
  1. Untuk menulis program baru caranya tekan CTRL+N atau pilih NEW lalu klik Source File terlebih dahulu sebelum mengetik program.
  2. Ketikkan program anda.
  3. Simpan program dengan menekan tombol CTRL+F12, pilih Save kemudian pada kotak dialog yang muncul ketikkan nama program pada tempat yang tersedia misalnya Contoh1.cpp, kemudian klik Save atau tekan <ENTER>
  4. Jalankan program dengan terlebih dahulu melakukan kompilasi. Hal ini dapat dilakukan sekaligus dengan mengklik Compile & Run (F9) pada menu bar ataulangsung menekan F9 pada keyboard.
  5. Bila kompilasi tidak berhasil dan memunculkan pesan error, periksa kembali kode program yang ada kemudian perbaiki kesalahan dan lakukan kembali langkah 3 dan 4.  
  6. Untuk membuka arsip yang ada, gunakan OPEN atau tekan CTRL+O pada keyboard.
III.2.2 Contoh Program
#include <iostream>
#include <cmath>
#include<math.h>
using namespace std;
void gauss(int N, // bilangan yg tak diketahui
float A [20] [21], // koefisien constants
float result[20],
bool& err)
// N linear
// metode Gaussian elimination
// baris N dan N+1 kolom A
{
int indx[20];
float scale[20];
float maxRatio;
int maxIndx;
int tmpIndx;
float ratio;
float sum;
for (int i = 0; i < N; i++) indx[i] = i; // inisiasi index array
// skala faktor
for (int row = 0; row < N; row++)
{
scale[row] = abs(A[row][0]);
for (int col = 1; col < N; col++)
{
if (abs(A[row][col]) > scale[row]) scale[row] = abs(A[row][col]);
}
}
// lanjutkan elimination
for (int k = 0; k < N; k++)
{
// index baris pivot
maxRatio = abs(A[indx[k]] [k])/scale[indx[k]];
maxIndx = k;
for (int i = k+1; i < N; i++)
{
if (abs(A[indx[i]] [k])/scale[indx[i]] > maxRatio)
{
maxRatio = abs(A[indx[i]] [k])/scale[indx[i]];
maxIndx = i;
}
}
if (maxRatio == 0) // no pivot available
{
err = true;
return;
}
tmpIndx =indx[k]; indx[k]=indx[maxIndx]; indx[maxIndx] = tmpIndx;
// gunakan baris pivot
for (int i = k+1; i < N; i++)
{
ratio = -A[indx[i]] [k]/A[indx[k]] [k];
for (int col = k; col <= N; col++)
{
A[indx[i]] [col] += ratio*A[indx[k]] [col];
}
}
}
// kembali
for (int k = N-1; k >= 0; k--)
{
sum = 0;
for (int col = k+1; col < N; col++)
{
sum += A[indx[k]] [col] * A[indx[col]] [N];
}
A[indx[k]] [N] = (A[indx[k]] [N] - sum)/A[indx[k]] [k];
}
/*
cout << endl;
for (int r=0; r<N; r++)
{
cout << indx[r];
for (int c=0; c<=N; c++) cout<<" " << A[r][c];
cout << endl;
}
*/
for (int k = 0; k < N; k++) result[k] = A[indx[k]] [N];
}
int main()
{
float A[20][21];
float X[20],C[20],D[20];
float C[8]={-1,0,1,2,3,4,5,6};
float D[8]={10,9,7,5,4,3,0,-1};
float t;
float a,b,c,f;
bool err;
a=0;
b=0;
c=0;
f=0;
for(int l=0; l<=3;l++){
a=a+C[l];
b=b+D[l];
c=c+pow(C[l],2);
f=f+((C[l])*(D[l]));
}
A[0][0] = c;
A[0][1] = a;
A[0][2] = f;
A[1][0] = a;
A[1][1] = t;
A[1][2] = b;
gauss(2, A, X, err);
cout<<endl;
cout<<X[0]<<"X + "<<X[1]<<endl;
std::cin.get();
system("pause");
return 0;
}

Tidak ada komentar:

Posting Komentar