概述
初学cvx,今天在做一个仿真时,出现了“无法从 cvx 转换为 double。”这个错误,我是中文版的,英文版的应该表达为“Conversion to double from cvx is not possible.”类似的。
我原来的代码大概是这个的:
z=zeros(1,K);
cvx_begin sdp
variable x;
maximize t;
subject to
for n=1:K
z(n)=Ax+b;
end
z(n)>=t;
cvx_end
意思就是在constriant中要做一个和运算,而这个和运算是包有变量的,所以不可能在cvx外面完成,所以需要一个中间变量z来存着,而一开始我把z的声明放在外面,这样就是会产生数据从cvx类型存到double(外面是double的)的过程。后来我把z当作一个variable变量,将声明放到cvx内部
就又出现了overwrite的问题,因为如果把z当作变量,则它是一个可以变动的变量,其值是动态的,如果对其用“=”号赋值了,就改变了cvx在做运算的值,这是不允许覆盖的。后来,查了网上一些网友的资料才知,在cvx内部可以声明专用的中间变量类型来临时使用的。也就是expression的作用:
cvx中的variable变量不是允许人为赋值的,只有在最后得出结果才会被结果覆盖,而expression变量是可以使用“=”的临时变量,在完成cvx后其值清零。
cvx_begin sdp
variable x;
expression z(1,K);
maximize t;
subject to
for n=1:K
z(n)=Ax+b;
end
z(n)>=t;
cvx_end
PS:以上cvx例程只作临时表达作用,不作严谨使用。
最后
以上就是开放诺言为你收集整理的从 cvx 转换为 double 时出现以下错误:无法从 cvx 转换为 double。的全部内容,希望文章能够帮你解决从 cvx 转换为 double 时出现以下错误:无法从 cvx 转换为 double。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复