2016-06-11 19 views
0

私はこの機能を持っている:私は、私はそれを実行しようとするとres = scipy.optimize.minimize(error, (1, 2), ...scipyのダウンロード機能muliple引数

でそれを最適化したい

def error(w0, w1): 
    return sum((data.Height - (w1*data.Weight+w0))**2) 

と、次のエラー:私は見つけるTypeError: error() takes exactly 2 arguments (1 given)

私の機能を変更すると、このエラーは発生しません。

def error(w): 
    return sum((data.Height - (w[1]*data.Weight+w[0]))**2) 

しかし、なぜ私の最初の動作しない理解したいと思います。あなたはこの関数のドキュメントを見れば

答えて

1

まあ、それは

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)[source] 

楽しさがここにあなたの関数であり、引数は、あなたが送信している引数であることを述べています。あなたの最初のコードでは、目的関数には2つのパラメータがありますが、送信するものはタプルであり、ドキュメントに従って何をすべきかです。

目的関数に送信するものはタプルですが、そこには2つのパラメータがあり、エラーがポップアップする理由があります。

同じ理由で、2番目のコードはwがここのタプルで動作するため、コードが機能します。

0
minimize(fun, x0, args=(), method=None,....): 
""" 
minimize f(x) subject to 
    ... 
    where x is a vector of one or more variables. 

だから、最初の引数は、あなたの関数、errorあり、そして第二には、あなたのケースのタプルには、初期推定x0です。最初のコードはx0を配列x0 = np.asarray(x0)に変換します。

そして例の機能を見て:私はずっとこれを使用していない

fun = lambda x: (x[0] - 1)**2 + (x[1] - 2.5)**2 

、それは確かにあなたがいた場合、あなたの機能が動作するはずのようになります。

error(np.array([1,2])) 

と一貫性のあること、あなた2番目の形式ですが、最初の形式ではありません。

は初期値、np.array(x0)で開始することにより、それをminimize作品を別の言い方をすると、errorに、戻り値に基づいて、その初期x0上の他の2素子アレイ、バリエーションを試みるプラグ。それは複数の引数で再生するのではなく、複数の要素を持つ1つの引数で再生します。

関連する問題