ariestamirra

integrasi numerik - metnum

May 31st, 2014
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.82 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double x0,x1,total=0,h,a,b,n,luas,luasasli,total_luas,error,sigma1=0,sigma2=0;
  5. int i=0, pilih;
  6. char ulang='y';
  7.  
  8. double fx();
  9. double feksak();
  10. void input();
  11. void Trapezoid();
  12. void Reimann();
  13. void SimpsonSepertiga();
  14. void SimpsonTigaperDelapan();
  15.  
  16. main()
  17. {
  18.     printf("\n========================================\n");
  19.     printf("\tINTEGRASI NUMERIK\nMirra Ariesta | 1 D3 IT - B | 2103131055");
  20.     printf("\n========================================\n");
  21.     input();
  22.     do{
  23.         i=0;
  24.         total=0;
  25.         printf("\nIntegrasi Numerik Menu :\n1. Reimann\n2. Trapezoid\n3. Simpson1/3\n4. Simpson 3/8\n");
  26.         printf("Pilihan Menu : ");
  27.         scanf("%d", &pilih);
  28.         switch(pilih){
  29.             case 1 : Reimann(); break;
  30.             case 2 : Trapezoid();break;
  31.             case 3 : SimpsonSepertiga();break;
  32.             case 4 : SimpsonTigaperDelapan();break;
  33.             default : printf("\nPilihan Tidak Ada!\n");
  34.         }
  35.         fflush(stdin);
  36.         printf("\nApakah Ingin Mengulang?");
  37.         scanf("%c",&ulang);
  38.     }while(ulang=='y'||ulang=='Y');
  39. }
  40.  
  41. void input(){
  42.     printf("Masukkan nilai atas  : ");
  43.     scanf("%lg",&b);
  44.     printf("Masukkan nilai bawah : ");
  45.     scanf("%lg",&a);
  46.     printf("Masukkan nilai N     : ");
  47.     scanf("%lg",&n);
  48.     h=(b-a)/n;
  49. }
  50.  
  51. double fx(double x){
  52.     return pow(x,3) + 2 * pow(x,2);
  53. }
  54.  
  55. double feksak(double x){
  56.     return pow(x,4)/4 + 2*x * pow(x,3)/3;
  57. }
  58.  
  59. void Reimann(){
  60.     total=0;
  61.     x0=a;
  62.     x1=a+h;
  63.     printf("\nTabel Integrasi Numerik Reimann :");
  64.     printf("\n=======================================================\n");
  65.     printf("| %c  |     %s    |     %s    |   %s   | %s  |\n",'i',"x0","x1","Luas","f'eksak(x)");
  66.     printf("=======================================================\n");
  67.     for(i=1;i<=n;i++){
  68.         luasasli=feksak(x1);
  69.         luas=(x1-x0)*fx(x1);
  70.         error=fabs(luasasli-luas);
  71.         total+=luas;
  72.         printf("|%3d |%-10lg |%-10lg |%-10lg|%-12lg |\n",i,x0,x1,luas,luasasli);
  73.         x0=x1;
  74.         x1=x1+h;
  75.      }
  76.     printf("=======================================================\n\n");
  77.     printf("luas  : %-10lg\n",total);
  78.     printf("Eksak : %-10.3lg\n", luasasli);
  79.     printf("=============== -\n");//error adalah pengurangan luas dengan eksak
  80.     printf("Error : %-10.3lg\n", total-luasasli);
  81. }
  82.  
  83. void Trapezoid(){
  84.     total=0;
  85.     x0=a;
  86.     x1=a+h;
  87.     printf("\nTabel Integrasi Numerik Trapezoid :");
  88.     printf("\n=======================================================\n");
  89.     printf("| %c  |     %s    |     %s    |   %s   | %s  |\n",'i',"x0","x1","Luas","f'eksak(x)");
  90.     printf("=======================================================\n");
  91.     for(i=1;i<=n;i++){
  92.         luasasli=feksak(x1);
  93.         luas=fx(x0)+fx(x1);
  94.         total=total+luas;
  95.         printf("|%3d |%-10lg |%-10lg |%-10lg|%-12lg |\n",i,x0,x1,luas,luasasli);
  96.         x0=x1;
  97.         x1=x1+h;
  98.     }
  99.     printf("=======================================================\n\n");
  100.     total_luas=(total*h)/2;
  101.     printf("Luas  : %-10lg\n",total_luas);
  102.     printf("Eksak : %-10.3lg\n", luasasli);
  103.     printf("=============== -\n");//error adalah pengurangan luas dengan eksak
  104.     printf("Error : %-10.3lg\n", total_luas-luasasli);
  105. }
  106.  
  107. void SimpsonSepertiga()
  108. {
  109.     printf("\nTabel Integrasi Numerik Simpson 1/3 :");
  110.     printf("\n===========================\n");
  111.     printf("| %c  |    %s    |   %s   |\n",'i',"x","f(x)");
  112.     printf("===========================\n");
  113.     x0=a;
  114.     for(i=0;i<n;i++){
  115.         printf("|%3d |%-8lg |%-10lg|\n", i++, x0, fx(x0));
  116.         if(i%2==0){
  117.             sigma2+=2*fx(x0);//untuk fungsi genap
  118.         }
  119.         else{
  120.             sigma1+=4*fx(x0);//untuk fungsi ganjil
  121.         }
  122.         x0=x0+h;
  123.     }
  124.     printf("===========================\n");
  125.     total_luas=((fx(a)+sigma1+sigma2+fx(b))*h)/3;
  126.     error=fabs(total_luas-luasasli);
  127.     puts("");
  128.     printf("Luas dengan Metode Simpson 1/3= %lf\n", total_luas);
  129.     puts("");
  130.     puts("===================================================");
  131. }
  132.  
  133. void SimpsonTigaperDelapan()
  134. {
  135.     printf("\nTabel Integrasi Numerik Simpson 3/8 :");
  136.     printf("\n===========================\n");
  137.     printf("| %c  |    %s    |   %s   |\n",'i',"x","f(x)");
  138.     printf("===========================\n");
  139.     x0=a;
  140.     for(i=0;i<n;i++){
  141.         printf("|%3d |%-8lg |%-10lg|\n", i, x0, fx(x0));
  142.         if(i%3==0){
  143.             sigma2+=2*fx(x0);//untuk fungsi genap
  144.         }
  145.         else{
  146.             sigma1+=3*fx(x0);//untuk fungsi ganjil
  147.         }
  148.         x0=x0+h;
  149.     }
  150.     printf("===========================\n");
  151.     total_luas=((fx(a)+sigma1+sigma2+fx(b))*(3*h))/8;
  152.     puts("");
  153.     printf("Luas dengan Metode Simpson 3/8= %g\n", total_luas);
  154.     puts("");
  155.     puts("===================================================");
  156. }
Advertisement
Add Comment
Please, Sign In to add comment