Advertisement
luizaspan

Método do Valor Médio (usando números aleatórios)

Nov 18th, 2015
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5.  
  6. #define FRANDOM ((double) random()/RAND_MAX)
  7.  
  8. #define a 0
  9. #define b 2
  10.  
  11. #define N 1e4 // não poderia inicializar vetor
  12.  
  13. double f(double x) {
  14.     return pow(sin(1/(x*(x-2))),2);
  15. }
  16.  
  17. int main(void)
  18. {
  19.     double sum1=0., sum2=0., sum3=0.;
  20.     int i;
  21.  
  22.     // valor da integral:
  23.  
  24.     for (i=0;i<N;i++)
  25.     {
  26.         double x=FRANDOM*(b-a);
  27.         sum1+=f(x);
  28.     }
  29.  
  30.     double I = (b-a)/N * sum1;
  31.  
  32.     printf("%lf\n",I);
  33.  
  34.     // <f>:
  35.  
  36.     for (i=0;i<N;i++)
  37.     {
  38.         double x=FRANDOM*(b-a);
  39.         sum2+=f(x);
  40.     }
  41.  
  42.     double fm = sum2/N;
  43.  
  44.     // <f^2>:
  45.  
  46.     for (i=0;i<N;i++)
  47.     {
  48.         double x=FRANDOM*(b-a);
  49.         sum3+=f(x)*f(x);
  50.     }
  51.  
  52.     double fm2 = sum3/N;
  53.  
  54.     double e = ((b-a)/sqrt(N))*sqrt(fm2-fm*fm);
  55.  
  56.     printf("Valor da integral: %lf\nErro: %lf\n",I,e); // ex.: diminuindo o valor de N em 2 ordens de magnitude, o erro aumenta 1 ordem de magnitude (pois vai com sqrt(N))
  57.  
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement