2016-08-17 14 views
1

基本的には、入力が負の場合は1つの値を、正の場合は1つの値を返します。しかし、同時に両方を返すことはありません。返される値は、unknowパラメータ(a & b)を決定するためにscipyからcurve_fit関数に使用されます。関数からの入力値に応じて2つの値のうち1つを返す方法

私は関数内であればループを使用してみましたが、それは次のエラー得られます。ここでは

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はリスト(あなたが 'input'と言う変数)です。あなたは入力リストが正か負かを判断すると思いますか? –

+0

あなたの 'f2'関数に書かれているように間違っていることはありませんが、' x'の単一の値ではなく、 'list'を渡している点が異なります。あなたが 'x = [ - 1,1,1、-1,1]'を渡すと、それがどのように動作すると思いますか? xは正か負か –

答えて

0

入力はxです。リスト全体の正または負の値を確認することはできません。各要素を1つずつチェックする必要があります。 これを試してみてください:

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

方法について:

デフF(X、A、B):*を返します(1から2つの* ABS(X)/ B +(X/B)** 2)

I知っている、それは回避策であり、一般的なcaeを解決しません。

関連する問題