Это не то, для чего Sym Py: для символических манипуляций, а не для решения некоторой системы уравнений с параметрами с плавающей точкой, полученными из данных. Вы получаете ошибку, потому что [1, 1]
не относится к решению SymPy, для символических решений нет «отправной точки». Но до этого код был глубоко испорчен: дважды присваивались mu
и var
(второе назначение стирает предыдущее, это Python-назначения, а не уравнения).
Суть в том, что используйте решение от SciPy, когда вам нужно численное решение проблемы.
from scipy import optimize
mu = 0.6
var = 0.2
def f(x, mu, var):
alpha, beta = x[0], x[1]
return [alpha/(alpha+beta) - mu, (alpha*beta)/(((alpha+beta)**2)*(alpha+beta+1)) - var]
rv = optimize.root(f, [1, 1], args=(mu, var)).x
который находит решение [0.12, 0.08]
Кстати, ничего из этого не нужно делать для начала: чтобы подогнать распределение под данные, нужно использовать fit
методы из scipy.stats
, которые учитывают весь набор данных , Поиск параметров формы путем приравнивания среднего значения и дисперсии к среднему значению выборки и дисперсии - плохая идея.