Rabu, 30 Januari 2013

Metode Secant dengan C++

Ok gan, masih tentang program penyelasaian Sistem Persamaan Non Linier (SPNL), kali ini saya akan memberikan metode terakhir yang saya buat untuk penyelesaian SPNL ini. Setelah pada postingan kemarin dengan metode Newton Raphson, pada postingan ini saya memberikan metode terbuka yang kedua yaitu metode Secant. Programnya bisa agan langsung download di sini, dan untuk codingnya langsung aja ni di bawah :

#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 x0, x1, x2, fx0, fx1, fx2;
char lagi;
atas:
clrscr();
cout<<"       ===Sistem Persamaan Non Linier===\n";
cout<<"       ==========Metode Secant==========\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 (X0 dan X1): \n";
cout<<"    X0 : ";
cin>>x0;
cout<<"    X1 : ";
cin>>x1;

clrscr();
cout<<endl<<endl;
cout<<"------------------------------------------------------------------------------\n";
cout<<"| Ke |    X0   |    X1   |    X2   |    F(X0)    |    F(X1)    |    F(X2)    |\n";
cout<<"==============================================================================\n";
for (z=1; z<100; z++)
{
fx0=0;
for (b=0; b<=n; b++)
{fx0 = fx0 + (koefisien[b] * pow(x0,pangkat[b]));}
fx1=0;
for (b=0; b<=n; b++)
{fx1 = fx1 + (koefisien[b] * pow(x1,pangkat[b]));}
x2=x1-(fx1*(x1-x0)/(fx1-fx0));
fx2=0;
for (b=0; b<=n; b++)
{fx2 = fx2 + (koefisien[b] * pow(x2,pangkat[b]));}


cout<<"| "<<setw(3)<<setiosflags(ios::left)<<z;
cout<<"| "<<setw(8)<<setiosflags(ios::left)<<x0;
cout<<"| "<<setw(8)<<setiosflags(ios::left)<<x1;
cout<<"| "<<setw(8)<<setiosflags(ios::left)<<x2;
cout<<"| "<<setw(12)<<setiosflags(ios::left)<<fx0;
cout<<"| "<<setw(12)<<setiosflags(ios::left)<<fx1;
cout<<"| "<<setw(12)<<setiosflags(ios::left)<<fx2<<"|\n";
cout<<"------------------------------------------------------------------------------\n";

x0=x1;
x1=x2;
if (fx1==fx2)
{break;}
else
{continue;}
}
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();
}

Sekian dari saya kali ini, semoga apa yang saya posting kali ini bermanfaat dan dapat membantu agan-agan semua. Trima kasih atas kunjungannya, seperti biasa ditunggu kritik dan sarannya di kotak komentar di bawah :)

Tidak ada komentar:

Posting Komentar