ariestamirra

integrasi numerik - metnum full

Jun 1st, 2014
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double h,a,b,n;
  5. int pilih;
  6. char ulang='y';
  7.  
  8. double fx();
  9. double feksak();
  10. double gu();
  11. void input();
  12. void Trapezoid();
  13. void Reimann();
  14. void SimpsonSepertiga();
  15. void SimpsonTigaperDelapan();
  16. void kuadratur2titik(double atas,double bawah);
  17. void kuadratur3titik(double atas,double bawah);
  18.  
  19. main()
  20. {
  21.     printf("\n===================================\n");
  22.     printf("\tINTEGRASI NUMERIK MENU\n By Raizal Islami Nursyah Pregnanta");
  23.     printf("\n===================================\n");
  24.     input();
  25.     do{
  26.         printf("\nIntegrasi Numerik Menu :\n1. Reimann\n2. Trapezoid\n3. Simpson 1/3\n4. Simpson 3/8\n5. Kuadratur Gauss 2 Titik\n6. Kuadratur Gauss 3 Titik\n");
  27.         printf("Pilihan Menu : ");
  28.         scanf("%d", &pilih);
  29.         switch(pilih){
  30.             case 1 : Reimann(); break;
  31.             case 2 : Trapezoid();break;
  32.             case 3 : SimpsonSepertiga();break;
  33.             case 4 : SimpsonTigaperDelapan();break;
  34.             case 5 : kuadratur2titik(a,b);break;
  35.             case 6 : kuadratur3titik(a,b);break;
  36.             default : printf("\nPilihan Tidak Ada!\n");
  37.         }
  38.         fflush(stdin);
  39.         printf("\nApakah Ingin Mengulang?");
  40.         scanf("%c",&ulang);
  41.     }while(ulang=='y'||ulang=='Y');
  42. }
  43.  
  44. void input(){
  45.     printf("Masukkan nilai bawah : ");
  46.     scanf("%lg",&a);
  47.     printf("Masukkan nilai atas  : ");
  48.     scanf("%lg",&b);
  49.     printf("Masukkan nilai N     : ");
  50.     scanf("%lg",&n);
  51.     h=(b-a)/n;
  52. }
  53.  
  54. double fx(double x){
  55.     return x*x;
  56. }
  57.  
  58. double feksak(double x){
  59.     return pow(x,3)/3;
  60. }
  61.  
  62. double gu(double u){
  63.     return ( ((b-a)/2) * fx( ( ( (b-a)/2)*u) + ( (b+a)/2) ) );
  64. }
  65.  
  66.  
  67. void Reimann(){
  68.     double total=0;
  69.     double x0=a;
  70.     double x1=a+h;
  71.     double luasasli , luas , error;
  72.     int i;
  73.     printf("\nTabel Integrasi Numerik Reimann :");
  74.     printf("\n=======================================================\n");
  75.     printf("| %c  |     %s    |     %s    |   %s   | %s  |\n",'i',"x0","x1","Luas","f'eksak(x)");
  76.     printf("=======================================================\n");
  77.     for(i=1;i<=n;i++){
  78.         luasasli=feksak(x1);
  79.         luas=(x1-x0)*fx(x1);
  80.         error=fabs(luasasli-luas);
  81.         total+=luas;
  82.         printf("|%3d |%-10lg |%-10lg |%-10lg|%-12lg |\n",i,x0,x1,luas,luasasli);
  83.         x0=x1;
  84.         x1=x1+h;
  85.      }
  86.     printf("=======================================================\n\n");
  87.     printf("luas  : %-10lg\n",total);
  88.     printf("Eksak : %-10.3lg\n", luasasli);
  89.     printf("=============== -\n");//error adalah pengurangan luas dengan eksak
  90.     printf("Error : %-10.3lg\n", total-luasasli);
  91. }
  92.  
  93. void Trapezoid(){
  94.     double total=0;
  95.     double x0=a;
  96.     double x1=a+h;
  97.     double luasasli , luas , total_luas , error;
  98.     int i;
  99.     printf("\nTabel Integrasi Numerik Trapezoid :");
  100.     printf("\n=======================================================\n");
  101.     printf("| %c  |     %s    |     %s    |   %s   | %s  |\n",'i',"x0","x1","Luas","f'eksak(x)");
  102.     printf("=======================================================\n");
  103.     for(i=1;i<=n;i++){
  104.         luasasli=feksak(x1);
  105.         luas=fx(x0)+fx(x1);
  106.         total=total+luas;
  107.         printf("|%3d |%-10lg |%-10lg |%-10lg|%-12lg |\n",i,x0,x1,luas,luasasli);
  108.         x0=x1;
  109.         x1=x1+h;
  110.     }
  111.     printf("=======================================================\n\n");
  112.     total_luas=(total*h)/2;
  113.     printf("Luas  : %-10lg\n",total_luas);
  114.     printf("Eksak : %-10.3lg\n", luasasli);
  115.     printf("=============== -\n");//error adalah pengurangan luas dengan eksak
  116.     printf("Error : %-10.3lg\n", total_luas-luasasli);
  117. }
  118.  
  119. void SimpsonSepertiga()
  120. {
  121.     double total=0;
  122.     double x0=a;
  123.     double x1=a+h ,sigma1=0,sigma2=0;
  124.     double luasasli , luas , total_luas , error;
  125.     int i;
  126.     printf("\nTabel Integrasi Numerik Simpson 1/3 :");
  127.     printf("\n=========================================\n");
  128.     printf("| %c  |    %s    |   %s   | %s  |\n",'i',"x","f(x)","f'eksak(x)");
  129.     printf("=========================================\n");
  130.     x0=a;
  131.     for(i=0;i<n;i++){
  132.         printf("|%3d |%-8lg |%-10lg|%-13lg|\n", i, x0, fx(x0), feksak(x0));
  133.         if(i%2==0){
  134.             sigma2+=2*fx(x0);//untuk fungsi genap
  135.         }
  136.         else{
  137.             sigma1+=4*fx(x0);//untuk fungsi ganjil
  138.         }
  139.         x0=x0+h;
  140.     }
  141.     printf("=========================================\n");
  142.     luasasli = feksak(b) - feksak(a);
  143.     total_luas=((fx(a)+sigma1+sigma2+fx(b))*h)/3;
  144.     error=fabs(total_luas-luasasli);
  145.     puts("");
  146.     printf("Luas dengan Metode Simpson 1/3= %lf\n", total_luas);
  147.     printf("Luasan eksak                  = %lf\n", luasasli);
  148.     printf("Error                         = %.1lf\n", error);
  149.     puts("");
  150.     puts("===================================================");
  151. }
  152.  
  153. void SimpsonTigaperDelapan()
  154. {
  155.  
  156.     double total=0;
  157.     double x0=a;
  158.     double x1=a+h ,sigma1=0,sigma2=0;
  159.     double luasasli , luas , total_luas , error;
  160.     int i;
  161.  
  162.     printf("\nTabel Integrasi Numerik Simpson 3/8 :");
  163.     printf("\n=========================================\n");
  164.     printf("| %c  |    %s    |   %s   | %s  |\n",'i',"x","f(x)","f'eksak(x)");
  165.     printf("=========================================\n");
  166.     x0=a;
  167.     for(i=0;i<n;i++){
  168.         printf("|%3d |%-8lg |%-10lg|%-13lg|\n", i, x0, fx(x0), feksak(x0));
  169.         if(i%3==0){
  170.             sigma2+=2*fx(x0);//untuk fungsi genap
  171.         }
  172.         else{
  173.             sigma1+=3*fx(x0);//untuk fungsi ganjil
  174.         }
  175.         x0=x0+h;
  176.     }
  177.     printf("=========================================\n");
  178.     luasasli = feksak(b) - feksak(a);
  179.     total_luas=((fx(a)+sigma1+sigma2+fx(b))*(3*h))/8;
  180.     error=fabs(total_luas-luasasli);
  181.     puts("");
  182.     printf("Luas dengan Metode Simpson 3/8= %g\n", total_luas);
  183.     printf("Luasan eksak                  = %g\n", luasasli);
  184.     printf("Error                         = %g\n", error);
  185.     puts("");
  186.     puts("===================================================");
  187. }
  188.  
  189. void kuadratur2titik(double atas,double bawah)
  190. {
  191.     double a = bawah, b = atas;
  192.     double luasasli,total,error;
  193.  
  194.     puts("========================================");
  195.     puts("METODE INTEGRAL KUADRATUR GAUSS 2 TITIK");
  196.     puts("========================================");
  197.     total = gu((-(0.577350269))) + gu((0.577350269)) ;//rumus luas kuadratur gauss 2 titik
  198.     printf("\n");
  199.     puts("===================================================");
  200.     luasasli = feksak(b) - feksak(a);
  201.     error = fabs( fabs(total) - fabs(luasasli) );
  202.     puts("");
  203.     printf("Luas dengan Metode Integrasi Gauss 2 Titik  = %lf\n", total);
  204.     printf("Luasan eksak                                = %lf\n", luasasli);
  205.     printf("Error                                       = %lg\n", error);
  206.     puts("");
  207.     puts("===================================================");
  208. }
  209.  
  210. void kuadratur3titik(double atas,double bawah)
  211. {
  212.     double a = bawah, b = atas;
  213.     double luasasli,total,error;
  214.  
  215.     puts("========================================");
  216.     puts("METODE INTEGRAL KUADRATUR GAUSS 3 TITIK");
  217.     puts("========================================");
  218.     total =  (0.8888*gu(0))+(0.5555*gu(-(sqrt(0.6))))+(0.5555*gu(sqrt(0.6)));
  219.     printf("\n");
  220.     puts("===================================================");
  221.     luasasli = feksak(b) - feksak(a);
  222.     error = fabs( fabs(total) - fabs(luasasli) );
  223.     puts("");
  224.     printf("Luas dengan Metode Integrasi Gauss 3 Titik  = %lf\n", total);
  225.     printf("Luasan eksak                                = %lf\n", luasasli);
  226.     printf("Error                                       = %lg\n", error);
  227.     puts("");
  228.     puts("===================================================");
  229. }
Advertisement
Add Comment
Please, Sign In to add comment