Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab CVX封装中的跟踪_Matlab_Cvx - Fatal编程技术网

Matlab CVX封装中的跟踪

Matlab CVX封装中的跟踪,matlab,cvx,Matlab,Cvx,我在CVX(MATLAB)代码中使用跟踪。有时它工作正常,但有时它显示出一些错误。错误消息如下- “trace”以前似乎用作函数或命令,与此处用作变量名称的用法相冲突。 此错误的一个可能原因是您忘记初始化变量,或者您使用 装载或评估 我在CVX网站上搜索了一下,发现了这个- 只有当对角线上的元素具有相同的曲率时,轨迹(Z)才有效 我无法理解这一点。期待任何慷慨的建议 下面我摘录了一部分MATLAB代码,以清楚地说明我的问题 它正常工作的程序- %%调用CVX包 G=零((M+1)*d,(M+1

我在CVX(MATLAB)代码中使用跟踪。有时它工作正常,但有时它显示出一些错误。错误消息如下-

“trace”以前似乎用作函数或命令,与此处用作变量名称的用法相冲突。 此错误的一个可能原因是您忘记初始化变量,或者您使用 装载或评估

我在CVX网站上搜索了一下,发现了这个-

只有当对角线上的元素具有相同的曲率时,轨迹(Z)才有效

我无法理解这一点。期待任何慷慨的建议

下面我摘录了一部分MATLAB代码,以清楚地说明我的问题

它正常工作的程序-

%%调用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,如果你解决了问题,请为其他人粘贴答案。