2017-08-04 13 views
0

私はscipy.optimizeを使って関数を最小限にしようとしています。ここに私のプログラムがあり、最後の行はエラーメッセージです。シンボル変数を反復可能変数に変換するには?

import sympy as s 
from scipy.optimize import minimize 
x,y,z=s.symbols('x y z') 
f= lambda z: x**2-y**2 
bnds = ((70,None),(4,6)) 
res = minimize(lambda z: fun(*x),(70,4), bounds=bnds) 



<lambda>() argument after * must be an iterable, not Symbol 

シンボルをイテレートに変換する方法や、イテレートを直接定義する方法はありますか?

答えて

1

f(*x)で関数を呼び出すことは、f(x[0], x[1], ...)を意味します。つまり、タプル(または他の反復可能)にxを見込んで、機能は

def f(*args): 
    <use args tuple> 

のような定義を持っている必要があり、私はあなたがsympyコードでやろうとしているものはかなりわからない、またはなぜあなたは直接Python/numpyで関数を定義するのではなく、それを使用します。

関数等:

def f(z): 
    x,y = z # expand it to 2 variables 
    return x**2 - y**2 

が有する最小の呼び出しで動作するはず:

minimize(f, (10,3)) 

xyf値を最小化しようと(10,3)から始まる変化するであろう。

In [20]: minimize(f, (70,4), bounds=((70,None),(4,6))) 
Out[20]: 
     fun: 4864.0 
hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64> 
     jac: array([ 139.99988369, -11.99996404]) 
    message: b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL' 
    nfev: 9 
     nit: 1 
    status: 0 
    success: True 
     x: array([ 70., 6.]) 
+0

メッセージ:b'CONVERGENCE:NORM_OF_PROJECTED_GRADIENT _ <= _ PGTOL 'はどういう意味ですか? – Shareef

関連する問題