前提・実現したいこと
2変数関数において変数の片方を固定し、1変数関数にして最適化する処理を考えています。
下記のように、a が変わるたび関数を定義するのではなく、a を代入すると、z = calcx(a) + y**2 を最適化して、そのときの y を出力する関数をつくりたいです。
該当のソースコード
from scipy.optimize import minimize_scalar def f(x, y): """最適化関数""" z = x + y**2 return z def calcx(a): """x の値を出力します""" x = a return x
def f_1(y): z = calcx(1) + y**2 return z res1 = minimize_scalar(f_1, method='brent') print(res1.x)
9.803862664247969e-09
# a = 2 def f_2(y): z = calcx(2) + y**2 return z res2 = minimize_scalar(f_2, method='brent') print(res2.x)
3.195989188427313e-11
# a = 3 def f_3(y): z = calcx(3) + y**2 return z res3 = minimize_scalar(f_3, method='brent') print(res3.x)
3.195989188427313e-11
試したこと
x をグローバル変数にすれば実現可能ですが、グローバル変数は使わない方法をお願いします。
def f(y): """最適化関数""" z = x + y**2 return z def calcx(a): """x の値を出力します""" global x x = a def calcres(a): calcx(a) res = minimize_scalar(f, method='brent') print(res.x) calcres(1) calcres(2) calcres(3)
9.803862664247969e-09
3.195989188427313e-11
3.195989188427313e-11
補足情報(FW/ツールのバージョンなど)
python 3.8.8
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/01 02:19