問題は、私の目的に合わせてフィッティング手順を設計しようとしており、scipy の微分進化アルゴリズムを初期値の一般的な推定量として使用したいということです。これは、より適切なフィッティングのために LM アルゴリズムで使用されます。DEで最小化したい関数は、分析的に定義された非線形関数といくつかの実験値の間の最小二乗です。こだわったポイントは機能設計です。scipy リファレンスで述べられているように: "関数はf(x, *args)の形式である必要があります。ここで、x は 1-D 配列の形式の引数であり、args は完全に指定するために必要な追加の固定パラメーターのタプルです。関数"
説明のために書いた醜いコードの例があります:
def func(x, *args):
"""args[0] = x
args[1] = y"""
result = 0
for i in range(len(args[0][0])):
result += (x[0]*(args[0][0][i]**2) + x[1]*(args[0][0][i]) + x[2] - args[0][1][i])**2
return result**0.5
if __name__ == '__main__':
bounds = [(1.5, 0.5), (-0.3, 0.3), (0.1, -0.1)]
x = [0,1,2,3,4]
y = [i**2 for i in x]
args = (x, y)
result = differential_evolution(func, bounds, args=args)
print(func(bounds, args))
生データをタプルとして関数に提供したかったのですが、インタープリターが関数に満足していないため、想定どおりではないようです。問題は簡単に解決できるはずですが、本当にイライラしているので、アドバイスをいただければ幸いです。