2. Коды процедур

 

 Здесь приводятся коды процедур, используемых в вычислениях. Вы можете скопировать эти процедуры в виде m-файлов в папку WORK директории MATLAB и поставить собственные эксперименты с физикой на поле Галуа.  

 

 function y=ameasur(x)

% Оператор антиредукции y=ameasur(x)

% y-вектор алгоритмического состояния c субъективной ошибкой

%

%     Copyright Kaminski A.V.

%     $Revision: $Date: 2003/09/22 $

n=numel(x);

j=1+fix(n*rand);

 if rand < .5

    x(j)=~x(j);

 end

 y=x;

 

 

 

function [y, z] = measur(x)

%Оператор редукции

%Преобразовывает алгоритмический вектор n-мерного пространства

%в ближайший (с точностью до субъективной ошибки) вектор физического

%состояния.

% Y-вектор физического состояния

% X-вектор алгоритмического состояния

% n-размерность алгоритмического пространства

%

%     Copyright Kaminski A.V.

%     $Revision: $Date: 2003/09/22 $

n=numel(x);

H=hadamard(n+1);

H=(H+1)/2;

H=H(2:n+1,:);

H=[H,~H];

for i=1:(n+1)*2;

    R=xor(H(:,i),x);

    if sum(R)<=1 ;

        y=H(:,i);

        z=i;

    end;

end

 

 

 

 

function y=geval(x,n)

%функция эволюции. Перемещает алгоритмическую точку на n шагов вдоль

%траектории Грея в m - мерном двоичном пространстве. x - входной вектор, y - выходной.

%     Copyright Kaminski A.V.

%     $Revision: $Date: 2003/09/22 $

 

n1=numel(x);

b=graybin(x);

a=arrbit(b);

a=mod(a+n,2^n1);

c=bitarr(a);

yy=bingray(c);

n2=numel(yy);

n=n1-n2;

z((1:n),1)=0;

y=[yy;z];

 

 

 

function y=bitarr(x)

%Функция целого числа. Возвращает массив коэффициентов разложения этого

%числа по степеням 2.В первом элементе массива - младщий разряд.

%     Copyright Kaminski A.V.

%     $Revision: $Date: 2003/09/22 $

 

i=0;

z=x;

a(1)=0;

while z

    i=i+1;

    r=mod(z,2);

    z=fix(z/2);

    a(i)=r;

end

y=a';

 

 

 

function y=arrbit(x)

%Функция конвертирует бинарный вектор в число в естественной позиционной

%двоичной системе счисления. Обратная ей bitarr.

%     Copyright Kaminski A.V.

%     $Revision: $Date: 2003/09/22 $

 

n=numel(x);

y=0;

for i=1:n;

    y=y+x(i)*2^(i-1);

end

 

 

 

function y=bingray(x)

%Преобразует  двоичный позиционный код в код Грея. x - входной вектор, y -

%выходной. Первый элемент вектора - младший разряд.

%     Copyright Kaminski A.V.

%     $Revision: $Date: 2003/09/22 $

 

m=numel(x);

x(m+1)=0;

for i=1:m

    b(i)=xor(x(i+1),x(i));

end

y=b';

 

 

 

function y=graybin(x)

%Преобразует код Грея в двоичный позиционный. x - входной вектор, y - выходной.

%     Copyright Kaminski A.V.

%     $Revision: $Date: 2003/09/22 $

 

m=numel(x);

b(m+1)=0;

for i=(m+1):-1:2

    b(i-1)=xor(b(i),x(i-1));

end

y=b(1:m)';

 

 

 

Программа перекодировки физических состояний использовалась для перехода от метрики естественной нумерации к метрике Грея.

 

 

F=getphis(7);

for i=1:16

                                ff=graybin(F(:,i)); 

z(i)=arrbit(ff);

end    

 Rez=sort(z) 

for i=1:16

for j=1:16

if z(i)==Rez(j);

dec(i)=j;

 end

end

end  

 

 

 

Это случай без интерференции (открыта одна щель)

 

F=getphis(7); 

f= F(:,5);

y=0;

for s=1:128

for n=1:50

a0=ameasur( f); 

a1= geval(a0,s);

[Rez,h]=measur(a1);

num(n)=dec(h);

end

y(s+1,1:16)=hist(num,1:16); 

end

contour(y)   

 

 

Это случай  интерференции с фиксированной базой.

 

F=getphis(7);

y=0;

f= F(:,5);

for s=0:128

for n=0:100

a0=ameasur( f); 

a1= geval(a0,s);

a2= geval(a0,s+39);

a3= xor(a1,a2);

 

[Rez,h]=measur(a3);

num(n+1)=dec(h);

end

y(s+1,1:16)=hist(num,1:16); 

end

contour(y

-----------


Предыдущая    На главную  

 

 

Hosted by uCoz