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