Octave还可以解决二次规划问题,这是
最小0.5 x'*H*x+x'*q
约束条件为
A*x=b lb<=x<=ub A_lb<=A_in*x<=A_ub
[x, obj, info, lambda] =
qp (x0, H)
¶[x, obj, info, lambda] =
qp (x0, H, q)
¶[x, obj, info, lambda] =
qp (x0, H, q, A, b)
¶[x, obj, info, lambda] =
qp (x0, H, q, A, b, lb, ub)
¶[x, obj, info, lambda] =
qp (x0, H, q, A, b, lb, ub, A_lb, A_in, A_ub)
¶[x, obj, info, lambda] =
qp (…, options)
¶求解二次规划(QP)。
求解从定义的二次规划
最小0.5 x’*高*x+x’*q x
约束条件为
A*x=blb<=x<=ubA_lb<=A_in*x<=A_ub
使用空空间活动集方法。
任意绑定(A, b, lb, ub, 输入(_I), A_lb,ub(_U))可以设置为空矩阵([]
)如果不存在。约束条件A和输入(_I)是矩阵,每行表示单个约束。根据约束的数量,其他边界是标量或向量。如果最初的猜测是可行的,那么算法会更快。
param是指定控制算法的附加参数的结构体。目前,qp
识别这些参数:MaxIter
, TolX
.
MaxIter
禁止在停止优化之前的最大算法迭代次数。默认值为200。该值必须是正整数。
TolX
指定未知变量的终止公差x。默认为sqrt(eps)
或者大约1e-8。
在返回时,x是最小值的位置,并且未来值包含目标函数的值x.
结构体,包含有关算法的运行时信息。定义了以下字段:
解算器
查找解决方案所需的迭代次数。
信息
一个整数,表示解决方案的状态。
这个问题是可行的和凸的。找到全局解决方案。
这个问题不是凸的。找到本地解决方案。
这个问题不是凸的,也不是无界的。
已达到最大迭代次数。
这个问题是不可行的。
详见: sqp.
x =
pqpnonneg (c, d)
¶x =
pqpnonneg (c, d, x0)
¶x =
pqpnonneg (c, d, x0, options)
¶[x, minval] =
pqpnonneg (…)
¶[x, minval, exitflag] =
pqpnonneg (…)
¶[x, minval, exitflag, output] =
pqpnonneg (…)
¶[x, minval, exitflag, output, lambda] =
pqpnonneg (…)
¶减少(1/2 * x * c * x+ d * x)
约束条件为x>= 0
.
c和d必须是实矩阵,并且c必须对称且正定。
x0是解决方案的可选初始猜测x.
param是一个参数结构体,用于更改算法的行为(详见最优集
). pqpnonn
识别一个参数:MaxIter
.
输出:
解决方案矩阵
所获得的最小模型值,1/2*xmin*c*xmin+ d*xmin
收敛的指标。0表示超过了迭代次数,因此未达到收敛;>0表示算法收敛。(该算法是稳定的,并且会在多次迭代后收敛。)
具有两个字段的结构体:
算法
:使用的算法(nnls
)iterations
:执行的迭代次数。拉格朗日乘子。如果这些值为非零,则对应的x值应为零,表示解决方案被压向一个坐标平面。幅度表示如果x>= 0
朝着那个方向放宽了限制。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号