"""
拉格朗日不等式约束
例子:求最小值:f(x)=x1+x2
约束:x1**2-x2<=0
-x1<=0
引入松弛变量z1,z2
"""
from sympy import *
x1,x2,k1,k2,z1,z2= symbols('x1,x2,k1,k2,z1,z2')
#构造拉格朗日等式
f=x1+x2
g1=x1**2-x2+z1**2
g2=-x1+z2**2
# g2=x1**2+x2**2-1+z2**2
L=f+k1*g1+k2*g2
dx1=diff(L,x1)
dx2=diff(L,x2)
dk1=diff(L,k1)
dk2=diff(L,k2)
dz1=diff(L,z1)
dz2=diff(L,z2)
"""
sympy 的 solve 函数本身并不直接支持在求解过程中加入变量的上下限(即边界条件或约束)。
solve 函数主要用于求解代数方程,它不考虑变量的取值范围。
"""
#求出多个个变量解
m= solve([dx1,dx2,dk1,dk2,dz1,dz2],[x1,x2,k1,k2,z1,z2],dict=True)
print(m)
#{k1: 1, k2: 1, x1: 0, x2: 0, z1: 0, z2: 0}为合理结果
python拉格朗日乘子法求解不等式约束下的极值例子
于 2024-05-15 11:01:46 首次发布