我是MatLab的超级初学者,并且正在尝试调试正在编写的简单脚本。尝试调试代码时出现奇怪的错误。这是脚本:

function [prob] = QuantumHW1(j,k,m)

X = [0 1; 1 0];
Y = [0 -sqrt(-1); sqrt(-1) 0];
Z = [1 0; 0 -1];
H = 1/sqrt(2) * [1 1; 1 -1];
S = [1 0; 0 i];
T = [1 0; 0 exp(sqrt(-1)*pi/4)];

mats = {X,Y,Z,H,S,T};

binJ = dec2bin(j,k);
binM = dec2bin(m,k);

totOps = {};

%Set up all the operators to be used
for p = 1:k
    totOps(p) = mats(mod(p,6));
    if p == 0
        totOps(p) = X;
    end
end

withM = {};

%Dot product with M
for p = 1:k
    p
    binM(p)+1
    totOps(:,1)
    withM(p) = totOps(:,binM(p)+1);
end

rTotal = 0;

%Now take components with respect to J
for p = 1:k
    rTotal = rTotal + [not(binJ(p)),binJ(p)] * withM(p);
end

prob = norm(runningTotal)^2;

disp('The probability to measure j = %d in a k = %d system on input m = %d is %d',j,k,m,prob);
end


当我运行程序时,在行withM(p) = totOps(:,binM(p)+1);上收到“数组索引越界”错误。我试图确保p的值正确。在for循环的第一次迭代中,binM(p)=0。但是当我尝试获得binM(p)+ 1时,我得到49。这太奇怪了。

任何帮助深表感谢。我在墙上打着头,试图弄清为什么会这样。

最佳答案

因为binM(p)保留字符串'0'的ASCII值,而不是实际的双精度值0。并且'0'的ASCII值是48。'0'+ 1将自动转换为双精度值。您需要完成其余的数学运算。

关于arrays - 为什么0 + 1 == 49?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9270863/

10-09 16:05