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

Метод Монте-Карло - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.94
Stas12
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 102
22.04.2012, 21:55     Метод Монте-Карло #1
как мне перевести этот код на с++..... помогите пожалуста((
Pascal
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
 program MonteKarlo;
 uses crt;
 Label l1,l2;
 var
 j1,j,a,b,c,n1,k,n:integer;
 I,Y,x:real;
 Begin
 randomize;
 clrscr;
 writeln('Vvod znachenii');
 write('a = ');
 Read(a);
 write('b = ');
 Read(b);
 write('n = ');
 Read(n);
 writeln('--------------------------------');
 writeln('| k | integral | vsego ispitani|');
 for j:=1 to 9 do
 begin
 I:=0;
 for j1:=1 to n do
 begin
 x:=a+(b-a)*random;
 I:=I+x*x+5*x;
 end;
 I:=I*(b-a)/n;
 writeln('--------------------------------');
 writeln('| ',j,' | ',i:2:6,' | ',n,' |');
 {writeln(' Integral = ',i:6:7,' vsego ispitani = ',n,' popalo pod function = ',n1);}
 end;
 writeln('--------------------------------');
 readkey;
 end.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 21:55     Метод Монте-Карло
Посмотрите здесь:

метод Монте-Карло C++
C++ метод Монте-Карло
C++ Метод Монте-Карло(непонятная неработоспособность программы)
C++ Метод монте Карло
C++ вроде метод монте карло
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
22.04.2012, 22:36     Метод Монте-Карло #2
код кривой и не рабочий

Если "дословно" перевести
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
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <ctime>
 
int main()
{
    system("cls");
    srand( time(NULL) );
    int j1 , j, a, b, n, n1=0, k;
    double I, Y, x;
    //std::cout<< "Translit eto ne ok";
    std::cout<< "Input values: \na = ";
    std::cin>> a;
    std::cout<< "b = ";
    std::cin>> b;
    std::cout<< "n = ";
    std::cin>> n;
    std::cout<< "------------------------\n";
    std::cout<< "| k | integral | tests |\n";
    for (j = 1; j <= 9; j++)
    {
        I = 0;
        for (j1 = 1; j1 <= n; j1++)
        {
            x = a + (b - a) * rand()%100/100;
            I += x*x + 5*x;
        }
        I *= (b - a) / n;
        std::cout<< "------------------------\n";
        std::cout<< "| "<< j<< " | "<< std::setw(2)<< std::setprecision(6)<< i<< " | "<< n<< " |\n";
        std::cout<< " Integral = "<< std::setw(6)<< std::setprecision(7)<< i<< "  tests = "<< n<< "  function satisfies = "<< n1;
    }
    std::cout<< "------------------------\n";
    getch();
    return 0;
}
Stas12
0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 102
22.04.2012, 23:07  [ТС]     Метод Монте-Карло #3
нашел программу метода монте карло не пойму что означает Zmax

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
 
 
double f( double x, double y ) {
    return ((x*x+1)/(x*x*x*x-x*x+1));
}
 
int main() {
 
    srand( time ( NULL ) );//чтобы генерированые числа в рандоме не повторялись
   
 
    double Zmax = 0., t, x = 0., y, z;//объявление переменных
    double SumINTEGR = 0., INTEGR = 0., averINTEGR;
    int i, j, HIT;
 
    for ( i = 0; i < 100; ++i ) {
 
        y = 0.;
 
        for ( j = 0; j < 100; ++j ) {
            if( Zmax < ( t = f( x, y ) ) )
                Zmax = t;
            y += 0.01;
        }
        x +=0.01;
    }
 
 
    for( i = 0; i < 10; ++i ) {
 
        // Число попаданий точек в искомый объем под поверхностью функции
        HIT = 0;
 
        //Значение интеграла
        INTEGR = 0.;
 
        for( j = 0; j < 183065; ++j ) {
 
           x = (double) ( rand() ) / RAND_MAX;//заполняем x  в интервале 0 1
           y = (double) ( rand() ) / RAND_MAX;
           z = (double) ( rand() ) * 10.0 / RAND_MAX;
 
            if( z <= f( x, y ) )//проверка
                ++HIT;
 
        }
 
        INTEGR = (double) HIT / 183065. * 10.;
        SumINTEGR += INTEGR;//значение интеграла
    }
 
    // Среднее значение интеграла в 10 случаях
    averINTEGR = SumINTEGR / 10.;
 
    printf( "Значение интеграла   = %lf\n", averINTEGR );
    printf( "Z максимальное       = %lf\n", Zmax );
 getch ();
    return 0;
}
Добавлено через 35 секунд
что это за переменная?? и зачем она вообще нужна?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
22.04.2012, 23:52     Метод Монте-Карло #4
Задание вам дали не для того, чтобы вы скопипастили более-менее рабочий код, а чтобы научились программировать. Будут ошибки в вашей программе - обращайтесь.

И используйте наконец теги форматирования кода, проявите уважение к участникам форума.
Yandex
Объявления
22.04.2012, 23:52     Метод Монте-Карло
Ответ Создать тему
Опции темы

Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru