2012-02-14 3 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이 아니라 문자열 '0'의 ASCII 값을 보유하기 때문에 '0'의 ASCII 값은 48입니다. '0'+ 1은 자동으로 double 값으로 변환됩니다. 나머지 수학은 해.

+0

그냥 그렇게 생각했습니다. 감사! – Mason