我是靠谱客的博主 开放诺言,最近开发中收集的这篇文章主要介绍从 cvx 转换为 double 时出现以下错误:无法从 cvx 转换为 double。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

初学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。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部