Форум сайта python.su
Нужно написать две функции, вычисляющие математическое ожидание и дисперсию полученной случайной величины соответственно. Первую функцию назвать 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 раз и усреднить полученные значения. Не совсем понимаю как это сделать.
Офлайн
Вот я привёл это к начальному виду (с чего надо начинать)
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
Отредактировано py.user.next (Сен. 13, 2021 23:10:13)
Офлайн
@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)
Офлайн
amity
Не знаю насколько корректно
amityВот это бред какой-то.while get_normal_random(n)<=m:
amity
m — сколько раз вызывать предыдущую функцию
Отредактировано py.user.next (Сен. 14, 2021 13:13:04)
Офлайн
Да, я тоже поняла что бред. Просто ответы выдал близкие к нужным, это запутало. Я только первую неделю в Питоне, извиняюсь((
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)
Офлайн
amityЗдесь значение number в конце равно значению m. Поэтом переменная number просто не нужна.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
amityЭто неправильно. Функция get_normal_random() должна вызываться только один раз на каждом шаге цикла. А ещё ты делишь на n, когда n нужно только для функции get_normal_random() и больше ни для чего. И там ещё значение неправильно возвращается прямо из цикла.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)
amityПитон тут ни при чём. Питон - это карандаш, а программа - это картина. Ты говоришь, что не можешь написать картину, потому что плохо знаешь карандаш. Не, у тебя просто каракули получаются, так как ты рисовать не умеешь.
Я только первую неделю в Питоне
Отредактировано py.user.next (Сен. 14, 2021 22:12:26)
Офлайн
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)
Офлайн
Напиши формулы математического ожидания и дисперсии.
Офлайн