2016-04-12 4 views

答えて

1

時にはそうであり、時にはそうではありません。これは、定義する関数と選択するメソッドによって異なります。主な違いは、定義されたfuncがスカラーを返してminimize_scalarを使用しなければならないことです。これは、結果がより迅速に返されるためです。

は、より具体的な説明については、以下を参照してください。あなたは、関数トレース、どこ最小の位置を確認したい場合は

from scipy import optimize 

def func(x): 
    return (x - 2) * (x + 2)**2 

def func2(x): 
    return (x - 2) * x * (x + 2)**2 

min = 0 
max = 1 

res1 = optimize.fminbound(func, min, max) 
res2 = optimize.minimize_scalar(func, bounds=(min,max)) 
res3 = optimize.fminbound(func2, min, max) 
res4 = optimize.minimize_scalar(func2, bounds=(min,max)) 

print res1, res2.x 
print res3, res4.x 

import matplotlib.pyplot as plt 
import numpy as np 

xaxis = np.arange(-15,15) 

plt.plot(xaxis, func(xaxis)) 
plt.plot(xaxis, func2(xaxis)) 
plt.scatter(res2.x, res2.fun) 
plt.scatter(res4.x, res4.fun) 
plt.show() 

あなたはプロットを見てみることができます。印刷出力は:

0.666666844366 0.666666656734 
0.999994039139 1.28077640403 
+0

興味深いものです。ドキュメントの 'Objective関数を最小化する(スカラを受け入れる必要があります)').fminboundの場合、funcはスカラーを1つ返すべきであることを理解しました。 –

+0

すべての「通常の」最適化ソフトウェアでは、目的がスカラーであることが必要です。目的がベクトルを返すと、多目的(または複数基準)の問題に終わりますが、それはむしろ特殊な領域です。 –

関連する問題