From Lorenz to...

Attractors from a system of ordinary differential equations

In the following expressions p(x,y,z) is current point, k[i] are constants initially calculated, and pNew(x,y,z) is the new point that we will calculate

 


Lorenz

    pNew.x =p.x+ dt *(k[0]*(p.y-p.x));
    pNew.y =p.y+ dt *(p.x*(k[1]-p.z)-p.y);
    pNew.z =p.z+ dt *(p.x*p.y-k[2]*p.z);

 


Chen-Lee

    pNew.x =p.x +  dt *(k[0]*p.x -p.y*p.z);
    pNew.y =p.y +  dt *(k[1]*p.y +p.x*p.z);
    pNew.z =p.z +  dt *(k[2]*p.z +p.x*p.y/3.f);

 


TSUCS 1 & 2

    pNew.x =p.x +  dt *(k[0]*(p.y -p.x) + k[3]*p.x*p.z);
    pNew.y =p.y +  dt *(k[1]*p.x + k[5]*p.y -p.x*p.z);
    pNew.z =p.z +  dt *(k[2]*p.z +p.x*p.y - k[4]*p.x*p.x);

 


Aizawa

    pNew.x =p.x +  dt *((p.z-k[1])*p.x - k[3]*p.y);
    pNew.y =p.y +  dt *((p.z-k[1])*p.y + k[3]*p.x);
    const float xQ =p.x*p.x;
    pNew.z =p.z +  dt *(k[2] + k[0]*p.z - (p.z*p.z*p.z)/3.f - (xQ +p.y*p.y) * (1.f + k[4]*p.z) + k[5]*p.z*xQ*p.x);

 


FourWings, FourWings2, FourWings3

    //4Wings
    pNew.x =p.x +  dt *(k[0]*p.x - k[1]*p.y*p.z);
    pNew.y =p.y +  dt *(p.x*p.z - k[2]*p.y);
    pNew.z =p.z +  dt *(k[4]*p.x - k[3]*p.z +p.x*p.y);

    //4Wings2
    pNew.x =p.x +  dt *(k[0]*p.x + k[1]*p.y + k[2]*p.y*p.z);
    pNew.y =p.y +  dt *(k[3]*p.y -p.x*p.z);
    pNew.z =p.z +  dt *(k[4]*p.z + k[5]*p.x*p.y);

    //4Wings3
    pNew.x =p.x +  dt *(k[0]*p.x + k[1]*p.y + k[2]*p.y*p.z);
    pNew.y =p.y +  dt *(k[3]*p.y*p.z - k[4]*p.x*p.z);
    pNew.z =p.z +  dt *(1.f - k[5]*p.z - k[6]*p.x*p.y);

 


Yu-Wang

    pNew.x =p.x +  dt *(k[0]*(p.y -p.x));
    pNew.y =p.y +  dt *(k[1]*p.x - k[2]*p.x*p.z);
    pNew.z =p.z +  dt *(exp(p.x*p.y) - k[3]*p.z);

 


Thomas

    pNew.x =p.x +  dt *(-k[0]*p.x + sinf(p.y));
    pNew.y =p.y +  dt *(-k[1]*p.y + sinf(p.z));
    pNew.z =p.z +  dt *(-k[2]*p.z + sinf(p.x));

 


Halvorsen

    pNew.x =p.x +  dt *(-k[0]*p.x - 4.f*p.y - 4.f*p.z -p.y*p.y);
    pNew.y =p.y +  dt *(-k[1]*p.y - 4.f*p.z - 4.f*p.x -p.z*p.z);
    pNew.z =p.z +  dt *(-k[2]*p.z - 4.f*p.x - 4.f*p.y -p.x*p.x);

 


Arneodo

    // kVal[] -> a,b,c
    pNew.x = p.x + dt *p.y;
    pNew.y = p.y + dt *p.z;
    pNew.z = p.z + dt *(-kVal[0]*p.x - kVal[1]*p.y - p.z + kVal[2]*p.x*p.x*p.x);

 


Bouali

    // kVal[] -> a,b,c,s,alfa,beta
    pNew.x = p.x + dt *( p.x*(kVal[0] - p.y) + kVal[4]*p.z);
    pNew.y = p.y + dt *(-p.y*(kVal[1] - p.x*p.x));
    pNew.z = p.z + dt *(-p.x*(kVal[2] - kVal[3]*p.z) - kVal[5]*p.z);

 


Hadley

    // kVal[] -> a,b,f,g
    pNew.x = p.x + dt *(-p.y*p.y -p.z*p.z -kVal[0]*p.x + kVal[0]*kVal[2]);
    pNew.y = p.y + dt *(p.x*p.y - kVal[1]*p.x*p.z - p.y + kVal[3]);
    pNew.z = p.z + dt *(kVal[1]*p.x*p.y + p.x*p.z - p.z);

 


Liu-Chen

    // kVal[] -> a,b,c,d,e,f,g
    pNew.x = p.x + dt *(kVal[0]*p.y + kVal[1]*p.x + kVal[2]*p.y*p.z);
    pNew.y = p.y + dt *(kVal[3]*p.y - p.z + kVal[4]*p.x*p.z);
    pNew.z = p.z + dt *(kVal[5]*p.z + kVal[6]*p.x*p.y);

 


Genesio-Tesi

    // kVal[] -> a,b,c
    pNew.x = p.x + dt *p.y;
    pNew.y = p.y + dt *p.z;
    pNew.z = p.z + dt *(-kVal[2]*p.x - kVal[1]*p.y - kVal[0]*p.z + p.x*p.x);

 


Newton-Leipnik

    // kVal[] -> a,b
    pNew.x = p.x + dt *(-kVal[0]*p.x + p.y + 10.0*p.y*p.z);
    pNew.y = p.y + dt *(-p.x - 0.4*p.y + 5.0*p.x*p.z);
    pNew.z = p.z + dt *(kVal[1]*p.z - 5.0*p.x*p.y);

 


Nose-Hoover

    // kVal[] -> a
    pNew.x = p.x + dt *p.y;
    pNew.y = p.y + dt *(-p.x + p.y*p.z);
    pNew.z = p.z + dt *(kVal[0] - p.y*p.y);

 


Rayleigh-Benard

    // kVal[] -> a, b, r
    pNew.x = p.x + dt *(-kVal[0]*(p.x - p.y));
    pNew.y = p.y + dt *(kVal[2]*p.x - p.y - p.x*p.z);
    pNew.z = p.z + dt *(p.x*p.y - kVal[1]*p.z);

 


Sakarya

    // kVal[] -> a, b
    pNew.x = p.x + dt *(-p.x + p.y + p.y*p.z);
    pNew.y = p.y + dt *(-p.x - p.y + kVal[0]*p.x*p.z);
    pNew.z = p.z + dt *(p.z - kVal[1]*p.x*p.y);

 


Rossler

    // kVal[] -> a, b, c
    pNew.x = p.x + dt *(-p.y - p.z);
    pNew.y = p.y + dt *(p.x + kVal[0]*p.y);
    pNew.z = p.z + dt *(kVal[1] + p.z*(p.x - kVal[2]));

 


Rucklidge

    // kVal[] -> a, k
    pNew.x = p.x + dt *(-kVal[1]*p.x + kVal[0]*p.y - p.y*p.z);
    pNew.y = p.y + dt *p.x;
    pNew.z = p.z + dt *(-p.z + p.y*p.y);