this 스레드에서 제안 된 최적화 문제를 해결하고 싶습니다. 이제는 x[1]...x[n]
을 해결할뿐만 아니라 변수 y도 해결하고 싶습니다. 색인 생성에 문제가있는 것 같습니다.람다 함수에서 여러 변수를 최적화하기 위해 인덱싱
from sympy import Sum, symbols, Indexed, lambdify
from scipy.optimize import minimize
import numpy as np
def _eqn(y, variables, periods, sign=-1.0):
x, i = symbols("x i")
n = periods-1
s = Sum(Indexed('x', i)/(1+0.06)**i, (i, 1, n))
f = lambdify(x, s, modules=['sympy'])
return float(sign*(y + f(variables)))
z = 3
results = minimize(lambda xy: _eqn(xy[0], xy[1:z], z),np.zeros(z))
print(results.x)
네, 알겠습니다. 그래도 (i + 1)이어야합니다. 따라서 일부에서는 x [0]과 x [1]을 변수로 사용합니다. 최소화 함수에서 인덱싱이 실제로 올바른가요? _eqn에서 y와 변수를 변경한다고 가정하면, 최소화되지 않을 것입니다 (lambda xy : _eqn (xy [: z-1], xy [z-1], z), np.zeros (z))? 인덱싱이 합계 변수와 일치하기 때문에?! 이러한 경우에 그 결과가 어긋나는 것처럼 어떻게 든 결과를 확인할 수 있습니까? – Peterhack
색인 생성이 올바른 것처럼 보입니다. '_eqn' 함수 안에서,'x [0]'과'x [1]'은'variables [0]'과'variables [1]'를 가리키고'xy [1]'과'xy [ 2]'. 이미'_eqn' 함수의 입력 인자'y'에'xy [0]'를 분리했습니다. –
알았어, 내가 따라갈 수있을 것 같아. 그런데 왜 (i + 1) 결과와 첫 번째 답변이 다른가요? 이것은 실제로 영향을 미칩니 까? 'x = [var ('x'+ str (i)) (범위 (z)에있는 i에 대한] ' – Peterhack