Assalamualaikum warrohmatullahi wabarokatuh.
Kali ini saya mau ngepost mengenai optimalisasai Metode Newton Raphson atau mencegah divergen (saat kita menggunakan Metode Newton Raphson namun tidak menemukan akar dari penyelesaian) pada Metode Newton Raphson dengan menggunakan metode Tabel. Prinsip dari metode ini adalah menggunakan Metode Tabel terlebih dahulu dengan memasukan nilai batas atas dan batas bawah. kemudian nilai x dari hasil metode tabel tersebut menjadi nilai awal pada Metode Newton Raphson. berikut adalah algoritma dan Source Code nya :
Algoritma :
- Definisikan fungsi x(f(x) dan turunan fungsi x (g(x));
- Masukan nilai awal x, toleransi error, dan jumlah iterasi, batas awal (a) dan batas akhir(b);
- Inisialisasi i =0, k=0,j=0,temp=0;
- Inisialisasai fx[ ][ ], gx[ ][ ], abso[ ][ ], fx_temp1, fx_temp2, a,b,inc;
- Tentukan increment metode tabel inc = (b-a)/2;
- Apakah nilai i kurang dari sama dengan n-1?jika tidak keluar dari perulangan à indeks 13;
- Fx_temp1= fungsix(a);
- Tambah nilai a dengan inc;
- Fx_temp2 = fungix(a);
- Cetak nilai a dan fx_temp1;
- Jika fx_temp1 dikali fx_temp2 kurang dari 0; simpan a kedalam x[j][k], increment nilai j;
- Increment nilai i; kembali ke 6;
- Inisialisasi temp = 0;
- Apakah temp kurang dari j? Jika tidak keluar dariperulangan
- Inisialisasi i =0;
- Apakah i kurang dari n? Jika tidak keluar perulanganàindeks 24
- Fx[temp][i] = fungsix(x[temp][i]);
- Gx[temp][i] = tururanx f([temp]x[i])
- Abso[temp][i] = fx[temp][i];
- jika fx[i]<0 data-blogger-escaped-abso="" data-blogger-escaped-i="" data-blogger-escaped-span="" data-blogger-escaped-temp="">
- Cetak nilai x[temp][i], fx[temp][i], gx[temp][i];
- i++;
- Jika abso[temp][i] kurang dari e (toleransi error);
- Ya : Keluar perulangan;
- Tidak : kembali ke 16.
#include
#include
#define max 20
double
fungsix(double);
double
diffungsix(double);
main(){
double x[max][max]={0.5}, fx[max][max],
gx[max][max], e=0.0001,abso[max][max], fx_tab1, fx_tab2; //gx merupakan turunan
fx
int i =0, n=10,j=0,k=0, temp=0;
double a=0.9,b=5, inc;
puts("\t>>>METODE TABEL dan
NEWTON RAPSON<<<");
puts("\t\t f(x)=x+e^x");
printf("Masukan nilai awal : ");
scanf("%lf", &a);
printf("Masukan nilai akhir : ");
scanf("%lf", &b);
printf("Masukan nilai error : ");
scanf("%lf", &e);
printf("Masukan jumlah iterasi :
");
scanf("%d", &n);
inc = (b - a) / n;
puts(" no x\t
fx");
while(i<=(n-1)){
fx_tab1 = fungsix(a);
a+=inc;
fx_tab2 = fungsix(a);
printf("%3d %7lf
%9lf \n",i+1,a-inc, fx_tab1);
if (fx_tab1*fx_tab2 < 0){
x[j][k] = a-inc;
j+=1;
}
i++;
}
temp=0;
while(temp
i=0;
puts("=================================================================");
printf("| n | x
| fx |
gx | absolut fx
|\n");
puts("=================================================================");
while(i<=n){
fx[temp][i] =
fungsix(x[temp][i]);
gx[temp][i] =
diffungsix(x[temp][i]);
x[temp][i+1]= x[temp][i] -
(fx[temp][i]/gx[temp][i]);
abso[temp][i] = fx[temp][i];
if(abso[temp][i]<0 data-blogger-escaped-span="">
abso[temp][i] *=-1;
printf("|%2d | %12.9lf |
%12.9lf | %12.9lf | %12.9lf |\n",i+1, x[temp][i],
fx[temp][i],gx[temp][i],abso[temp][i]);
if(abso[temp][i] < e)
break;
i++;
}
puts("=================================================================");
printf("Akar terletak di x
%9.9lf dengan nilai fx %9.9lf\n",x[temp][i], fx[temp][i]);
temp++;
}
}
double fungsix
(double a){
double hasil;
hasil = a*exp(-a) + cos(2*a);//merupakan fungsix (fx) yang bisa kamu masukan sendiri
return hasil;
}
double diffungsix
(double b){
double hasil2;
hasil2 = (1-b)*exp(-b) - 2 * sin(2*b); // merupakan fungsi turunan dari fungsi fx
return hasil2;
}Sekian dari post kali ini terimakasih telah berunjung, berbagi itu memang menyenangkan.
sekilas motivasi : "Bukan kesuliatan yang membuat kita takut melangkah, tetapi ketakutan itulah yang mempersulit"~Seneca
wassalamualaikum warrohmatulahi wabarokatuh.
No comments:
Post a Comment