You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy solve函数无法返回拉格朗日乘数法的求解结果

Sympy solve函数无法返回拉格朗日乘数法的求解结果

我来帮你排查这个问题~你遇到的核心原因是调用sp.solve()时,没有把拉格朗日乘数变量g1L也纳入要求解的变量列表中!

你的方程组里一共包含三个方程,对应三个未知量:x、y和g1L。但你调用solve时只指定了x和y,SymPy无法推断出你还需要求解g1L,所以找不到符合条件的解,只能返回空列表[]。

修改后的代码

只需要在solve函数里加上g1L作为求解变量即可:

import sympy as sp

x, y = sp.var('x y')

# 约束条件
g1 = 2 * x + y - 100

# 目标函数
f = 2 * x + 2 * x * y + y

# 拉格朗日乘数
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)

# 求解所有三个变量:x, y, g1L
solution = sp.solve(fin_eqs, x, y, g1L)
print(solution)

运行结果

修改后运行代码,会得到如下结果:

Eq(2*y + 2, 2*g1L)
Eq(2*x + 1, g1L)
Eq(2*x + y - 100, 0)
[(25, 50, 51)]

可以看到,x=25和y=50正是你预期的结果,同时还返回了拉格朗日乘数的值g1L=51。

备注:内容来源于stack exchange,提问作者deShortOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:09:37