Matlab CVX封装中的跟踪
我在CVX(MATLAB)代码中使用跟踪。有时它工作正常,但有时它显示出一些错误。错误消息如下- “trace”以前似乎用作函数或命令,与此处用作变量名称的用法相冲突。 此错误的一个可能原因是您忘记初始化变量,或者您使用 装载或评估 我在CVX网站上搜索了一下,发现了这个- 只有当对角线上的元素具有相同的曲率时,轨迹(Z)才有效 我无法理解这一点。期待任何慷慨的建议 下面我摘录了一部分MATLAB代码,以清楚地说明我的问题 它正常工作的程序-Matlab CVX封装中的跟踪,matlab,cvx,Matlab,Cvx,我在CVX(MATLAB)代码中使用跟踪。有时它工作正常,但有时它显示出一些错误。错误消息如下- “trace”以前似乎用作函数或命令,与此处用作变量名称的用法相冲突。 此错误的一个可能原因是您忘记初始化变量,或者您使用 装载或评估 我在CVX网站上搜索了一下,发现了这个- 只有当对角线上的元素具有相同的曲率时,轨迹(Z)才有效 我无法理解这一点。期待任何慷慨的建议 下面我摘录了一部分MATLAB代码,以清楚地说明我的问题 它正常工作的程序- %%调用CVX包 G=零((M+1)*d,(M+1
%%调用CVX包
G=零((M+1)*d,(M+1)*d);
对于i=0:M
G(i*d+(1:d),i*d+(1:d))=眼睛(d);
结束
cvx_精度最好;
cvx_开始
变量G((M+1)*d,(M+1)*d)半定%定义变量
最小化(迹(C*G))%目标函数
从属于
%约束条件
对于i=0:M
G(i*d+(1:d),i*d+(1:d))==眼睛(d);
结束
cvx_end
在解释问题时,错误信息非常清楚trace(Mij*Q)=E(i,j);
),它会导致范围冲突。E(i,j)
是一个数字而不是数组。因此,我的下一个疑问是,如果这是错误的问题,那么在CVX中定义此类约束的方法是什么?谢谢你的帮助,@excaza。再次感谢你的帮助。我纠正了我的错误。真的,这是一个非常愚蠢的错误和问题。对其他人来说,如果你面临与我相同的问题,那么按如下方式更改代码-trace(Mij*Q)==E(i,j)
是的,我知道E(I,j)
不是数组,问题是设置trace(Mij*Q)
等于E(I,j)
,因为trace
应该是一个函数,但该行将其定义为数组。您需要对该行进行寻址,或者删除该行,或者使用其他变量名。关于你的第二个评论,我要提醒你,由于舍入误差,在不包含公差的情况下,不要比较两个(我假设)浮点值是否相等。请看:@Rajada,如果你解决了问题,请为其他人粘贴答案。