2016-08-17 43 views
1

嗨,基本上我想返回1值,如果输入是负值,而另一个输入值是正值。但不能同时返回。返回的值将用于scipy的curve_fit函数以确定我的未知参数(a & b)。如何根据函数的输入值返回2个值中的一个

我尝试使用函数内如果循环,但它提供了以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

这里是我的代码:

#Input fitting data 
PAP_Applied_H = [-5,5,10] 
PAP_Eb_fit = [30.7,31.3,31.6] 

#Function Fitting 
def f2(x,a,b): 
    if x<0: 
     y=a*((1+(x/b))**2) 
    else: 
     y=a*((1-(x/b))**2) 
    return y 

params2,extras2 = curve_fit(f2,PAP_Applied_H,PAP_Eb_fit,p0=(1,15)) 

#Linear Fitting 
linefit2 = py.polyfit(PAP_Applied_H,PAP_Eb_fit,1) 
l2 = py.poly1d(linefit2) 

x_new2 = list(range(-50000,1000,1)) 
x_line2 = list(range(-3000,3000,1)) 
y_func2 = f2(x_new2,params2[0],params2[1]) 
y_line2 = l2(x_line2) 

所以我应该如何改变功能“F2 '这样它会返回我想要的值?任何帮助,将不胜感激。提前致谢。

+0

在函数x是一个列表(你说'输入'的变量)。那么你认为要确定输入列表是正面的还是负面的? –

+0

你写的'f2'函数没有什么问题,除了你传递一个'list',而不是'x'的单个值。你如何期待它通过'x = [ - 1,1,1,-1,1]'来表现? x是正面还是负面? –

回答

0

您的输入x是一个表。您无法检查整个列表的正值或负值。您必须逐个检查每个元素。 试试这个:

def f2(x,a,b): 
    y=[] 
    for i in range(len(x)): 
     if x[i]<0: 
      y.append(a*((1+(x[i]/b))**2)) 
     else: 
      y.append(a*((1-(x[i]/b))**2)) 
    return y 

这里的返回值y也是值的列表。

0

如何:

DEF F(X,A,B):返回一个*(1 - 2个* ABS(X)/ B +(X/B)** 2)

我知道,这是一种解决方法,并不能解决一般的问题。

相关问题