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
    */