luizaspan icon

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

luizaspan | PRO | 11/18/15 06:58:02 PM UTC | 0 ⭐ | 792 👁️ | Never ⏰ | []
C |

920 B

|

None

|

0 👍

/

0 👎

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
#define FRANDOM ((double) random()/RAND_MAX)
 
#define a 0
#define b 2
 
#define N 1e4 // não poderia inicializar vetor
 
double f(double x) {
    return pow(sin(1/(x*(x-2))),2);
}
 
int main(void)
{
    double sum1=0., sum2=0., sum3=0.;
    int i;
 
    // valor da integral:
 
    for (i=0;i<N;i++)
    {
        double x=FRANDOM*(b-a);
        sum1+=f(x);
    }
 
    double I = (b-a)/N * sum1;
 
    printf("%lf\n",I);
 
    // <f>:
 
    for (i=0;i<N;i++)
    {
        double x=FRANDOM*(b-a);
        sum2+=f(x);
    }
 
    double fm = sum2/N;
 
    // <f^2>:
 
    for (i=0;i<N;i++)
    {
        double x=FRANDOM*(b-a);
        sum3+=f(x)*f(x);
    }
 
    double fm2 = sum3/N;
 
    double e = ((b-a)/sqrt(N))*sqrt(fm2-fm*fm);
 
    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))
 
    return 0;
}

Comments