CVX error:Conversion to double from cvx is not possible解决方案

昨天在做MATLAB仿真的时候遇到了这个问题,真的是解决了好几个小时。

背景:用CVX工具箱做蒙特卡洛实验(就是多次重复实验)

报错:如题

百思不得其解。

解决过程

1.CVX USER'S GUIDE;


他说要把变量声明一下,写成expression variables的形式,于是我就把提示报错行的那块在cvx_begin后声明了一下,但是依然报错;

2.继续搜百度,在cvx论坛里,有人也出现了类似的问题,其他人给出的解决方案是把报错的变量声明成zeros(size)的这种已知矩阵的形式,这样每次重新进这句语句这句语句就重新赋值了,我试了一下,依然失败。

3.那时已经夜深11点了,我已经连续四天都是熬大夜的状态,但是没办法,报错的声音就是这样无情的嘲笑着我。于是我觉得打断点,看看能不能看出点端倪。

我在cvx_begin前和cvx_end后都打了断点。

当时我的代码类似是这样的

¥%……

(断点)cvx_begin

              变量声明部分  (有个b(),complex)

              目标函数部分

             约束部分

             结果部分

             cvx_end

(断点) a(:,1)=norm(b(:,1));   %b是已经声明的cvx变量,就是这句话一直报错

于是我发现第一次进CVX的时候,CVX里声明的变量b是complex型,但是出cvx的时候,变量b就变成cvx型了,这样肯定会报错的

于是我加了clear,代码变成了这样

断点)cvx_begin

              变量声明部分  (有个b(),complex)

              目标函数部分

             约束部分

             结果部分

            clear 各种能在workspace里看见是CVX类型的变量

             cvx_end

(断点) a(:,1)=norm(b(:,1));

但是,依然失败了,变量b的类型还是没有改变为我想要的complex;

好吧,最后就是,我把cvx_end外的变量a,在cvx变量里也声明了。这样他俩都是cvx里的变量,要朱就一起朱,要墨一起墨

well-done;

竟然成功了,玄学,不知为何。。。待解


猜你喜欢

转载自blog.csdn.net/weixin_38452468/article/details/78558842