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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.90
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
#1

Математическое ожидание, дисперсия - C++

15.06.2011, 12:19. Просмотров 5059. Ответов 27
Метки нет (Все метки)

Добрый день, помогите пожалуйста решить такую задачу:

На отрезке АВ длины а выбраны наудачу два отрезка одинаковой длины с . Найти математическое ожидание и дисперсию длины, перекрытой обоими этими отрезками (т.е.их общей части)
Промоделировать задачу на компьютере,взяв а=20см, с=10см, и повторив эксперимент 1000раз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2011, 12:19     Математическое ожидание, дисперсия
Посмотрите здесь:

Использование подпрограммы-процедуры. Математическое ожидание и дисперсия - C++
Нужно найти математическое ожидание и дисперсию случайных величин, записанных в массивах Х(10), У(15). Помогите, надо сдать, а я догнать не...

Определить математическое ожидание дискретной случайной величины - C++
помогите решить задачи на C или C++: 1Дан двумерный массив элементов иллюстрирующий закон распределения дискретной случайно велечины ....

Найти математическое ожидание, дисперсию, и среднее квадратичное - C++
извините, я новичок на форуме и не знаю куда податься дана задача: задается таблица: x| x1 | x2 | x3 | xn |x++... | p| p1...

Требуется определить математическое ожидание в каждом массиве - C++
Доброго времени суток ребята! Мне нужна ваша помошь. Нужно решить вот такую вот задачу: "имеется несколько массивов данных (разного...

Вычислить математическое ожидание, дисперсию и среднеквадратичное отклонение случайной величины - C++
Пусть массив X(N) - массив возможных значений некоторых случайных величин. Составить подпрограмму, которая вычисляет математическое...

Дисперсия, массив - C++
Найти дисперсию элементов массива из символов.

Выборочное среднее и выборочная дисперсия - C++
Здравствуйте. Есть показательное распределение (левое). Промоделировано 1000 значений методом обратной функции. Теперь нужно вывести на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.06.2011, 23:38     Математическое ожидание, дисперсия #21
grizlik78, раз уж готовое решение выложили, то предложу упрощение: искомую случайную величину можно свести к расстоянию между двумя случайными точками из единичного отрезка. Эту эквивалентную задачу проще и программировать, и аналитически решать. А при выводе результатов уже вернуться к исходной.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
15.06.2011, 23:44     Математическое ожидание, дисперсия #22
volovzi, кажется, у этого расстояния распределение плотности имеет вид треугольника, не помню, есть ли у него особое название. Что-то сомнительно, что его можно проще смоделировать. Если можно — показывай как
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
16.06.2011, 00:15     Математическое ожидание, дисперсия #23
Что именно показать? Программу?
Ну, я делал так:
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
#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
 
double drandom ()
{
    return static_cast<double>(random()) / RAND_MAX;
}
 
double random_distance ()
{
    return fabs(drandom() - drandom());
}
 
int main ()
{
    std::vector<double> values(1000);
    
    srandom(time(NULL));
    
    for (int i = 0; i < values.size(); ++i)
    {
        values[i] = random_distance();
    }
    
    std::cout << std::accumulate(values.begin(), values.end(), .0) / values.size() << std::endl;
    
    return 0;
}
Здесь у меня рассчитывается среднее расстояния между двумя случайными точками на единичном отрезке.
Чтобы перейти к исходной задаче, нужно представить эти точки как начала единичных отрезков в более широком отрезке — [0; 2], и тогда расстояние между ними будет долей, по которой отрезки не пересекаются. Соответственно, если эта доля — x, то 1 – x — доля пересечения.
А дальше нужно только умножить эту долю на настоящую длину отрезка, то есть на десять, в данном случае.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
16.06.2011, 00:26     Математическое ожидание, дисперсия #24
А я как-то не вижу отличий (с учётом всё-равно необходимого умножения и проверки условий, на случай если a > 2*c). Формулу выводить да, наверное попроще. А модель у меня получилась прямо по заданию, а переход к нормализованной СВ несколько усложнит сопоставление.
Формулу выводить — наверное да, проще.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
16.06.2011, 00:44     Математическое ожидание, дисперсия #25
grizlik78, да, умножение делать придётся всё равно. Но не дважды в каждом испытании (всего две тысячи), а один раз на всю программу .
И потом, нормализация упростит и аналитическое решение, и моделирование, и сопоставление.
А уже конечный результат можно привести к начальному условию.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
16.06.2011, 00:50     Математическое ожидание, дисперсия #26
Цитата Сообщение от volovzi Посмотреть сообщение
Но не дважды в каждом испытании (всего две тысячи), а один раз на всю программу .
Ну тебя же не смущает 2000 делений на RAND_MAX
А величину (a-c)/RAND_MAX можно было вычислить 1 раз, и вместо делений умножать на эту величину. В общем это вопрос восприятия, мне кажется проще так, тебе так, а кому-то может совсем по другому. А ускорять одноразовые вычисления смысла мало.
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
16.06.2011, 01:12     Математическое ожидание, дисперсия #27
Если уж на то пошло, то можно вместо "drandom" использовать системную "drand48", и вообще избавиться от дополнительных операций.
И это не ускорение, это антизамедление .
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2011, 02:47     Математическое ожидание, дисперсия
Еще ссылки по теме:

Дисперсия выборки из пяти заданных чисел - C++
задание: Запишите алгоритм программы, определяющей дисперсию выборки из пяти заданных чисел. Составьте программу на языке С++,...

математическое решение в С - C++
Решите пожалуйста в С

математическое решение в С - C++
Решите пожалуйста в С : Составить программу для вычисления значений функции F(x) на отрезке с шагом h. Результат представить в виде...

Записать математическое выражение на с++ - C++

Записать математическое выражение - C++
Помогите запрограммировать формулу: y=\frac{e^{2x}-cos^{\frac{1}{3}}(z-b)+\sqrt{b \cdot tg\, z}}{\left|3a-x^4 \right|}


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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
16.06.2011, 02:47     Математическое ожидание, дисперсия #28
А я не поленился и вынес в своём варианте умножение из функции.
на 100 миллионах (компиляция с ключом -O2) время оказалось сравнимым. 3,70 c до, 3,75 c после.
Убрал условия и параметры (что сделало модель менее универсальной), получил 3,66 c.
Не слишком заметный выигрыш, чтобы ради него делать менее (для меня) понятной и менее универсальной. Тем более, что это всё в пределах погрешности.

Переход к drand48() дал время 4,50 с. Может генератор и получился более качественным (не сравнивал, хоть и сомнительно), но явно не более быстрым. Я бы предпочёл тогда уж Вихрь Мерсенна или ещё какой более интересный генератор.

Лишь замена обмена значений модулем дала заметный (и несколько неожиданный для меня) эффект: 2.80 c. Но и в первоначальной версии эффект тот же (даже чуть лучше). В который раз убеждаюсь, что пути компилятора неисповедимы

Возможно в C++ дело бы обстояло и по-другому, но пока проверять лень

P.S. Переделывая сначала получал неверный результат, так как неправильно делал пересчёт МО и дисперсии. В исходном варианте места для этих ошибок не нашлось. Так что для меня в нормализации (в этой конкретной задаче) одни минусы.

Добавлено через 6 минут
Ах, да. Замечу ещё, что на самом деле различия могли оказаться ещё меньше, если бы я честно выделял память под все 100000000 значений, что необходимо для оценки дисперсии. У меня был массив на 10 тыс. элементов, что, разумеется, дало дисперсию лишь по этим 10 тысячам.
Yandex
Объявления
16.06.2011, 02:47     Математическое ожидание, дисперсия
Ответ Создать тему
Опции темы

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