Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2021 15:55:33

amity
Зарегистрирован: 2021-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python

Нужно написать две функции, вычисляющие математическое ожидание и дисперсию полученной случайной величины соответственно. Первую функцию назвать calc_mean, вторую — calc_var. Они должны принимать два аргумента — целые числа n и m: n — количество повторений для усреднения (этот аргумент должен передаваться в get_normal_random(см. инфу о ней далее)). m — сколько раз вызывать предыдущую функцию, чтобы оценить математическое ожидание и дисперсию.

Вот что имеется ввиду под предыдущей функцией:
s = 0.0
for _ in range(n):
s += random.random()
return s / n

def get_normal_random(n):
return (avg_of_random_numbers(n) - 0.5) * math.sqrt(12 * n)**12

То есть для создания функции calc_mean нужно вызвать функцию get_normal_random() (где мы приводили случайную величину к нормальному распределению) m раз и усреднить полученные значения. Не совсем понимаю как это сделать.

Офлайн

#2 Сен. 13, 2021 23:07:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python

Вот я привёл это к начальному виду (с чего надо начинать)

  
import math
import random
 
def get_normal_random(n):
    return (avg_of_random_numbers(n) - 0.5) * math.sqrt(12 * n) ** 12
 
def avg_of_random_numbers(n):
    s = 0.0
    for _ in range(n):
        s += random.random()
    return s / n
 
def calc_mean(n, m):
    pass
 
def cal_var(n, m):
    pass
Дисперсию писал тут.

Будешь сама дописывать? Вот там, где pass стоит, дописывай вместо pass.



Отредактировано py.user.next (Сен. 13, 2021 23:10:13)

Офлайн

#3 Сен. 14, 2021 09:06:26

amity
Зарегистрирован: 2021-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python


@py.user.next
Спасибо!
Мне вот вчера удалось написать вот такое:

 def calc_mean(n,m):
    math_exp_sum=0.0
    while get_normal_random(n)<=m:
        for _ in range(n):
            math_exp_sum+=get_normal_random(n)
        return(math_exp_sum/n)
    
def calc_var(n,m):
    first_part=0.0
    second_part=0.0
    while get_normal_random(n)<=m:
        for _ in range(n):
            first_part+=(get_normal_random(n))**2
            second_part+=get_normal_random(n)
            variance=(first_part/n)-((second_part/n)**2)
        return(variance)

Не знаю насколько корректно, но вроде сработало.

Офлайн

#4 Сен. 14, 2021 13:12:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python

amity
Не знаю насколько корректно
amity
  
    while get_normal_random(n)<=m:
Вот это бред какой-то.

amity
m — сколько раз вызывать предыдущую функцию



Отредактировано py.user.next (Сен. 14, 2021 13:13:04)

Офлайн

#5 Сен. 14, 2021 17:08:06

amity
Зарегистрирован: 2021-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python

Да, я тоже поняла что бред. Просто ответы выдал близкие к нужным, это запутало. Я только первую неделю в Питоне, извиняюсь((

 def calc_mean(n, m):
    s, number = 0.0, 0
    for _ in range(m):
        x = get_normal_random(n)
        s += x
        number += 1
    return s / number
def calc_var(n,m):
    first_part=0.0
    second_part=0.0
    for _ in range(m):
        first_part+=(get_normal_random(n))**2
        second_part+=get_normal_random(n)
        variance=(first_part/n)-((second_part/n)**2)
        return(variance)

Вот такое написала, вроде ближе к правде..?

Офлайн

#6 Сен. 14, 2021 22:10:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python

amity
  
def calc_mean(n, m):
    s, number = 0.0, 0
    for _ in range(m):
        x = get_normal_random(n)
        s += x
        number += 1
    return s / number
Здесь значение number в конце равно значению m. Поэтом переменная number просто не нужна.

amity
  
def calc_var(n,m):
    first_part=0.0
    second_part=0.0
    for _ in range(m):
        first_part+=(get_normal_random(n))**2
        second_part+=get_normal_random(n)
        variance=(first_part/n)-((second_part/n)**2)
        return(variance)
Это неправильно. Функция get_normal_random() должна вызываться только один раз на каждом шаге цикла. А ещё ты делишь на n, когда n нужно только для функции get_normal_random() и больше ни для чего. И там ещё значение неправильно возвращается прямо из цикла.

amity
Я только первую неделю в Питоне
Питон тут ни при чём. Питон - это карандаш, а программа - это картина. Ты говоришь, что не можешь написать картину, потому что плохо знаешь карандаш. Не, у тебя просто каракули получаются, так как ты рисовать не умеешь.



Отредактировано py.user.next (Сен. 14, 2021 22:12:26)

Офлайн

#7 Сен. 14, 2021 22:26:51

amity
Зарегистрирован: 2021-09-13
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python

def calc_var(n,m):
second_part=0.0
first_part=0.0
number=0
for _ in range(m):
func=get_normal_random(n)
second_part+=func
first_part+=func**2
number+=1
variance=(first_part/number)-((second_part/number)**2)
return(variance)

Офлайн

#8 Сен. 15, 2021 04:47:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9727
Репутация: +  843  -
Профиль   Отправить e-mail  

Оценка основных характеристик полученной случайной величины в Python

Напиши формулы математического ожидания и дисперсии.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version