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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IntelCoreDuo
11 / 11 / 0
Регистрация: 09.11.2013
Сообщений: 52
#1

Нормальное распределение - C++

06.01.2014, 14:08. Просмотров 1104. Ответов 5
Метки нет (Все метки)

Всем доброго времени суток! Суть программы заключается в том, что в файле есть какие-то статистические данные в виде матрицы (в моем случае это показатели рождаемости). Как я понимаю, они будут типа double. В принципе их можно вывести. Затем на основе этих данных генерируется матрица со случайными нормально распределенными величинами (если мне память не изменяет, то они генерируются методом гаусса). Далее эти матрицы перемножаются. Если кому интересно, то я пытаюсь написать демографическую модель Лесли. Общая формула представляется в виде Xt+1 = L*Xt, где Xt и Xt+1 - это векторы населения, а L - это матрица Лесли. То есть если их перемножить, мы получим прогнозирование данных на один год. Чтобы сделать прогноз на несколько лет, нужно полученную матрицу умножить на вновь сгенерированную и.т.д.
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2014, 14:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нормальное распределение (C++):

Нормальное значение косинуса - C++
float x = 1.57079637; cos(x) ~ -4.32051034e-8; Как нормально взять косинус? что бы было ~0

Как это перевести в нормальное выражение? - C++
x /= x & -x; Я так понял то что "/=" это значит поделить. "-x" это минус, но только от чего???

Где найти нормальное описание языка IDL? - C++
Pnite chainika po teme. Gde mozhno po normalnomu (na russkom, angliiskom, nemezkom ili ... ukrainskom) pochitat opisanie jazika IDL...

GetFrameTime() выдает нормальное время кадра только со второго прохода по циклу - C++
while(1) { frameTime = GetFrameTime(); // есть функция возвращает время 1 кадра. func1(frametime); // в эту функцию отправляется...

Распределение по Гауссу - C++
Нужно сделать генератор случайных чисел с распределением по Гауусу. Помогите, пожалуйста. Есть код равномерного распределения #include...

распределение памяти - C++
размещение памяти. LPVOID trm = VirtualAlloc(NULL, lasth+1*(sizeof (float)), MEM_COMMIT, PAGE_READWRITE); мне нужен указатель...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
06.01.2014, 14:35 #2
Код в студию.
IntelCoreDuo
11 / 11 / 0
Регистрация: 09.11.2013
Сообщений: 52
06.01.2014, 14:56  [ТС] #3
Цитата Сообщение от outoftime Посмотреть сообщение
Код в студию.
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 "stdafx.h"
#include <conio.h> 
#include <iostream>
#include <iomanip>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <random>
#include <string>
using namespace std;
 
int main()
{
  const int nrolls=10000;  // number of experiments
  const int nstars=1000;    // maximum number of stars to distribute
 
  std::default_random_engine generator;
  std::normal_distribution<double> distribution(5.0,2.0);
 
  int p[90]={};
 
  for (int i=0; i<nrolls; ++i) {
    double number = distribution(generator);
    if ((number>=0.0)&&(number<90.0)) ++p[int(number)];
  }
 
  std::cout << "normal_distribution (5.0,2.0):" << std::endl;
 
  for (int i=0; i<90; i+=5) {
    std::cout << i << "-" << (i+4) << ": ";
    std::cout << std::string(p[i]*nstars/nrolls, '*') << std::endl;
  }
  getch();
  return 0;
  
}
Пока что пытаюсь сгенерировать нормально распределенную случайную величину. Вместо чисел идут звездочки (хотел в виде гистограммы составить). Но лучше сделать числа. Это пока все, что я успел и смог сделать. Слева - это возраст, а вместо звездочек должно быть количество человек.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
07.01.2014, 00:39 #4
Цитата Сообщение от IntelCoreDuo Посмотреть сообщение
for (int i=0; i<90; i+=5) {
* * std::cout << i << "-" << (i+4) << ": ";
Что ты хочешь этим сделать? Почему не выводить все значение от 0 до 90, зачем шаг 5?
IntelCoreDuo
11 / 11 / 0
Регистрация: 09.11.2013
Сообщений: 52
07.01.2014, 10:53  [ТС] #5
Цитата Сообщение от outoftime Посмотреть сообщение
Что ты хочешь этим сделать? Почему не выводить все значение от 0 до 90, зачем шаг 5?
Это я вывожу возраст населения с шагом в 5 лет.
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
07.01.2014, 11:16 #6
IntelCoreDuo, брал бы среднее значение что-ли.
Цитата Сообщение от IntelCoreDuo Посмотреть сообщение
const int nstars=1000; * *// maximum number of stars to distribute
А это лучше сделайте не больше 80 (количество символов в строке в консоли, точное значение не помню)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2014, 11:16
Привет! Вот еще темы с ответами:

Распределение памяти - C++
При загрузки таблицы загружаются и пересчитываются формулы в ячейках. Скажите пожалуйста почему при размерах от 100*100(строка*столбец) до,...

Экспоненциальное распределение. - C++
У меня в задаче дано что в среднем приходит 10 заявок в месяц.Я написал функцию для генерации интервалов между заявками но почему то если...

Распределение строк - C++
Здравствуйте! Не могу понять как решается задача(( Пару дней на неё уже убил. Подскажите пожалуйста,если конечно не затруднит. Условие...

Распределение идентификаторов - C++
На входе файл с идентификаторами, я перевела все с року(string) и вызываю коструктор BinTree(string);. Дальше надо все идентификаторы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.01.2014, 11:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru