Az EPR-probléma egyik, modulációs megoldása:
A polarizátorok a Malus-törvény szerint engedik át a fényt, de jelen van egy moduláció, amit két közeli frekvenciájú hullám kelt. Ennek az burkolója szorzódik a Malus értékkel.
valoszinuseg=sqr(cos(polarizator1-foton_polarizacio)*modamp1);
http://en.wikipedia.org/wiki/Polarizer
A modamp a két forgó hullámvektor modulációjának a burkolója.
Az eredmény 22 fokra 2.97, ami bőven jó. Ennél a szögértéknél sértik a Bell egyenlőtlenségeket a kisérletek.
És a moduláció is. A két oldal független, tehát klasszikus eloszlást számol a program.
tesztszog: 0, modulacio: 1.84117, kvantumfizika: 2.00002
tesztszog: 2, modulacio: 1.86134, kvantumfizika: 2.01533
tesztszog: 4, modulacio: 1.89647, kvantumfizika: 2.05798
tesztszog: 6, modulacio: 2.02935, kvantumfizika: 2.12618
tesztszog: 8, modulacio: 2.1324, kvantumfizika: 2.21184
tesztszog: 10, modulacio: 2.33257, kvantumfizika: 2.31344
tesztszog: 12, modulacio: 2.57762, kvantumfizika: 2.43092
tesztszog: 14, modulacio: 2.80614, kvantumfizika: 2.54366
tesztszog: 16, modulacio: 2.94834, kvantumfizika: 2.64659
tesztszog: 18, modulacio: 3.07892, kvantumfizika: 2.73725
tesztszog: 20, modulacio: 3.04488, kvantumfizika: 2.79418
tesztszog: 22, modulacio: 2.97815, kvantumfizika: 2.82606
tesztszog: 24, modulacio: 2.7958, kvantumfizika: 2.81676
tesztszog: 26, modulacio: 2.69214, kvantumfizika: 2.76263
tesztszog: 28, modulacio: 2.47125, kvantumfizika: 2.65808
tesztszog: 30, modulacio: 2.25672, kvantumfizika: 2.50501
tesztszog: 32, modulacio: 1.91933, kvantumfizika: 2.29487
tesztszog: 34, modulacio: 1.6886, kvantumfizika: 2.03643
tesztszog: 36, modulacio: 1.33774, kvantumfizika: 1.73813
tesztszog: 38, modulacio: 0.912208, kvantumfizika: 1.3984
#include <iostream>
#include <math.h>
using namespace std;
double radian=M_PI/180.0;
int szamlalo[16];
double sqr(double n) {return n*n;}
inline double veletlen() {return fmod((double)rand()/65500.0,1.0);}
double Ef(int s1,int s2,int s3,int s4)
{
double szamlalo_base2=(szamlalo[s1]+szamlalo[s2]+szamlalo[s3]+szamlalo[s4]);
if(szamlalo_base2==0) return 0;
return (double)(szamlalo[s1]+szamlalo[s2]-szamlalo[s3]-szamlalo[s4])/szamlalo_base2;
}
int csatorna_a=0;
int csatorna_a_=0;
int csatorna_a2=0;
int csatorna_a2_=0;
int csatorna_b=0;
int csatorna_b_=0;
int csatorna_b2=0;
int csatorna_b2_=0;
void ellenorzes_szamlalo()
{
if(csatorna_a) if(csatorna_b) szamlalo[0]++; //++
if(csatorna_a_) if(csatorna_b_) szamlalo[1]++; //--
if(csatorna_a) if(csatorna_b_) szamlalo[2]++; //+-
if(csatorna_a_) if(csatorna_b) szamlalo[3]++; //-+
if(csatorna_a) if(csatorna_b2) szamlalo[4]++; //++
if(csatorna_a_) if(csatorna_b2_) szamlalo[5]++; //--
if(csatorna_a) if(csatorna_b2_) szamlalo[6]++; //+-
if(csatorna_a_) if(csatorna_b2) szamlalo[7]++; //-+
if(csatorna_a2) if(csatorna_b) szamlalo[8]++; //++
if(csatorna_a2_) if(csatorna_b_) szamlalo[9]++; //--
if(csatorna_a2) if(csatorna_b_) szamlalo[10]++; //+-
if(csatorna_a2_) if(csatorna_b) szamlalo[11]++; //-+
if(csatorna_a2) if(csatorna_b2) szamlalo[12]++; //++
if(csatorna_a2_) if(csatorna_b2_) szamlalo[13]++; //--
if(csatorna_a2) if(csatorna_b2_) szamlalo[14]++; //+-
if(csatorna_a2_)if(csatorna_b2) szamlalo[15]++; //-+
}
double S2modulacio(double a,double b,double a2,double b2,int op)
{
int k;
for(k=0;k<16;k++) szamlalo[k]=0;
for(k=0;k<500000;k++)//meres
{
double foton_polarizacio=veletlen()*M_PI*2;
double foton_polarizacio2=foton_polarizacio;//veletlen()*M_PI*2;
double valoszinuseg, valoszinuseg2,polarizator1,polarizator2;
csatorna_a=0;
csatorna_a_=0;
csatorna_a2=0;
csatorna_a2_=0;
csatorna_b=0;
csatorna_b_=0;
csatorna_b2=0;
csatorna_b2_=0;
int o1=0,o2=0;
polarizator1=a;if(veletlen()<0.5) {polarizator1=a2;o1=1;}
polarizator2=b;if(veletlen()<0.5) {polarizator2=b2;o2=1;}
double l1=680e-9;
double l2=725e-9;
double k1=2.0*M_PI/l1;
double k2=2.0*M_PI/l2;
double amp1x,amp1y,amp2x,amp2y,
modamp1,modamp2,
tav=10.76574,tav2=11.23;
double fazis1=veletlen()*M_PI*2;
amp1x = sin(fazis1+tav*k1)*0.5;
amp1y = cos(fazis1+tav*k1)*0.5;
amp1x += sin(fazis1+tav*k2)*0.5;
amp1y += cos(fazis1+tav*k2)*0.5;
modamp1=amp1x*sin(polarizator1) + amp1y*cos(polarizator1);
modamp1*=modamp1;
amp2x = sin(fazis1+tav2*k1)*0.5;
amp2y = cos(fazis1+tav2*k1)*0.5;
amp2x += sin(fazis1+tav2*k2)*0.5;
amp2y += cos(fazis1+tav2*k2)*0.5;
modamp2=amp2x*sin(polarizator2) + amp2y*cos(polarizator2);
modamp2*=modamp2;
valoszinuseg=sqr(cos(polarizator1-foton_polarizacio)*modamp1);
if(valoszinuseg>veletlen())
{
if(o1==0) csatorna_a=1;
else csatorna_a2=1;
}
else
{
polarizator1+=M_PI/2;
modamp1=amp1x*sin(polarizator1) + amp1y*cos(polarizator1);
modamp1*=modamp1;
valoszinuseg=sqr(cos(polarizator1-foton_polarizacio)*modamp1);
if(valoszinuseg>veletlen())
{
if(o1==0) csatorna_a_=1;
else csatorna_a2_=1;
}
}
valoszinuseg=sqr(cos(polarizator2-foton_polarizacio)*modamp2);
if(valoszinuseg>veletlen())
{
if(o2==0) csatorna_b=1;
else csatorna_b2=1;
}
else
{
polarizator2+=M_PI/2;
modamp2=amp2x*sin(polarizator2) + amp2y*cos(polarizator2);
modamp2*=modamp2;
valoszinuseg=sqr(cos(polarizator2-foton_polarizacio)*modamp2);
if(valoszinuseg>veletlen())
{
if(o2==0) csatorna_b_=1;
else csatorna_b2_=1;
}
}
ellenorzes_szamlalo();
}
//ab -ab2 a2b a2b2
double N=0.0;
N=Ef(0,1,2,3);
N-=Ef(4,5,6,7);
N+=Ef(8,9,10,11);
N+=Ef(12,13,14,15);
return N;
}
double S2kvantumfizika(double a,double b,double a2,double b2,int op)
{
int k;
for(k=0;k<16;k++) szamlalo[k]=0;
for(k=0;k<500000;k++)
{
double foton_polarizacio=veletlen()*M_PI*2;
double foton_polarizacio2=foton_polarizacio;
double valoszinuseg, polarizator1,polarizator2;
csatorna_a=0;
csatorna_a_=0;
csatorna_a2=0;
csatorna_a2_=0;
csatorna_b=0;
csatorna_b_=0;
csatorna_b2=0;
csatorna_b2_=0;
int o1=0,o2=0;
polarizator1=a;if(veletlen()<0.5) {polarizator1=a2;o1=1;}
polarizator2=b;if(veletlen()<0.5) {polarizator2=b2;o2=1;}
valoszinuseg=sqr(cos(polarizator1-foton_polarizacio));
if(valoszinuseg>veletlen() )
{
if(o1==0) csatorna_a=1;
else csatorna_a2=1;
foton_polarizacio2=polarizator1;//spooky action at distance
}
else
{
polarizator1+=M_PI/2;
{
if(o1==0) csatorna_a_=1;
else csatorna_a2_=1;
foton_polarizacio2=polarizator1;//spooky action at distance
}
}
valoszinuseg=sqr(cos(polarizator2-foton_polarizacio2));
if(valoszinuseg>veletlen() )
{
if(o2==0) csatorna_b=1;
else csatorna_b2=1;
}
else
{
{
if(o2==0) csatorna_b_=1;
else csatorna_b2_=1;
}
}
ellenorzes_szamlalo();
}
//ab -ab2 a2b a2b2
double N=0.0;
N=Ef(0,1,2,3);
N-=Ef(4,5,6,7);
N+=Ef(8,9,10,11);
N+=Ef(12,13,14,15);
return N;
}
int main()
{
for(int i=0;i<40;i+=2)
{
double S=0.0,tesztszog=i,a,a2,b,b2;
a=0.0;
b=tesztszog;
a2=tesztszog*2.0;
b2=tesztszog*3.0;
a*=radian;
b*=radian;
a2*=radian;
b2*=radian;
cout << "tesztszog:" << ' ' << i << ", ";
S=S2modulacio(a,b,a2,b2 ,0);
cout << "modulacio:" << ' ' << S << ", ";
S=S2kvantumfizika(a,b,a2,b2 ,0);
cout << "kvantumfizika:" << ' ' << S << endl;
}
}