Я пытаюсь решить проблему минимизации с использованием SymPy. Для фиксированного числа переменных, скажем, w1, w2
, я могу сделать это следующим образом:
from sympy import *
w1, w2 = var('w1, w2', real = True)
n1, n2 = symbols('n1, n2', integer = True)
p1, p2 = symbols('p1, p2', real = True)
f = w1**2 / (n1 * p1) + w2**2 / (n2 * p2)
g = w1 + w2 - 1
lam = symbols('lambda', real = True)
L = f - lam * g
gradL = [diff(L, c) for c in [w1, w2]]
KKT_eqs = gradL + [g]
stationary_points = solve(KKT_eqs, [w1, w2, lam], dict = True)
Можем ли мы решить эту проблему для переменного числа, скажем, k
,переменных? Я пробовал следующее:
from sympy import *
i = symbols('i', cls = Idx)
k = symbols('k', integer = True)
w = IndexedBase('w', real = True)
n = IndexedBase('n', integer = True)
p = IndexedBase('p', real = True)
f = summation(w[i]**2 / (n[i] * p[i]), (i, 1, k))
g = summation(w[i], (i, 1, k)) - 1
lam = symbols('lambda', real = True)
L = f - lam * g
Однако я не смог понять, как мне принять оставшуюся часть кода.
(я новичок в pythonпоэтому, пожалуйста, потерпите меня.)