功能: 二次规划求解

格式:
[x, f] = QuadProg(H, g, A, b, C, d)
[x, f] = QuadProg(H, g, , , C, d)
[x, f] = QuadProg(H, g, A, b)
[x, f] = QuadProg(H, g)
[x, f] = QuadProg(H, , A, b, C, d)
[x, f] = QuadProg(H, , , , C, d)
[x, f] = QuadProg(H, , A, b)
[x, f] = QuadProg(H, )
[x, f] = QuadProg(, g, A, b, C, d)
[x, f] = QuadProg(, g, , , C, d)
[x, f] = QuadProg(, g, A, b)
[x, f] = QuadProg(, g)

H : 目标二次项矩阵变量,当此参数为空时,回归到线性规划
g : 目标线性项向量变量,当此参数为空时,默认线性项系数为0
A : 不等式约束矩阵变量
b : 不等式常数项向量
C : 等式约束矩阵变量
d : 等式常数项向量

x : 返回求解得到的向量
f : 返回目标最小值

说明:
1、本函数求解如约束问题
$$
\begin{aligned}
\mathbf{min}:&\ x^THx+x^Tg
\\
\mathbf{s}\cdot\mathbf{t}\cdot:&\ Ax \leq b
\\
&\ Cx=d
\end{aligned}
$$

2. H矩阵必须为方阵,且H矩阵不要求对称.如果H为空,或者元素全为0,则退化为线性规划求解.
3. A、C矩阵列数必须与H矩阵一致.
4. b元素个数必须与A的行数一致.
5. d元素个数必须与C的行数一致.
6. g元素个数必须与H的行数一致.
7. 本函数约定求解变量为浮点数.
8. 本函数的目标函数为最小化问题,注意与最大化问题的区别.
9. 对于表达式里含有绝对值、最大最小化、分式等形式函数,先自行进行非线性项线性化.
10. 本函数二次规划求解部分调用OSQP库进行求解,线性规划部分使用单纯形法进行求解。

例子:
//这里要求如下问题的(x,y)
$$
\begin{aligned}
\mathbf{min}:&\ \dfrac{1}{2}x^2+y^2-xy-2x-6y
\\
\mathbf{s}\cdot\mathbf{t}\cdot:&\begin{cases}
x+y&\leq 2
\\
-x+2y&\leq 2
\\
2x+y&\leq 3
\\
-x &\leq 0
\\
-y &\leq 0
\end{cases}
\end{aligned}
$$
H = [0.5, -1; 0, 1];
g = [-2, -6];
A =
[ 1.00000000000000    1.00000000000000
 -1.00000000000000    2.00000000000000
  2.00000000000000    1.00000000000000
 -1.00000000000000    0.00000000000000
  0.00000000000000   -1.00000000000000 ];

b = 
[ 2.00000000000000
  2.00000000000000
  3.00000000000000
  0.00000000000000
  0.00000000000000 ];

[xy, f] = QuadProg(H, g, A, b)//执行得到如下结果
xy =
[ 0.66666666666666
  1.33333333333333 ]
f =
[-8.22222222222222 ]

[xy,f] = QuadProg(H, g)//如果去掉上面的约束,执行得到如下结果
xy =
[ 40.0001127064645
  32.0000903245322 ]
f =
[ 272.002302084697 ]
