私はMatLabの初心者です。私が書いている簡単なスクリプトをデバッグしようとしています。私は私のコードをデバッグしようとしている間に奇妙なエラーが発生しています。ここではスクリプトは次のとおりです。私はプログラムを実行するとなぜ0 + 1 == 49ですか?
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になります。これは超奇妙です。
すべてのヘルプははるかに高く評価されます。私は壁に向かって頭を打ちつけて、なぜこれが起きているのか理解しようとしています。
+1面白い質問です。 :) – yuk
タイトルは誤解を招くようなものです。 –