Форум программистов, компьютерный форум CyberForum.ru

Рассчет определенного интеграла методом Монте-Карло. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дана квадратная матрица. Заменить нулями все ее элементы, расположенные на главной диагонали и выше ее http://www.cyberforum.ru/cpp-beginners/thread772215.html
Дана квадратная матрица порядка N. Заменить нулями все ее элементы, расположенные на главной диагонали и выше ее. Вывести матрицу в исходном и преобразованном виде. Значение N задать при помощи ввода, а саму матрицу сформировать из случайных чисел в диапазоне от 0 до 100.
C++ a=*b Что это значит? Подскажите пожалуйста! http://www.cyberforum.ru/cpp-beginners/thread772207.html
Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными C++
Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными
C++ Длинный факториал
Здравствуйте уважаемые форумчане!, Помогите реализовать программу длинного факториала, очень нужно.
C++ в чем разница между void f(int &n) и void f(int &&n) http://www.cyberforum.ru/cpp-beginners/thread772180.html
:help:
C++ Класс кубик. вывод результата Суть проблемы в том, что в первый раз метод вызывается дважды и выводится 2 раза. Не могу определить почему. Код: # include <iostream> using namespace std; class dice { int d; подробнее

Показать сообщение отдельно
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 309
Завершенные тесты: 1

Рассчет определенного интеграла методом Монте-Карло. - C++

26.01.2013, 08:39. Просмотров 6700. Ответов 7
Метки (Все метки)

Не могли бы вы посмотреть, я неправильно понимаю метод Монте Карло для нахождения определенного интеграла или неправильно его реализую?
Вот так я понимаю алгоритм:
Выбираем случайным образом N точек с абсциссами от a до b и ординатами от минимального значения функции до максимального на [a, b]. Проверяем для каждой точки, попадает ли она в область, ограниченную a, b, минимумом функции и максимумом функции. Считаем, сколько точек попало в область. Допустим, m. Тогда
(m/n)=(значение интеграла/s), где s, как я понимаю, - (b-a)*(макс. значение - мин. значение). Отсюда находим значение интеграла.
А вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#pragma hdrstop
#include <math.h>
#include <conio.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
 
#pragma argsused
double func(double x, int n)
{
return pow(x,n);                             //степенная функция
}
int main(int argc, char* argv[])
{
        int a,b,n,d,i, st;
        double c;
        printf("st: ");                       //степень подинтегральной функции
        scanf("%d",&st);
        printf("\na: ");                    //нижний предел
        scanf("%d",&a);
        printf("\nb: ");                    //верхний предел
        scanf("%d",&b);
        printf("\nn: ");                    //число точек
        scanf("%d",&n);
        if (func(a,st)>=func(b,st))
        c=func(a,st);                    //максимальное значение функции
        else
        c=func(b,st);
        double *x=new double[n];
        double *y=new double[n];
        srand(time(NULL));
        d=int(c);
        int count=0;
        for  (i=0; i<n; i++)
        {
        x[i]=a+rand()%(b-a);                //случайные точки
        y[i]=rand()%d;
        if (y[i]<func(x[i],st))                
        count++;
        }
        double integral=count*(b-a)*c/n;
        printf("\nIntegral=%f", integral);
        getch();
        return 0;
}
Буду очень признательна, если найдете ошибку!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru