Rabu, 09 Januari 2013

Metode Interpolasi Linier dengan C++

Update dulu gan. Lanjutan dari kemarin ni gan tentang penyelesaian sistem persamaan non linier (SPNL). Kalau yang kemarin metode Bagi Dua (Bisection), nah sekarang saya akan berbagi kepada agan-agan semua metode interpolasi linier. Langsung aja ni gan, ni codingnya :


#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <iomanip.h>
#include <stdlib.h>

main()
{
int n, k, p, a, b, z;
float koefisien[15];
int pangkat[15];
float xa, xb, xt, fxa, fxb, fxt;
char lagi;
atas:
clrscr();
cout<<"       ========Sistem Persamaan Non Linier========\n";
cout<<"       =========Metode Interpolasi Linier=========\n\n";
cout<<"\n Input nilai pangkat tertinggi dari fungsi : ";
cin>>n;
cout<<"\n Input nilai koefisien !\n";
for (k=0; k<=n; k++)
{
cout<<"   Koefisien X^"<<n-k<<" : ";
cin>>koefisien[k];
}
for (p=0; p<=n; p++)
{
pangkat[p]=n-p;
}
cout<<"\n\n F(X) = ";
for (a=0; a<=n; a++)
{
   if (pangkat[a]==n && n!=1 && koefisien[a]>1)
   {cout<<koefisien[a]<<"X^"<<pangkat[a];}
   else if (pangkat[a]==n && n!=1 && koefisien[a]==1)
   {cout<<"X^"<<pangkat[a];}
   else if (pangkat[a]==n && n!=1 && koefisien[a]==-1)
   {cout<<"-X^"<<pangkat[a];}
   else if (pangkat[a]==n && n!=1 && koefisien[a]<-1)
   {cout<<"-"<<-1*koefisien[a]<<"X^"<<pangkat[a];}
   else if (pangkat[a]==n && n==1 && koefisien[a]>1)
   {cout<<koefisien[a]<<"X";}
   else if (pangkat[a]==n && n==1 && koefisien[a]==1)
   {cout<<"X";}
   else if (pangkat[a]==n && n==1 && koefisien[a]==-1)
   {cout<<"-X";}
   else if (pangkat[a]==n && n==1 && koefisien[a]<-1)
   {cout<<"-"<<-1*koefisien[a]<<"X";}
   else if (pangkat[a]==1 && koefisien[a]>1)
   {cout<<" + "<<koefisien[a]<<"X";}
   else if (pangkat[a]==1 && koefisien[a]==1)
   {cout<<" + "<<"X";}
   else if (pangkat[a]==1 && koefisien[a]==-1)
   {cout<<" - X";}
   else if (pangkat[a]==1 && koefisien[a]<-1)
   {cout<<" - "<<-1*koefisien[a]<<"X";}
   else if (pangkat[a]==0 && koefisien[a]>0)
   {cout<<" + "<<koefisien[a]<<" = 0";}
   else if (pangkat[a]==0 && koefisien[a]<0)
   {cout<<" - "<<-1*koefisien[a]<<" = 0";}
   else if (pangkat[a]==0 && koefisien[a]==0)
   {cout<<" = 0";}
   else if (pangkat[a]!=0 && koefisien[a]==0)
   {cout<<"";}
   else if (pangkat[a]>1 && pangkat[a]!=n && koefisien[a]==1)
   {cout<<" + "<<"X^"<<pangkat[a];}
   else if (pangkat[a]>1 && pangkat[a]!=n && koefisien[a]==-1)
   {cout<<" - "<<"X^"<<pangkat[a];}
   else if (pangkat[a]<n && koefisien[a]<0)
   {cout<<" - "<<-1*koefisien[a]<<"X^"<<pangkat[a];}
else
{cout<<" + "<<koefisien[a]<<"X^"<<pangkat[a];}
}
cout<<"\n\n Input 2 nilai tebakan awal (XA dan XB): \n";
cout<<"    XA : ";
cin>>xa;
cout<<"    XB : ";
cin>>xb;


clrscr();
cout<<endl<<endl;
cout<<"------------------------------------------------------------------------------\n";
cout<<"| Ke |    XA   |    XB   |    XT   |    F(XA)    |    F(XB)    |    F(XT)    |\n";
cout<<"==============================================================================\n";
for (z=1; z<100; z++)
{
fxa=0;
for (b=0; b<=n; b++)
{fxa = fxa + (koefisien[b] * pow(xa,pangkat[b]));}
fxb=0;
for (b=0; b<=n; b++)
{fxb = fxb + (koefisien[b] * pow(xb,pangkat[b]));}
xt=xb-((xb-xa)*fxb)/(fxb-fxa);
fxt=0;
for (b=0; b<=n; b++)
{fxt = fxt + (koefisien[b] * pow(xt,pangkat[b]));}


cout<<"| "<<setw(3)<<setiosflags(ios::left)<<z;
cout<<"| "<<setw(8)<<setiosflags(ios::left)<<xa;
cout<<"| "<<setw(8)<<setiosflags(ios::left)<<xb;
cout<<"| "<<setw(8)<<setiosflags(ios::left)<<xt;
cout<<"| "<<setw(12)<<setiosflags(ios::left)<<fxa;
cout<<"| "<<setw(12)<<setiosflags(ios::left)<<fxb;
cout<<"| "<<setw(12)<<setiosflags(ios::left)<<fxt<<"|\n";

if (fxt > 0)
{xb=xt;}
else
{xa=xt;}
if (fxa==fxt || fxb==fxt)
{break;}
else
{continue;}
}
cout<<"------------------------------------------------------------------------------\n";
cout<<"\n\n Tekan [1] untuk menghitung lagi atau tekan [2] untuk menutup program.";
lagi=getche();
if (lagi=='1')
{goto atas;}
else
{exit(0);}
getch();
}

Program metode iterpolasi linier.exe bisa langsung di download di sini gan. Sekian dulu gan postingan kali ini, semoga bermanfaat dan dapat membantu agan-agan semua. Terima kasih atas kunjungannya, jika ada kritik dan saran langsung aja di kotak komentar :)

Tidak ada komentar:

Posting Komentar