我想使用fsolve来解决alpha和beta(来自Beta发行版)
import numpy as np
from scipy.optimize import fsolve
def mean_and_var(mu,sigma):
a, b = mu,*sigma
return (a/(a+b), a*b/(((a+b)**2)*(a+b+1)))
args = (.5,.05) #mean and variance
alpha,beta = fsolve( mean_and_var, 0, args )
#print (mean_and_var((a, b)))
这给我发错了
TypeError:'float'对象不可迭代
答案 0 :(得分:0)
使用fsolve时,您必须将原始等式修改为另一个具有f(x)=0
形式的等式,在您的情况下:
mu=a/(a+b)
sigma=(ab)/((a+b)^2(a+b+1))
变成:
mu - a/(a+b) = 0
sigma - a*b/(((a+b)**2)*(a+b+1)) = 0
n我们传递第一个参数的函数是一个想要找到的变量(a,b),第二个是其他参数(mu,sigma)。
def mean_and_var(x, *args):
a, b = x
mu, sigma = args
eq1 = mu - a/(a+b)
eq2 = sigma - a*b/(((a+b)**2)*(a+b+1))
return eq1, eq2
args = (.5,.05)
a, b = fsolve(mean_and_var, (.1, .1), args=args)
print("solution: {}, {}".format(a, b))
print("eval in function: {}".format(mean_and_var((a, b), *args)))
输出:
solution: 1.9999999999999376, 2.000000000000059
eval in function: (1.5154544286133387e-14, -4.163336342344337e-17)