программа выдает разные ответы при одинаковых исходных данных. ddRight и TddRight должны совпадать, и непонятно совершенно почему в итоге они разные.
Текст программы:
%сравнение g = 1; %\gamma d01 = sqrt(g/4); %dipole moments, |F = 0, n = 0> <- |F0 = 1> - populated level d10 = d01; d00 = sqrt(g/4); d01m = sqrt(g/4); d1m0 = d01m;
lr = 1.06; %radius of atomic cloud
%number of atoms nat = 5; %number of neighbours neighbour=4;
%frequency detuning oma = 10^6*g; deltaP = -30:0.05:30; nsp = length(deltaP);
%atoms coordinates phi=rand(nat,1); theta=rand(nat,1); r=lr*betarnd(2,1,nat,1); x = r.*cos(2*pi*phi).*sin(2*pi*theta); y = r.*sin(2*pi*phi).*sin(2*pi*theta); z = r.*cos(2*pi*theta);
clear('phi','r'); xx = x*ones(1,nat); yy = y*ones(1,nat); zz = z*ones(1,nat); %distance between atoms rr = sqrt((xx - xx').^2 + (yy - yy').^2 + (zz - zz').^2) + eye(nat); %disp(rr) %clear('kr','rr');
disp(z);
%Matrix of interaction operator (photon has left polarization) ddRight = zeros(nat*3^(nat-1),1);
for s = 1:nat ddRight(1+(s-1)*3^(nat-1)) = -i*d10.*exp(i*z(s)); end; disp(ddRight);
%searching of neighbours (это тот цикл, после которого все плохо)
rr1 = rr + 2*lr*eye(nat); rr0=zeros(nat,nat); rrI=zeros(nat,nat); for i=1:nat [C,I] = min(rr1);drrI=I;rrI(:,i)=(drrI)'; for t=1:nat rr0(I(t), t)=2*lr; end; rr1=rr1+rr0;end disp(rrI);
rrI(:,(neighbour+1):nat)=[]; disp(rrI); disp(rr); %clear('kr','rr');
%z не меняется disp(z);
%а ddRight меняется:
TddRight = zeros(nat*3^( neighbour),1);
for s = 1:nat TddRight(1+(s-1)*3^( neighbour )) = -i*d10.*exp(i*z(s)); end;
disp(TddRight);
|