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

Метод Монте-Карло(непонятная неработоспособность программы) - C++

Восстановить пароль Регистрация
 
Mefodiy
1 / 1 / 0
Регистрация: 21.04.2012
Сообщений: 46
02.12.2012, 19:00     Метод Монте-Карло(непонятная неработоспособность программы) #1
Написал программу, которая вычисляет интеграл методом Монте-Карло. Вроде как код проверял, перепроверял и должно быть всё верно. Но при указывании кол-ва точек >7000 программа не работает, то есть зависает. А если, к примеру, указать кол-во точек 10000, то выбивает с ошибкой "Divide error". С чем это связано не пойму.
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
class method{
    public:
        double allsumm(double *x,int n);
        void createrand(double *x,int n);
};
double method::allsumm(double *x,int n){
    double temp=0;
    for(int i=0;i<n;i++){
        temp+=sqrt(pow(x[i],4)-pow(x[i],3)+8);
    }
    return temp;
}
void method::createrand(double *x,int n){
    for(int i=0;i<n;i++){
        x[i]=0.0001*(rand()%30001);
    }
}
void main(){
clrscr();
double a=0,b=3.2,temp;
unsigned long int n;
double *x;
method MonteKarlo;
cout<<"Vvedite koli4estvo to4ek ";
cin>>n;
x=new double[n];
/*cout<<"Vvedite interval\n a: ";
cin>>a;
cout<<"b: ";
cin>>b;*/
MonteKarlo.createrand(x,n);
temp=MonteKarlo.allsumm(x,n);
cout<<"Summ= "<<temp;
cout<<"\nI= "<<((b-a)*temp)/n;
 
getch();
}
Добавлено через 25 минут
Так всё сложно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 19:00     Метод Монте-Карло(непонятная неработоспособность программы)
Посмотрите здесь:

метод Монте-Карло C++
C++ метод Монте-Карло
C++ Метод Монте-Карло
C++ Метод монте Карло
C++ вроде метод монте карло
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
02.12.2012, 19:27     Метод Монте-Карло(непонятная неработоспособность программы) #2
не понял вашей проблемы,у меняза доли секунды ваш код и 20 тысяч точек делает, другое дело алгоритм проверить не могу, не сталкивался с этим методом
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
02.12.2012, 19:32     Метод Монте-Карло(непонятная неработоспособность программы) #3
вот пример
Миниатюры
Метод Монте-Карло(непонятная неработоспособность программы)  
Mefodiy
1 / 1 / 0
Регистрация: 21.04.2012
Сообщений: 46
02.12.2012, 19:38  [ТС]     Метод Монте-Карло(непонятная неработоспособность программы) #4
Цитата Сообщение от Nixy Посмотреть сообщение
не понял вашей проблемы,у меняза доли секунды ваш код и 20 тысяч точек делает, другое дело алгоритм проверить не могу, не сталкивался с этим методом
У меня проблема с тем, что при вводе более 7000 точек, программа перестает работать. Алгоритм не нужно проверять, он верен. Говорите высчитывает? Можете указать результаты? И если можно, то укажите наибольшее кол-во точек.
ps я обновил код. проверьте по новому коду
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
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
class method{
    public:
        double allsumm(double *x,unsigned long int n);
        void createrand(double *x,unsigned long int n);
};
double method::allsumm(double *x,unsigned long int n){
    double temp=0;
    for(unsigned long int i=0;i<n;i++){
        temp+=sqrt(pow(x[i],4)-pow(x[i],3)+8);
    }
    return temp;
}
void method::createrand(double *x,unsigned long int n){
    for(unsigned long int i=0;i<n;i++){
        x[i]=0.0001*(rand()%30001);
    }
}
void main(){
clrscr();
randomize();
double a=0,b=3.2,temp;
unsigned long int n;
double *x;
method MonteKarlo;
cout<<"Vvedite koli4estvo to4ek ";
cin>>n;
x=new double[n];
/*cout<<"Vvedite interval\n a: ";
cin>>a;
cout<<"b: ";
cin>>b;*/
MonteKarlo.createrand(x,n);
temp=MonteKarlo.allsumm(x,n);
cout<<"Summ= "<<temp;
cout<<"\nI= "<<((b-a)*temp)/n;
getch();
}
Добавлено через 3 минуты
upd
это может быть связано с тем, что у меня win 7 и я включаю си через dosbox?
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
02.12.2012, 19:49     Метод Монте-Карло(непонятная неработоспособность программы) #5
попробуйте использовать другую среду разработки , возможно то что вы написали и я вляется причиной, задержки, гдето есть тема про бесплатные среды разработки, посмотрите что нибудь под w7, я вот пользуюсь builderom , многие сидят на VS С++
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
02.12.2012, 19:53     Метод Монте-Карло(непонятная неработоспособность программы) #6
пожалуйста с новым кодом
Миниатюры
Метод Монте-Карло(непонятная неработоспособность программы)  
Yandex
Объявления
02.12.2012, 19:53     Метод Монте-Карло(непонятная неработоспособность программы)
Ответ Создать тему
Опции темы

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