Metode Secant merupakan perbaikan dari Metode Newton Raphson. Perbedaan dari Metode Secant ini adalah rumus untuk mencari nilai x selanjutnya dan juga pada Metode Secant membutuhkan inputan 2 nilai x untuk memulai iterasi. Perbedaan lainya sekaligus keunggulan Metode Secant ini adalah tidak perlu mengetahui turunan dari fungsi yang telah kita inisialisasi, berbeda dengan Metode Newton Raphson yang harus menginisialisasi 2 buah fungsi, yaitu fungsi f(x) dan f'(x) (turunan fungsi f(x)).
Berikut algoritma dari Metode Secant :
- inisialisasi fungsi x (f(x));
- inisialisai array x[ ], fx[ ],e, abso[ ] //e merupakan nilai error, abso merupakan absolut dari fx
- inisialisasi k,i,n, dan temp = 0;
- masukan batas awal, batas akhir, nilai error dan jumlah iterasi
- apakah i kurang dari n ?(n=jumlah iterasi maksimum)
- ya :
- fx[indeks i]=fungsix(x[indeks i]);
- fx[indeks i+1] =fungsi(x[indeks i+1]);
- x[indeks 1+2]= x[indeksi+1] - fx[indeks i+1] * (x[indeks i+1] - x[indeks i]) / (fx[indeks i+1] - fx[indeks i]);
- fx[indeks i+] = fungsi(x[indeks i+2]);
- abso[indeks i] = fx[indeks i+2];
- jika fx[indeks i+2]<0 : abso[indeks i] dikali -1 //menjadi positif
- cetak nilai x[indeks i+2], fx[indeks i+2], dan abso[indeks i];
- jika abso[indeks i]<0 :keluar perulangan;
- increment nilai i;
- kembali ke langkah 5.
Source Code-nya seperti berikut :
#include <stdio.h>
#include <math.h>
#define max 100
double fungsix(double);
main(){
double x[max]={0.5}, fx[max], e=0.0001,abso[max];
int i =0, n=0,j=0,k=0, temp=0;
puts("\t\t >>>METODE SECANT<<<");
puts("\t\t f(x)=x *x - (x+1)^exp(-x)");
printf("Masukan nilai awal : ");
scanf("%lf", &x[0]);
printf("Masukan nilai akhir : ");
scanf("%lf", &x[1]);
printf("Masukan nilai error : ");
scanf("%lf", &e);
printf("Masukan jumlah iterasi : ");
scanf("%d", &n);
puts(" no x\t fx absolut fx");
while(i<=(n-1)){
fx[i] = fungsix(x[i]);
fx[i+1] = fungsix(x[i+1]);
x[i+2] = x[i+1] - fx[i+1] * (x[i+1] - x[i]) / (fx[i+1] - fx[i]);
fx[i+2] = fungsix(x[i+2]);
abso[i] = fx[i+2];
if (fx[i+2] < 0 )
abso[i] *=-1;
printf("%3d %9lf %15.9lf %9lf\n",i+1,x[i+2], fx[i+2], abso[i]);
if ( abso[i] < e )
break;
i++;
}
}
double fungsix (double a){
double hasil;
hasil = a*a - (a+1)*(exp(-a));
return hasil;
}
keterangan : teks dengan warna biru adalha fungsi yang saya gunakan, sobat bisa menggantinya dengan fungsi yang lain.
terimakasih sobat yang telah berkunjung, jangan lupa untuk di bagikan. Berbag itu menyenangkan.
sekilas motivasi untuk hari ini :
"Keberuntungan adalah peristiwa saat persiapan bertemu dengan peluang"~L. Seneca
pak mau bertanya, kenapa di bagian double, variabelnya di beri nilai? Bukankah kita nanti menginputkannya?
ReplyDelete