Neumann János, Nikola Tesla, Albert Einstein
-
v3ctorsigma #1041
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct complex
{
double real , img;
complex() {real = img = 0;};
complex(double r, double i) {real =r ; img = i;};
void set(double r, double i) {real=r ; img = i;};
void conjugate() {img *= -1;}
complex operator + (complex c)
{
complex e;
e.real = real + c.real;
e.img = img + c.img;
return e;
}
complex operator - (complex c)
{
complex e;
e.real = real - c.real;
e.img = img - c.img ;
return e;
}
complex operator * (complex c)
{
complex e;
e.real = real*c.real - img *c.img;
e.img = img *c.real + real*c.img;
return e;
}
complex operator / (complex c)
{
complex e;
double denominator = c.real*c.real + c.img*c.img;
e.real = (real * c.real + img * c.img) / denominator;
e.img = (img * c.real - real *c.img ) / denominator;
return e;
}
};
double probability (complex * c1, complex *c2 )
{
complex c3[2], P;
c3[0] = c1[0];
c3[1] = c1[1];
c3[0].conjugate(); // c3 = <c1|
c3[1].conjugate();
P = c3[0]*c2[0] + c3[1]*c2[1]; // <c1|c2>
P = P*P; // ^2
return P.real;
}
complex sigma_z[2][2], sigma_x[2][2], sigma_y[2][2],spin_n[2], n[3];
void func(const char *str)
{
complex sigmaDOTn[2][2], v2[2];
sigmaDOTn[0][0] = sigma_x[0][0]*n[0] + sigma_y[0][0]*n[1] + sigma_z[0][0]*n[2];
sigmaDOTn[0][1] = sigma_x[0][1]*n[0] + sigma_y[0][1]*n[1] + sigma_z[0][1]*n[2];
sigmaDOTn[1][0] = sigma_x[1][0]*n[0] + sigma_y[1][0]*n[1] + sigma_z[1][0]*n[2];
sigmaDOTn[1][1] = sigma_x[1][1]*n[0] + sigma_y[1][1]*n[1] + sigma_z[1][1]*n[2];
v2[0] = sigmaDOTn[0][0]*spin_n[0] + sigmaDOTn[0][1]*spin_n[1];
v2[1] = sigmaDOTn[1][0]*spin_n[0] + sigmaDOTn[1][1]*spin_n[1];
spin_n[0]=v2[0];
spin_n[1]=v2[1];
printf( "%s : %.2f/%.2f %.2f/%.2f \n",str, spin_n[0].real, spin_n[0].img, spin_n[1].real, spin_n[1].img);
}
int main ()
{
//Pauli matrices
sigma_x[0][0].set(0,0); sigma_x[0][1].set(1,0);
sigma_x[1][0].set(1,0); sigma_x[1][1].set(0,0);
sigma_y[0][0].set(0,0); sigma_y[0][1].set(0, -1);
sigma_y[1][0].set(0,1); sigma_y[1][1].set(0,0);
sigma_z[0][0].set(1,0); sigma_z[0][1].set(0,0);
sigma_z[1][0].set(0,0); sigma_z[1][1].set(-1,0);
//spin
spin_n[0].set(1,0);
spin_n[1].set(0,0);
n[0].set(0, 0);
n[1].set(0, 0);
n[2].set(1, 0);
func("0 ");
n[0].set(0, 0);
n[1].set(0, 0);
n[2].set(-1, 0);
func("180");
n[0].set(0, 0);
n[1].set(0, 0);
n[2].set(1, 0);
func("360");
n[0].set(0, 0);
n[1].set(0, 0);
n[2].set(-1, 0);
func("540");
n[0].set(0, 0);
n[1].set(0, 0);
n[2].set(1, 0);
func("720");
}
/*
the output:
0 : 1.00/0.00 0.00/0.00
180 : -1.00/0.00 0.00/0.00
360 : -1.00/0.00 -0.00/0.00
540 : 1.00/0.00 -0.00/0.00
720 : 1.00/0.00 0.00/0.00
*/