Advertisement
Guest User

Untitled

a guest
May 22nd, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5.  
  6. #define PI 3.1415926359
  7.  
  8. double fonction1(double x)
  9. {
  10.     return x*x - 2;
  11. }
  12.  
  13. double fonction2(double x){
  14.     return sin(x) ;
  15. }
  16.  
  17. double fonction3(double x){
  18.     // 10x^4 + 5x^3 + x^2 + x
  19.     return(10*x*x*x*x + 5*x*x*x + x*x + x);
  20. }
  21.  
  22. double fonction4(double x){
  23.     int j;
  24.     double somme = 0 ;
  25.  
  26.     for (j=1 ; j<=10 ; j=j+1){
  27.         somme = somme + cos((440+40*(j-1))*x) ;
  28.     }
  29.  
  30.     return(somme) ;
  31. }
  32.  
  33. double trapezes(double f(double), int nbIntervalles, double a, double b)
  34. {
  35.     double h, resultat ;
  36.     int i ;
  37.  
  38.     resultat = 0 ;
  39.     h = (b-a)/nbIntervalles ;
  40.     for (i = 1; i < nbIntervalles ; i = i+1) {
  41.         resultat = resultat + f(a + i*h) ;
  42.     }
  43.     resultat = h*((f(a) + f(b))/2 + resultat) ;
  44.  
  45.     return resultat;
  46. }
  47.  
  48. void exoTrapezes()
  49. {
  50.     double resultat;
  51.  
  52.     printf("\nTRAPEZES: \n");
  53.  
  54.     resultat = trapezes(fonction1,10, 0, 6);
  55.     printf("resultat 1: %lf\n", resultat);
  56.  
  57.     resultat = trapezes(fonction2,10, 0, 1);
  58.     printf("resultat 2: %lf\n", resultat);
  59.  
  60.     resultat = trapezes(fonction3,10, 0, 5);
  61.     printf("resultat 3: %lf\n", resultat);
  62.  
  63.     resultat = trapezes(fonction2,10, (PI)/2, (3*PI)/2);
  64.     printf("resultat 4: %lf\n", resultat);
  65.  
  66.     resultat = trapezes(fonction4,10, 0, PI);
  67.     printf("resultat 5: %lf\n", resultat);
  68.  
  69. }
  70.  
  71.  
  72. double simpson(double f(double), int nbIntervalles, double a, double b)
  73. {
  74.     int i;
  75.     double h, x, res1, res2;
  76.  
  77.     nbIntervalles = nbIntervalles * 2;
  78.     h = (b - a) / nbIntervalles;
  79.  
  80.     res1 = 0;
  81.     res2 = 0;
  82.     for(i = 1; i < nbIntervalles; ++i)
  83.     {
  84.         x = a + i*h;
  85.         if(i % 2 == 0)
  86.         {
  87.             res1 = res1 + f(x);
  88.         }
  89.         else
  90.         {
  91.             res2 = res2 + f(x);
  92.         }
  93.     }
  94.     return (f(a) + f(b) + 2*res1 + 4*res2) * h/3;
  95. }
  96.  
  97. void exoSimpson()
  98. {
  99.     double resultat;
  100.  
  101.     printf("\nSIMPSON : \n");
  102.  
  103.     resultat = simpson(fonction1,10, 0, 6);
  104.     printf("resultat 1: %lf\n", resultat);
  105.  
  106.     resultat = simpson(fonction2,10, 0, 1);
  107.     printf("resultat 2: %lf\n", resultat);
  108.  
  109.     resultat = simpson(fonction3,10, 0, 5);
  110.     printf("resultat 3: %lf\n", resultat);
  111.  
  112.     resultat = simpson(fonction2,10, (PI)/2, (3*PI)/2);
  113.     printf("resultat 4: %lf\n", resultat);
  114.  
  115.     resultat = simpson(fonction4,10, 0, PI);
  116.     printf("resultat 5: %lf\n", resultat);
  117.  
  118.  
  119. }
  120.  
  121.  
  122. double quadraGauss(double f(double), double a, double b)
  123. {
  124.     double alpha, beta, c;
  125.  
  126.     alpha = (b-a) / 2;
  127.     beta = (a+b) / 2;
  128.  
  129.     c = sqrt(3./5);
  130.  
  131.     return ((5*f(-alpha*c + beta) + 8*f(beta) + 5*f(alpha*c + beta)) / 9) * alpha;
  132. }
  133.  
  134. void exoQuadraGauss()
  135. {
  136.     double resultat;
  137.  
  138.     printf("\nQUADRA GAUSS : \n");
  139.  
  140.     resultat = quadraGauss(fonction1, 0, 6);
  141.     printf("resultat 1: %lf\n", resultat);
  142.  
  143.     resultat = quadraGauss(fonction2, 0, 1);
  144.     printf("resultat 2: %lf\n", resultat);
  145.  
  146.     resultat = quadraGauss(fonction3, 0, 5);
  147.     printf("resultat 3: %lf\n", resultat);
  148.  
  149.     resultat = quadraGauss(fonction2, (PI)/2, (3*PI)/2);
  150.     printf("resultat 4: %lf\n", resultat);
  151.  
  152.     resultat = quadraGauss(fonction4, 0, PI);
  153.     printf("resultat 5: %lf\n", resultat);
  154. }
  155.  
  156.  
  157. double monteCarlo(double f(double), int n, double a, double b)
  158. {
  159.     int i;
  160.     double res, u, x;
  161.  
  162.     srand(time(NULL));
  163.  
  164.     res = 0;
  165.     for(i = 0; i < n; ++i)
  166.     {
  167.         u = rand();
  168.         u /= RAND_MAX;
  169.  
  170.         x = a + u*(b-a);
  171.         res += f(x);
  172.     }
  173.  
  174.     res = res * (b-a) / n;
  175.  
  176.     return res;
  177. }
  178.  
  179. void exoMonteCarlo()
  180. {
  181.     double resultat;
  182.  
  183.     printf("\nMONTE CARLO : \n");
  184.  
  185.     resultat = monteCarlo(fonction1,1e6, 0, 6);
  186.     printf("resultat 1: %lf\n", resultat);
  187.  
  188.     resultat = monteCarlo(fonction2,1e6, 0, 1);
  189.     printf("resultat 2: %lf\n", resultat);
  190.  
  191.     resultat = monteCarlo(fonction3,1e6, 0, 5);
  192.     printf("resultat 3: %lf\n", resultat);
  193.  
  194.     resultat = monteCarlo(fonction2,1e6, (PI)/2, (3*PI)/2);
  195.     printf("resultat 4: %lf\n", resultat);
  196.  
  197.     resultat = monteCarlo(fonction4,1e6, 0, PI);
  198.     printf("resultat 5: %lf\n", resultat);
  199.  
  200. }
  201.  
  202.  
  203. int main()
  204. {
  205.     exoTrapezes();
  206.     printf("\n");
  207.     exoSimpson();
  208.     printf("\n");
  209.     exoQuadraGauss();
  210.     printf("\n");
  211.     exoMonteCarlo();
  212.     printf("\n");
  213.  
  214.     return 1;
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement