基于YALMIP的SOSP学习

参考网址:YALMIP

SOS的基本思想

定义多项式 p ( x , y ) = ( 1 + x ) 4 + ( 1 − y ) 2 p(x,y)=(1+x)^4+(1-y)^2 p(x,y)=(1+x)4+(1y)2

x = sdpvar(1,1)
y = sdpvar(1,1)
p = (1+x)^4+(1-y)^2

引入分解 p = v T Q v p=v^TQv p=vTQv,则 v v v 的阶数是 p p p 的一半,这里 p p p 的阶数是6

v = monolist([x y],degree(p)/2);
Q = sdpvar(length(v));
p_sos = v'*Q*v;

多项式 p s o s p_{sos} psos p p p 要匹配,则两个多项式中的所有系数必须为0,同时, Q Q Q 矩阵是半正定的,那么可以定义约束问题如下

F = [coefficients(p-p_sos,[x y]) == 0, Q >= 0];
optimize(F)

其中, 函数 c o e f f i c i e n t s coefficients coefficients 表示提取标量多项式 p − p s o s p-p_{sos} ppsos x x x y y y 的系数,也就是说,其系数必须要等于0。

此外,如果想要查找多项式的下界,可以添加目标函数决策变量 t t t

sdpvar t
F = [coefficients((p-t)-p_sos,[x y]) == 0, Q >= 0];
optimize(F,-t)

SOSP操作

使用 s o s sos sos 函数和 s o l v e s o s solvesos solvesos 解决SOS问题

x = sdpvar(1,1);y = sdpvar(1,1);
p = (1+x)^4 + (1-y)^2;
% sos用于定义平方和约束
F = sos(p);
% 计算平方和分解
sol = solvesos(F);
if sol.problem == 0
 disp('Sum-of-squares decomposition possible!');
end
% 提取计算的平方和分解
h = sosd(F);
sdisplay(h)
clean(p-h'*h,1e-6)

这里面涉及到了几个编程中会经常用到的函数, s o l v e s o s solvesos solvesos s o l . p r o b l e m sol.problem sol.problem s d i s p l a y sdisplay sdisplay c l e a n clean clean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值