Найти - Пользователи
Полная версия: Оценка основных характеристик полученной случайной величины в Python
Начало » Python для новичков » Оценка основных характеристик полученной случайной величины в Python
1
amity
Нужно написать две функции, вычисляющие математическое ожидание и дисперсию полученной случайной величины соответственно. Первую функцию назвать 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 раз и усреднить полученные значения. Не совсем понимаю как это сделать.
py.user.next
Вот я привёл это к начальному виду (с чего надо начинать)
  
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.
amity

@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)

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

amity
m — сколько раз вызывать предыдущую функцию
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
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)

Вот такое написала, вроде ближе к правде..?
py.user.next
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
Я только первую неделю в Питоне
Питон тут ни при чём. Питон - это карандаш, а программа - это картина. Ты говоришь, что не можешь написать картину, потому что плохо знаешь карандаш. Не, у тебя просто каракули получаются, так как ты рисовать не умеешь.
amity
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)
py.user.next
Напиши формулы математического ожидания и дисперсии.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB