Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #define EXPERIMENTS 100
- #define TEST 1000
- /*
- * Вычисление интеграла методом монте-карло
- * Вариант №7. f(x) = abs(cos(6*x+4)/x) from 6 to 11
- */
- float M = 0.162923; // максимальное значение функции на отрезке, при x = 6.13559
- float function(float x){return fabsf(cos(6*x+4)/x);}
- void stage(float a, float b, float p, float(*f)(float) ){
- int i, j;
- float x, y;
- float mn[EXPERIMENTS];
- int k[EXPERIMENTS];
- float integral=0;
- for(i=1; i<=EXPERIMENTS; i++){ // серии экспериментов
- k[i]=0;
- mn[i]=0;
- for (j = 1; j<TEST; j++){ // испытания
- float r1 = (rand()%100) / 100.0;
- float r2 = (rand()%100) / 100.0;
- x = a + (b-a)*r1;
- y = M*r2;
- if(y <= f(x))
- k[i]++;
- }
- }
- for(i=1; i<=EXPERIMENTS; i++){
- mn[i]= k[i]/(float)TEST;
- integral+=mn[i];
- }
- // среднее значчение за все эксперименты -- искомый интеграл
- integral*=(b-a)*M/EXPERIMENTS;
- printf("Calculated int. %f\nReal int. %f\n", integral, p);
- }
- int main(){
- srand(time(NULL)); //let's be random
- stage(6, 11, 0.394894, (*function));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment