Differensiasi tingkat tinggi merupakan proses pendifferensialan secara terus-menerus, hingga tingkatan yang ditentukan. diferensiasi tingkat tinggi merupakan penyempurnaan dari metode metode sebekumnya seperti selisih maju, selisih tengahan. untuk tingakat pendekatan akurasinya sudah dibuktikan hasilnya lebih bagus dengan diferensiasi tingkat tinggi. Tingkat tinggi ada beberapa jenis misal ada tingkat 2 tingkat 3 dan seterusnya untuk rumusnya bisa googling. Saya hanya membahas dengan kode program bagaimana cara mengimplementasikan metode diferensiasi tingkat tinggi di program berikut kodenya :)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<math.h> | |
double a, b, iter, h, i; | |
double akar[100]; | |
int j; | |
double f(double); //prototype mencari nilai f(x) | |
double tengah(double, double); //prototype mencari nilai f'(x) | |
double ftinggi(double, double); //prototype mencari nilai f''(x) | |
main(){ | |
int wek=0, k; | |
char choice; | |
double cek; | |
do{ | |
if(wek!=0){ //ketika variable wek tidak sama dengan nol, lakukan triple break | |
printf("\n\n\n"); | |
} | |
fflush(stdin); //me-refresh memory | |
printf("Selamat datang!\n"); | |
printf("f(x)=x*exp(-x)+cos(2*x)\n"); | |
printf("\nSilahkan masukkan nilai-nilai parameternya\n"); | |
printf("Peringatan: Nilai batas atas harus lebih besar dari nilai batas bawah!\n\n"); | |
printf("Masukkan nilai batas atas ==> "); //memasukkan nilai batas atas | |
scanf("%lf", &a); | |
printf("Masukkan nilai batas bawah ==> "); //memasukkan nilai bats bawah | |
scanf("%lf", &b); | |
printf("Masukkan nilai iterasi maksimal ==> "); //memasukkan nilai iterasi masksimal | |
scanf("%lf", &iter); | |
if(a<b){ //ketika batas atas lebih kecil dari batas bawah, tukarkan nilainya | |
printf("\nAnda terbalik memasukkan nilai batas\n"); | |
printf("Menukarkan nilai batas\n"); | |
cek=a; | |
a=b; | |
b=cek; | |
} | |
h=(a-b)/iter; //mendapatkan nilai update | |
i=b; //memberikan nilai b ke i | |
j=0; //deklarasi indeks matriks ke nol | |
printf("\n\nx\tf(x)\t\tf'(x)\t\tf''(x)\n"); | |
while(i<(a+h)){ //looping selama tidak melebihi nilai batas atas | |
if(i>a){ //ketika melebihi batas atas, lakukan break | |
break; | |
} | |
printf("%g\t%lf\t%lf\t%lf\n", i, f(i), tengah(i, h), ftinggi(i, h)); | |
if(tengah(i, h)*tengah((i+h), h)<0){ //kondisi untuk mendapatkan akar titik puncak | |
if(fabs(tengah(i, h)<fabs(tengah((i+h), h)))){ | |
akar[j]=i; | |
} | |
else{ | |
akar[j]=(i+h); | |
} | |
j++; | |
} | |
i=i+h; | |
} | |
printf("\n\nDi antara range %g dan %g terdapat %d titik puncak\n", b, a, j); | |
for(k=0; k<j; k++){ //looping untuk menentukan tipe titik puncak | |
printf("Titik puncak yang berada di %g adalah titik puncak ", akar[k]); | |
if(ftinggi(akar[k], h)<0){ | |
printf("maksimum\n"); | |
} | |
else{ | |
printf("minimum\n"); | |
} | |
} | |
wek=1; | |
fflush(stdin); //me-refresh memory | |
printf("Apakah kembali ke menu utama? (Y/N) "); | |
scanf("%c", &choice); | |
}while((choice=='Y')||(choice=='y')); | |
printf("Terima kasih telah datang berkunjung!\n"); | |
} | |
double f(double x){ | |
return (x*exp(-x)+cos(2*x)); | |
} | |
double tengah(double x, double y){ | |
return((f(x+y)-f(x-y))/2*y); | |
} | |
double ftinggi(double x, double y){ | |
return((f(x+2*y)-2*f(x)+f(x-2*y))/4*y*y); | |
} |
nah itu kodenya silakan di ikutkan dan dicoba di komputer anda semoga manfaat.