我正在尝试使用此 YouTube 视频中的问题来计算拉格朗日乘数:https://www.youtube.com/watch?v=B0yzLgJ6wn8,但是使用 sympy.solve 不会返回解决方案
我已经用Python编写了这个代码
import sympy as sp
x, y = sp.var('x y')
# constraint
g1 = 2 * x + y - 100
# function
f = 2 * x + 2 * x * y + y
# lambda
g1L = sp.Symbol('g1L')
fin_eqs = []
for i in [x, y]:
fin_eqs.append(
sp.Eq(
sp.simplify(f.diff(i)),
sp.simplify(
g1.diff(i) * g1L
)
)
)
fin_eqs.append(sp.Eq(sp.simplify(g1), 0))
for i in fin_eqs:
print(i)
"""
prints
Eq(2*y + 2, 2*g1L)
Eq(2*x + 1, g1L)
Eq(2*x + y - 100, 0)
which I've confirmed is correct
"""
sp.solve(fin_eqs, x, y) # returns []
但是,x = 25 和 y = 50 并不成立
出于某种原因,要获得结果,您需要省略正在求解的所有符号或传递所有符号。
sp.solve(fin_eqs)
和 sp.solve(fin_eqs, x, y, g1L)
返回 {g1L: 51, x: 25, y: 50}
sp.solve(fin_eqs, x)
和 sp.solve(fin_eqs, x, y)
返回空列表。
文档很混乱,我所知道的是它根据提供的符号数量尝试不同的策略。