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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.90
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 12:19     Математическое ожидание, дисперсия #1
Добрый день, помогите пожалуйста решить такую задачу:

На отрезке АВ длины а выбраны наудачу два отрезка одинаковой длины с . Найти математическое ожидание и дисперсию длины, перекрытой обоими этими отрезками (т.е.их общей части)
Промоделировать задачу на компьютере,взяв а=20см, с=10см, и повторив эксперимент 1000раз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 14:01  [ТС]     Математическое ожидание, дисперсия #2
незнаю с чего начать, как организовать цикл итд. можно сказать -все непонятно
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 14:29  [ТС]     Математическое ожидание, дисперсия #3
с определение вероятности проблем нет,но вот когда дело доходит до МО и Дисперсии,то все путается
у меня была задача:В одной урне 3 белых, 3 чёрных и 4 красных шаров, во второй – 6 белых, 2 чёрных и 2 красных шаров. Из каждой урны извлекаются по 3 шара (всего 6 шаров). Какова вероятность, что среди них не будет красных шаров? Повторить эксперимент 1000 раз.эту я решила:
Текс программы:
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const N=1000;
int main()
{
    int a;
    int b;
    int p=0;
    double c=0;
    int arr1[3];
    int arr2[3];
    srand((unsigned)time(NULL));
    int iteration;
    for(iteration=0;iteration<10;iteration++){
    int x;
    for (x=0;x<N;x++)
    {
/ /  1-beliy   2 – cherniy  3- krasniy
        int urna1[10]={'1','1','1','2','2','2','3','3','3','3'};
        a=0+rand()%10;
        arr1[1]=(urna1[a]-48);
        for(p=a;p<10;p++)
        {
            urna1[p]=urna1[p+1];
            urna1[10]=48;
        }
        p=0;  
        a=0+rand()%9;
        arr1[2]=(urna1[a]-48);
        for(p=a;p<9;p++)
        {
            urna1[p]=urna1[p+1];
            urna1[9]=48;
        }
        p=0;
        a=0+rand()%8;
        arr1[3]=(urna1[a]-48);
        int urna2[10]={'1','1','1','1','1','1','2','2','3','3'};
        b=0+rand()%10;
        arr2[1]=(urna2[b]-48);
        for(p=b;p<10;p++)
        {
            urna2[p]=urna2[p+1];
            urna2[10]=48;
        }
        p=0;
        b=0+rand()%9;
        arr2[2]=(urna2[b]-48);
        for(p=b;p<9;p++)
        {
            urna2[p]=urna2[p+1];
            urna2[9]=48;
        }
        p=0;
        b=0+rand()%8;
        arr2[3]=(urna2[b]-48);
   if((arr1[1]==3)||(arr1[2]==3)||(arr1[3]==3)||(arr2[1]==3)||(arr2[2]==3)||(arr2[3]==3))
           c++;
    }
    c=(N-c)/N;
    printf("iter[%d]veroyatnost = %0.3lf\n",iteration,c);}
    return (0);
}
а как быть с той задачей?? может эту программу переделать как то,но как?
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
15.06.2011, 14:53     Математическое ожидание, дисперсия #4
Прежде, чем писать программу, нужно понять, что тебе нужно посчитать, то есть разобраться с матожиданием и дисперсией.
Ruu
13 / 13 / 1
Регистрация: 20.07.2010
Сообщений: 43
15.06.2011, 16:49     Математическое ожидание, дисперсия #5
Условие задачи, точно такое?
Потому что мат.ожидание от длины брать это как то неправильно.
Мат. ожидание обычно находится от точек на отрезке, а таковых в условии задачи я не вижу.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
15.06.2011, 16:56     Математическое ожидание, дисперсия #6
Ruu, а что не так? Длина перекрывающейся части отрезков — случайная величина, хоть и непрерывная. А значит можно найти и мат. ожидание, и дисперсию.
Ruu
13 / 13 / 1
Регистрация: 20.07.2010
Сообщений: 43
15.06.2011, 17:40     Математическое ожидание, дисперсия #7
grizlik78, В том то и дело,что это непрерывная величина с равномерным распределением.
Как в таком случае ты найдешь мат ожидание?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
15.06.2011, 18:08     Математическое ожидание, дисперсия #8
Известно как. Пользуясь теорией вероятностей.
Если бы у неё распределение было равномерным, то наоборот, всё было бы очень просто
На самом деле распределение у неё немного сложнее, но если аккуратно взяться за дело, то и его можно найти.
Ну а для моделирования и этого не надо. Теоретическое значение нужно только для проверки.

Добавлено через 1 минуту
Тем временем, программа готова. Осталось только формулу найти и проверить
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
#include <stdio.h>
#include <stdlib.h>
 
#define N 1000
#define A 20.0
#define C 10.0
 
float get_random_len(float a, float c)
{
    float x1, x2;
    if (a < c)
        return 0;
    x1 = rand()*(a-c)/(RAND_MAX+1.0);
    x2 = rand()*(a-c)/(RAND_MAX+1.0);
    if (x2 < x1)
        { float tmp = x1; x1 = x2; x2 = tmp; };
    if (x1 + c < x2)
        return 0;
    return x1 + c - x2;
}
 
int main()
{
    int i;
    float len[N];
    float m = 0, disp = 0;
    srand(time(NULL));
 
    for (i = 0; i < N; ++i)
    {
        len[i] = get_random_len(A, C);
        m += len[i];
    }
    m /= N;
 
    for (i = 0; i < N; ++i)
    {
        float cval = len[i] - m;
        disp += cval*cval;
    }
    disp /= N;
 
    printf("mean: %f\ndisp: %f\n", m, disp);
 
    return 0;
}
Ruu
13 / 13 / 1
Регистрация: 20.07.2010
Сообщений: 43
15.06.2011, 18:28     Математическое ожидание, дисперсия #9
Я не понял условие задачи значит) теперь все ясно)
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 21:57  [ТС]     Математическое ожидание, дисперсия #10
пишет ошибку : "time" was not declared in this scope,, а мы разве определяли ее?
можно пожалуйста комментарии к программе, а то некоторые моменты непонятны
спасибо, попробую найти формулы
shilovec5377
 Аватар для shilovec5377
28 / 53 / 1
Регистрация: 26.05.2011
Сообщений: 752
15.06.2011, 22:07     Математическое ожидание, дисперсия #11
Могу сбросить прогу на Delphi!!!
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 22:34  [ТС]     Математическое ожидание, дисперсия #12
спасибо конечно,но язык Delphi сложноват , можно тогда с комментариями?
shilovec5377
 Аватар для shilovec5377
28 / 53 / 1
Регистрация: 26.05.2011
Сообщений: 752
15.06.2011, 22:47     Математическое ожидание, дисперсия #13
Delphi
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
66
Там более менее подписано, что находим:
procedure TForm2.Button2Click(Sender: TObject);
 Var
Y,k,Me,R,Z,Xmax,Xmin,i:integer;
q3,q1,asimetria,mediana,med,q2,q,maxM, sigma,xx2,vd,Ex,moi,cv,n,Xi,ser:real;
 
 
begin
Xi:=0;
n:=0;
 Z:=( StrToInt (edit1.text));
Xmax:=strtoint(StringGrid1.Cells[z,0]);
Xmin:=strtoint(StringGrid1.Cells[1,0]);
 for i := 1 to  z   do
 Begin
 moi:=moi+(StrTofloat(StringGrid1.Cells[i,0])*StrTofloat(StringGrid1.Cells[i,1]));
     n:=n+StrTofloat(StringGrid1.Cells[i,1]);
 Xi:=Xi+StrToFloat(StringGrid1.Cells[i,0]);
     cv:=(1/n)*(moi);
   R:=Xmax-Xmin;
 End;
{----------------moda----------------------------------}
 Z:=( StrToInt (edit1.text));
 maxM:=strtofloat(StringGrid1.Cells[1,1]);
for i:=1 to   z  do
if (strtofloat(StringGrid1.Cells[i,1]))>maxM then
begin
  maxM:=strtofloat(StringGrid1.Cells[i,1]);
   k:=i;
end;
  Me:=strtoint(StringGrid1.Cells[k,0]);
{----------------------vd----------------------------}
  for i := 1 to z do
    begin
xx2:=xx2+(sqr(StrTofloat(StringGrid1.Cells[i,0])))*(StrTofloat(StringGrid1.Cells[i,1]));
    end;
vd:=  (xx2/n)-sqr(cv);
 sigma:=sqrt(vd);
{--------------------эксцесс------------------------}
for i := 1 to z do
    begin
q2:=q2+sqr(strtofloat((StringGrid1.Cells[i,0]))-(cv))*sqr(strtofloat((StringGrid1.Cells[i,0]))-(cv));
    end;
q:=n*(sqr(sigma)*sqr(sigma));
  Ex:=(q2/q )-3;
 
{-------------------асиметрия----------------------}
 for i := 1 to z do
    begin
q2:=q2+sqr(strtofloat((StringGrid1.Cells[i,0]))-(cv))*(strtofloat((StringGrid1.Cells[i,0]))-(cv));
    end;
q:=n*(sqr(sigma)* (sigma));
  asimetria:=(q2/q);
{--------------------mediana-----------------------}
 
     begin
if z mod 2=0 then  ser:=(strtofloat(StringGrid1.Cells[z div 2,0])+strtofloat(StringGrid1.Cells[(z div 2+1),0]))/2
             else  ser:= strtofloat(StringGrid1.Cells[(z div 2+1),0])/2;
 
     end;
Memo1.Lines.Text:='Размах вариации = '+RealToStr(R,2)+#13+'Среднее Выборочное = '+RealToStr(cv,2)+#13+
'Мода = '+RealToStr(Me,2)+#13+'Выборочная дисперсия = '+RealToStr(vd,2)
+#13+'Среднее квадратическое отклонение = '+RealToStr(sigma,2)+#13+'Эксцесс = '+RealToStr(Ex,2)+#13+
'Медиана = '+RealToStr(ser,2)+#13+'Асиметрия = '+RealToStr(asimetria,2);
 
end;
Добавлено через 1 минуту
Вот exe-шник
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 22:48  [ТС]     Математическое ожидание, дисперсия #14
а какую задачу(условие какое) она решает?
shilovec5377
 Аватар для shilovec5377
28 / 53 / 1
Регистрация: 26.05.2011
Сообщений: 752
15.06.2011, 22:50     Математическое ожидание, дисперсия #15
Вот какие характеристики она находит:
Delphi
1
2
3
4
Memo1.Lines.Text:='Размах вариации = '+RealToStr(R,2)+#13+'Среднее Выборочное = '+RealToStr(cv,2)+#13+
'Мода = '+RealToStr(Me,2)+#13+'Выборочная дисперсия = '+RealToStr(vd,2)
+#13+'Среднее квадратическое отклонение = '+RealToStr(sigma,2)+#13+'Эксцесс = '+RealToStr(Ex,2)+#13+
'Медиана = '+RealToStr(ser,2)+#13+'Асиметрия = '+RealToStr(asimetria,2);
Добавлено через 20 секунд
они выделены красным
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 22:58  [ТС]     Математическое ожидание, дисперсия #16
ой,мне это не осилить, лучше на С++,можете пожалуйста посмотреть на программу выше, что там не так?
shilovec5377
 Аватар для shilovec5377
28 / 53 / 1
Регистрация: 26.05.2011
Сообщений: 752
15.06.2011, 23:04     Математическое ожидание, дисперсия #17
а, ЧТО ТАМ НЕ ТАК ВРОДЕ БЫ РАБОТАЕТ!!
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
15.06.2011, 23:08     Математическое ожидание, дисперсия #18
Добавьте
C
1
#include <time.h>
Ailuna
2 / 2 / 0
Регистрация: 16.11.2010
Сообщений: 29
15.06.2011, 23:17  [ТС]     Математическое ожидание, дисперсия #19
добавила - работает!) но мне задано промоделировать 1000 раз, а программа выводит только одно значения МО и Дисперсии, или я опять что то не поняла?типа табуляция должна быть?в какой среде вы писали,у меня NetBeans.может он глючит?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2011, 23:31     Математическое ожидание, дисперсия
Еще ссылки по теме:

Определить математическое ожидание дискретной случайной величины C++
C++ Использование подпрограммы-процедуры. Математическое ожидание и дисперсия
C++ Выборочное среднее и выборочная дисперсия

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
15.06.2011, 23:31     Математическое ожидание, дисперсия #20
Оценить мат. ожидание или дисперсию по одному эксперименту невозможно. Эксперимент — это случайный выбор двух отрезков и определение длины их общей части.
В данном случае для этого проводится N экспериментов. Число N согласно заданию определено как 1000. Чем больше экспериментов, тем точнее оценка.
Как вы собирались анализировать 1000 результатов? А если бы задали миллион?

Добавлено через 8 минут
На самом деле тут нечего особо комментировать. Теорию бы немножко подучить
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 <stdio.h>
#include <stdlib.h>
#include <time.h>
 
/* Количество экспериментов */
#define N 1000
/* Интервал размещения отрезков */
#define A 20.0
/* Длина отрезков */
#define C 10.0
 
/* Функция возвращает случайную величину, равную
 * длине общей части двух отрезков длиной c
 * из интервала длиной a
 */
float get_random_len(float a, float c)
{
    float x1, x2;
    if (a < c)
        return 0;
    /* Выбираем случайно начала двух отрезков x1 и x2.
     * Чтобы отрезуи попадали в диапазон [0; a] их начало
     * должно попадать в диапазон [0; a-c]
     */
    x1 = rand()*(a-c)/(RAND_MAX+1.0);
    x2 = rand()*(a-c)/(RAND_MAX+1.0);
    /* Возможно 4 варианта размещения отрезков.
     * Сокращаем до двух, сделав x1 <= x2
     */
    if (x2 < x1)
        { float tmp = x1; x1 = x2; x2 = tmp; };
    if (x1 + c < x2) /* Отрезки не пересекаются */
        return 0;
    return x1 + c - x2; /* Отрезки пересекаются */
}
 
int main()
{
    int i;
    float len[N];
    float m = 0, disp = 0;
    srand(time(NULL)); /* Инициализация ГПСЧ */
 
    for (i = 0; i < N; ++i)
    {
        /* Получаем очередное значение длины */
        len[i] = get_random_len(A, C);
        /* Суммируем длины для нахождения среднего */
        m += len[i];
    }
    m /= N; /* Выборочное среднее (оценка МО) */
 
    for (i = 0; i < N; ++i)
    {
        /* Центрируем для нахождения дисперсии */
        float cval = len[i] - m;
        /* Суммируем квадраты */
        disp += cval*cval;
    }
    disp /= N; /* Оценка дисперсии */
 
    printf("mean: %f\ndisp: %f\n", m, disp);
 
    return 0;
}
Yandex
Объявления
15.06.2011, 23:31     Математическое ожидание, дисперсия
Ответ Создать тему
Опции темы

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