开关箱不工作matlab



我正在MATLAB中编写一个函数,以根据其中一个列值计算若干矩阵。

例如

B=
1.0000    0  0.3000
0         0  0.3000

以此类推。第3列在不同的矩阵中是不同的,但是在整个矩阵中是相同的。第三列的值可以是。2:.05:。每种我都有一个箱子。

我正在经历一些非常奇怪的结果。当多次运行switch case时,尽管我可以清楚地看到switch语句被赋值为。3,但是。3的case始终不起作用。我对这个问题进行了更精确的研究,开关变量和情况肯定是相同的。

我已经粘贴了下面一段更完整的代码。函数twolayer返回[0/1 0/1比特率],比特率是开关变量。请让我知道,如果有什么我做错了,当实施开关情况。我已经尝试了相同的代码使用if elseif,并遇到了同样的问题,我相信这是MATLAB如何比较数字的问题。提前感谢!

for k=1:15
    A(k,1:3)=twolayer(j,X(1,i));
end  
%Sort the matrix by bitrate
B=sortrows(A,3);
ref=B(1,3);
%find the index at which the sorted matrix switches bitrate
c=1;
while B(c,3)==ref 
    c=c+1;
end
c=c-1;
%Split the matrix by indicated bitrate
C(1:c,1:3)=B(1:c,1:3)
D(1:(15-c),1:3)=B((c+1):15,1:3)
c=0;
%Check each matrix by bitrate then add it's average and
%record the increase in counter
check = double(C(1,3))
switch check
case 0.2000
    cbrbaselayer(j-2,1)=(cbrbaselayer(j-2,1)+(mean(C(:,1))));
    counterone=counterone+1;
    'Counter One Increased'
case  0.2500
    cbrbaselayer(j-2,2)=(cbrbaselayer(j-2,2)+(mean(C(:,1))));
    countertwo=countertwo+1;
    'Counter Two Increased'
case  0.3000
    cbrbaselayer(j-2,3)=(cbrbaselayer(j-2,3)+(mean(C(:,1))));
    counterthree=counterthree+1;
    'Counter Three Increased'
case  0.3500
    cbrbaselayer(j-2,4)=(cbrbaselayer(j-2,4)+(mean(C(:,1))));
    counterfour=counterfour+1;
    'Counter Four Increased'
case  0.4000
    cbrbaselayer(j-2,5)=(cbrbaselayer(j-2,5)+(mean(C(:,1))));
    counterfive=counterfive+1;
    'Counter Five Increased'
case  0.4500
    cbrbaselayer(j-2,6)=(cbrbaselayer(j-2,6)+(mean(C(:,1))));
    countersix=countersix+1;
    'Counter Six Increased'
case  0.5500
        cbrbaselayer(j-2,8)=(cbrbaselayer(j-2,8)+(mean(C(:,1))));
    countereight=countereight+1;
    'Counter Eight Increased'
case  0.6000
    cbrbaselayer(j-2,9)=(cbrbaselayer(j-2,9)+(mean(C(:,1))));
    counternine=counternine+1;
    'Counter Nine Increased'
case  0.6500
    cbrbaselayer(j-2,10)=(cbrbaselayer(j-2,10)+(mean(C(:,1))));
    ounterten=counterten+1;
    'Counter Ten Increased'
case  0.7000
    cbrbaselayer(j-2,11)=(cbrbaselayer(j-2,11)+(mean(C(:,1))));
    countereleven=countereleven+1;
    'Counter Eleven Increased'
case  0.7500
    cbrbaselayer(j-2,12)=(cbrbaselayer(j-2,12)+(mean(C(:,1))));
    countertwelve=countertwelve+1;
    'Counter Twelve Increased'
case  0.8000
    cbrbaselayer(j-2,13)=(cbrbaselayer(j-2,13)+(mean(C(:,1))));
    counterthirteen=counterthirteen+1;
    'Counter Thirteen Increased'
end
check = double(D(1,3))
switch check
case 0.2000
    cbrbaselayer(j-2,1)=(cbrbaselayer(j-2,1)+(mean(D(:,1))));
    counterone=counterone+1;
    'Counter One Increased'
case  0.2500
    cbrbaselayer(j-2,2)=(cbrbaselayer(j-2,2)+(mean(D(:,1))));
    countertwo=countertwo+1;
    'Counter Two Increased'
case  0.3000
    cbrbaselayer(j-2,3)=(cbrbaselayer(j-2,3)+(mean(D(:,1))));
    counterthree=counterthree+1;
    'Counter Three Increased'
case  0.3500
    cbrbaselayer(j-2,4)=(cbrbaselayer(j-2,4)+(mean(D(:,1))));
    counterfour=counterfour+1;
    'Counter Four Increased'
case  0.4000
    cbrbaselayer(j-2,5)=(cbrbaselayer(j-2,5)+(mean(D(:,1))));
    counterfive=counterfive+1;
    'Counter Five Increased'
case  0.4500
    cbrbaselayer(j-2,6)=(cbrbaselayer(j-2,6)+(mean(D(:,1))));
    countersix=countersix+1;
    'Counter Six Increased'
case  0.5500
    cbrbaselayer(j-2,8)=(cbrbaselayer(j-2,8)+(mean(D(:,1))));
    countereight=countereight+1;
    'Counter Eight Increased'
case  0.6000
    cbrbaselayer(j-2,9)=(cbrbaselayer(j-2,9)+(mean(D(:,1))));
    counternine=counternine+1;
    'Counter Nine Increased'
case  0.6500
    cbrbaselayer(j-2,10)=(cbrbaselayer(j-2,10)+(mean(D(:,1))));
    counterten=counterten+1;
    'Counter Ten Increased'
case  0.7000
    cbrbaselayer(j-2,11)=(cbrbaselayer(j-2,11)+(mean(D(:,1))));
    countereleven=countereleven+1;
    'Counter Eleven Increased'
case  0.7500
    cbrbaselayer(j-2,12)=(cbrbaselayer(j-2,12)+(mean(D(:,1))));
    countertwelve=countertwelve+1;
    'Counter Twelve Increased'
case  0.8000
    cbrbaselayer(j-2,13)=(cbrbaselayer(j-2,13)+(mean(D(:,1))));
    counterthirteen=counterthirteen+1;
    'Counter Thirteen Increased'
end
clear A; clear B; clear C; clear D; clear check; clear c;

首先,代码很长。编程是为了让你的生活更轻松。不困难。

这是我改进switch语句的建议,写两个子函数,一个用于C,一个用于D

function checkC(inputvalue)
 index = (inputvalue-0.2)/0.05 +1;
 cbrbaselayer(j-2,index)=(cbrbaselayer(j-2,index)+(mean(C(:,1))));
 eval(sprintf(counter%d = counter%d +1,index,index));
end
function checkD( inputvalue)
 index = (inputvalue-0.2)/0.05 +1;
 cbrbaselayer(j-2,index)=(cbrbaselayer(j-2,index)+(mean(D(:,1))));
 eval(sprintf(counter%d = counter%d +1,index,index));
end

最新更新