2012-02-14 5 views
2

私は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になります。これは超奇妙です。

すべてのヘルプははるかに高く評価されます。私は壁に向かって頭を打ちつけて、なぜこれが起きているのか理解しようとしています。

+2

+1面白い質問です。 :) – yuk

+1

タイトルは誤解を招くようなものです。 –

答えて

8

binM(p)は、実際のdouble値ではなく、文字列 '0'のASCII値を保持するためです。 '0'のASCII値は48です。 '0' + 1は自動的にdouble値に変換されます。あなたは残りの数学を行います。

+0

ちょうどそれを考えました。ありがとう! – Mason

関連する問題