2017-09-25 61 views
0

我想用fsolve来求解α和β(从Beta分布)SciPy的:fsolve浮动对象不是可迭代

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' object is not iterable

+0

什么是你想要的公式来解决? – eyllanesc

+0

有两个:mu = a /(a + b)mu是我们输入的值,对于sigma =(ab)/((a + b)^ 2(a + b + 1))其中sigma是输入值。想要通过同时求解两个方程来求解a和b。 – pythonbeginner

+0

fsolve解决'f(x)= 0'类型的方程,在你的情况下谁会是'f(x)'? – eyllanesc

回答

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),并且所述第二其他参数(亩,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) 
+0

枫叶有一个fsolve选项,我不记得解决方案,但我认为这是一个数量级1.我的电脑目前不工作,所以生病检查当我可以 – pythonbeginner

+0

运行在枫给出a = 2.0000,b = 2.000。所以我们很好。谢谢 – pythonbeginner