Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2012, 18:36   #1
Evielle
Пользователь
 
Регистрация: 23.04.2012
Сообщений: 22
По умолчанию На суд/проверку метод Монте-Карло, С++

Доброго времени суток.

Читал давнишнее темы про этот метод - суть ясна. Но знаний маловато, к сожалению.
Нужна помощь в составлении алгоритма для нахождения интеграла:

y = a*sin(x + b) + c
Пределы интегрирования [-1000:1000] - float;
a, b, c - задаются с клавиатуры тоже - float;
Число рандомных точек [1;500] - int;

Буду рад даже обычным математическим разъяснениям!

Последний раз редактировалось Evielle; 20.05.2012 в 22:53.
Evielle вне форума Ответить с цитированием
Старый 20.05.2012, 22:29   #2
Evielle
Пользователь
 
Регистрация: 23.04.2012
Сообщений: 22
По умолчанию

Вот реализовал алгоритм для вычисления другого уравнения:
y=a*x^3+b*x+c;

Условия все те же самые.
Но тут корявый рандомайзер.

Правильный ли ход мысли?

Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>


using namespace std;
main()
{
      float x0,x1,a,b,c,x,y;
      int n, i;
      cout<<"x0 = "; cin>>x0; 
      cout<<"\n"<<"x1 = "; cin>>x1;
      cout<<"\n"<<"a = "; cin>>a;
      cout<<"\n"<<"b = "; cin>>b;
      cout<<"\n"<<"c = "; cin>>c;
      cout<<"\n"<<"n = "; cin>>n; 
      
      float xmin, ymin, xmax, ymax;
      
      xmin=x0;
      xmax=x1; 
           
      for(; x0<=xmax+0.1; x0+=0.1) //нахождения min, max по игрек //не забудь график
      {
            x=x0;
            y=a*x*x*x+b*x+c;
            if (y>ymax) ymax=y;
            if (y<ymin) ymin=y;
      }
      
      float randx, randy, urrand, S, Sf;
      int K,N;
      Sf=(xmax-xmin)*(ymax-ymin);
            
      for(; i<=n; i++) //проверка точек рандомных
      {
            randx=xmin+(rand()*(xmax-xmin))/RAND_MAX;
            randy=ymin+(rand()*(ymax-ymin))/RAND_MAX;
            urrand=a*randx*randx*randx+b*randx+c;
            if ((urrand<=0 && randy<=0 && randy>=urrand) || (urrand>=0 && randy>=0 && randy<=urrand)) K++;
            else N++;                     
      }
      S=Sf*(K/N);
      cout<<"Интеграл = "<<S;      
getch();      
}

Последний раз редактировалось Evielle; 20.05.2012 в 22:35.
Evielle вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Монте-Карло анна2709 Паскаль, Turbo Pascal, PascalABC.NET 3 14.11.2011 22:42
Задача Коммивояжера. Метод Монте-Карло и метод приращений. [Паскаль] U9110 Помощь студентам 4 06.04.2011 09:48
метод статического моделирования (метод Монте-Карло) 666Julia666 Помощь студентам 0 02.04.2011 16:31
Метод Монте-Карло Sasha124 Помощь студентам 6 11.01.2011 05:45
Метод Монте-Карло LiptonICE Помощь студентам 6 07.05.2010 20:37