2016-12-29 10 views
0

scipyのダウンロード:私は右の最小化法を拾った場合は私が新しいパラメータアルファとrを最小化して取得する必要があり機能(のようなエラー)を得た

#!/usr/bin/env python 
import numpy as np 
from scipy.integrate import quad 
import scipy.optimize as opt 

def integrand(t, alpha, r): 
    return np.exp(-alpha*(t-r))**2 

def my_function(alpha, r): 
    return quad(integrand, 0, 5.0, args=(alpha, r))[0] 

alpha = np.arange(1.0, 2.0, 0.1) 
r = np.arange(1.0, 2.0, 0.1) 
x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2]) 
res = opt.minimize(my_function, x0, args=(alpha, r), method='CG', tol=1.e-2, options={'gtol': 0.01, 'maxiter': 5}) 

私の最初の質問です。もしそうなら、私は最小限のメソッドに渡さなければならない議論を誰かが手がけてくれますか?

現在、エラー・メッセージが返されます。

File "./test.py", line 15, in <module> 
    res = opt.minimize(my_function, x0, args=(alpha, r), method='CG', tol=1.e-2, options={'gtol': 0.01, 'maxiter': 5}) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/_minimize.py", line 439, in minimize 
    return _minimize_cg(fun, x0, args, jac, callback, **options) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 1159, in _minimize_cg 
    gfk = myfprime(x0) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 289, in function_wrapper 
    return function(*(wrapper_args + args)) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 622, in approx_fprime 
    return _approx_fprime_helper(xk, f, epsilon, args=args) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 556, in _approx_fprime_helper 
    f0 = f(*((xk,) + args)) 
    File "/usr/local/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 289, in function_wrapper 
    return function(*(wrapper_args + args)) 
TypeError: my_function() takes exactly 2 arguments (3 given) 
+0

私が渡されているかの引数わからないんだけど、あなたはmy_functionの '使用することができます(* argsを、** kwargsから):プリント(引数、kwargs) 'あなたが実際に関数に渡されているのを見てください。 –

答えて

0

あなたはrとアルファに関して最小限にしたいと、それから、あなたは出発点を通過しなければならない、それは、初期値です。

マイソリューション:

import numpy as np 
from scipy.integrate import quad 
import scipy.optimize as opt 


def integrand(t, alpha, r): 
    return np.exp(-alpha*(t-r))**2 


def my_function(parameters): 
    alpha = parameters[0] 
    r = parameters[1] 
    return quad(integrand, 0, 5.0, args=(alpha, r))[0] 

alpha_0 = 1 
r_0 = 1 

res = opt.minimize(my_function, np.asarray([alpha_0, r_0]), method='CG', tol=1.e-2, options={'gtol': 0.01, 'maxiter': 5}) 
print(res) 

出力:

fun: 0.0018415003336983448 
    jac: array([-0.00523077, 0.00762011]) 
message: 'Optimization terminated successfully.' 
    nfev: 12 
    nit: 2 
    njev: 3 
    status: 0 
success: True 
     x: array([ 2.06899361, -1.1785839 ]) 
+0

ありがとうございました!もう一つ質問があります。私は変数への統合境界を変更したいと思います。私はx = parameters [2]やquad quad(integrand、0、x、args =(alpha、r))[0]のような、my_function(parameters)関数に追加引数を渡そうとしました。この場合、xも最小化されます。どうすればこの問題を回覧できますか? – Monica

+0

@eyllanesc、私はちょうど私の票が逆転したことを知りました。申し訳ありません:http://meta.stackexchange.com/questions/289026/can-moderators-use-your-account-to-downvote-answers-that-youve-voted-up/289027#289027 – answerSeeker

関連する問題