拉格朗日方法
自练习呃呃
等式约束凸二次规划问题求解
import math
import numpy as np
from numpy.linalg import inv
def qlag(H, a, b, c):
ih = inv(H)
aha = a*ih*a.H
iaha = inv(aha)
aih = a*ih
g = ih - aih.H*iaha*aih
B = iaha*aih
C = -iaha
x = B.H*b-g*c
lam = B*c-C*b
fval = 0.5*x.H*H*x+c.H*x
print(fval)
print(lam)
print(x)
print(B)
print(C)
if __name__ == '__main__':
# 2X1^2+X2^2+X1X2-X1-X2
# ST X1+X2=1
H = np.matrix(([[4, 1],[1, 2]]))
c = np.matrix(([-1, -1])).H
A = np.matrix(([1, 1]))
b = np.matrix(([1])).H
qlag(H,A,b,c)