qpOASES的使用案例及对应matlab程序写法例子

qpOASES的简单介绍及使用:https://blog.csdn.net/weixin_40709533/article/details/86064148

qpOASES案例
在qpOASES文档的案例1中有个例子 example1.cpp
它求解了两次,取出第一次求解的参数

	real_t H[2*2] = { 1.0, 0.0, 0.0, 0.5 };
	real_t A[1*2] = { 1.0, 1.0 };
	real_t g[2] = { 1.5, 1.0 };
	real_t lb[2] = { 0.5, -2.0 };
	real_t ub[2] = { 5.0, 2.0 };
	real_t lbA[1] = { -1.0 };
	real_t ubA[1] = { 2.0 };

	/* Setting up QProblem object. */
	QProblem example( 2,1 );
	Options options;
	example.setOptions( options );

	/* Solve first QP. */
	int_t nWSR = 10;
	example.init( H,g,A,lb,ub,lbA,ubA, nWSR );

	/* Get and print solution of first QP. */
	real_t xOpt[2];
	real_t yOpt[2+1];
	example.getPrimalSolution( xOpt );
	example.getDualSolution( yOpt );
	printf( "\nxOpt = [ %e, %e ];  yOpt = [ %e, %e, %e ];  objVal = %e\n\n", 
			xOpt[0],xOpt[1],yOpt[0],yOpt[1],yOpt[2],example.getObjVal() );

运行其代码后可以得到其x的解为[0.5,-1.5]。

但是它只给了代码,没说明到底求解了什么。
找到其文档,其求解格式如下:
在这里插入图片描述
根据这个反推其求解的函数。

由H及g 得到式子:

x=[x1;x2];
H =[1 0;0 0.5];
g = [1.5;1];
==>>
0.5*[x1,x2]*[1 0 ;0 0.5]*[x1 ;x2] + [x1 ,x2]*[1.5 ; 1]
即求 0.5x1^2+0.25x2^2+1.5x1+x2  的最小值

但是不清楚w0代表了什么,在这当作1了.
第一个约束为:

lbA=-1; ubA = 2; A = [1,1];
==>>
-1<=x1+x2<=2

第二个约束为:

lb = [0.5,-2]; ub = [5, 2];
==>>
0.5<=x1<=5
-2<=x2<=2

再通过matlab的quadprog函数验证一下
matlab中quadprog的求解格式如下:
在这里插入图片描述
它分为不等式约束与等式约束,且不等式约束是单边的,
所以其参数与qpOASES中设置有点不一样。
matlab代码如下:

H =[1 0;0 0.5]; %与qpOASES中H相同
f= [1.5, 1];   %相当于qpOASES中g的转置
lb = [0.5;-2];
ub = [5; 2];
A = [1,1;-1 -1];  %相当于将qpOASES中第一个约束合并
b = [2;1];       
Uk=quadprog(H,f,A,b,[],[],lb,ub);
Uk(1) 
Uk(2)

求解可得结果同样是0.5,-1.5

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值