2017-09-25 59 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