2016-05-16 49 views
0

我试图打印出曲线拟合的y = 0.50的x值,并试图适应所提供的解决方案here但我得到的下面的错误代码: -错误试图找到/打印x值在曲线拟合时y = 0.5

类型错误:brentq()有多个值的关键字参数“ARGS”

不是sigmoidscaled()函数中的所有值应该是在args内吗?还是我误解了一些东西?

import pylab 
from scipy.optimize import curve_fit 
from matplotlib.pyplot import * 
from scipy.optimize import brentq 
import numpy as np 

n = 20 #20 trials 
ydata = [0/n, 9.0/n, 9.0/n, 14.0/n, 17.0/n] #Divided by n to fit to a plot of y =1 
xdata = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0]) 


#The scaled sigmoid function 
def sigmoidscaled(x, x0, k, lapse, guess, y0=0): 
    F = (1 + np.exp(-k*(x-x0))) 
    z = guess + (1-guess-lapse)/F + y0 
    return z 

p0=[1,1,0,0] 
popt, pcov = curve_fit(sigmoidscaled, xdata, ydata, p0, bounds=((-np.inf, -np.inf, 0.,0.), (np.inf, np.inf, 0.5, 0.5))) 


#Start and End of x-axis, in spaces of n. The higher the n, the smoother the curve. 
x = np.linspace(1,5,20) 
#The sigmoid values along the y-axis, generated in relation to the x values and the 50% point. 
y = sigmoidscaled(x, *popt) 

pylab.plot(xdata, ydata, 'o', label='Psychometric Raw', color = 'blue') 
pylab.plot(x,y, label='Psychometric Fit', color = 'blue') 
#y axis range. 
pylab.ylim(0, 1) 
#Replace x-axis numbers as labels and y-axis numbers as percentage 
xticks([1., 2., 3., 4., 5.], ['C1','CN2','N3','CN4','S5']) 
yticks([0.0, 0.2, 0.4, 0.6, 0.8, 1.0], ['0%','20%','40%','60%','80%','100%']) 
pylab.legend(loc='best') 
xlabel('Conditions') 
ylabel('% perceived more sin like') 
pylab.show() 

a = np.min(xdata) 
b = np.max(xdata) 
x0, k, guess, lapse = popt 
y0 = 0.50 

solution = brentq(sigmoidscaled, a, b, p0, args=(x0, k, guess, lapse, y0)) 
+0

我们需要完整的回溯,可能还有brentq函数的签名...... – thebjorn

回答

0

你的问题是p0调用brentq

solution = brentq(sigmoidscaled, a, b, p0, args=(x0, k, guess, lapse, y0)) 

时,如果你看一下parameters for brentq,你可以看到,有没有参数,接受您的ab间隔参数后的列表。因此,args参数对于具有附加序列的函数的签名而言变得意外。在任何情况下,我都没有看到brentq需要p0,尽管我不是一个经验丰富的人,但我认为这只是曲线拟合时才需要的。