Created
December 4, 2020 22:01
-
-
Save tchnmncr/fa6b890e6474cc93b32990dfffc89c9a to your computer and use it in GitHub Desktop.
Lyapunov Exponent (Processing)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** Lyapunov Exponent | |
* | |
* Based on code on pg. 62 of _Chaos in Wonderland_ | |
* by Clifford A. Pickover | |
* | |
*/ | |
float calcLyapunovExponent(float a, float b, float c, float d) { | |
float Lsum = 0; | |
float n = 0; | |
float x = 0.1; | |
float y = 0.1; | |
float xe = x + 0.000001; | |
float ye = y; | |
float xx, yy, xsave, ysave, dLx, dLy, dL2, df, rs, L = 0; | |
float bigNumber = 2139095039; /* Pickover's algorithm calls | |
for a long int (1000000000000) here, but I often get NaN returned | |
when using it in Processing, and I have found that using a | |
large float returns a value close enough to Pickover's to | |
be useful. */ | |
for(int i=0; i<10000000; i++) { | |
xx = sin(y*b) + c*sin(x*b); yy = sin(x*a) + d*sin(y*a); | |
xsave = xx; ysave = yy; x = xe; y = ye; n++; | |
xx = sin(y*b) + c*sin(x*b); yy = sin(x*a) + d*sin(y*a); | |
dLx = xx - xsave; dLy = yy - ysave; dL2 = dLx*dLx + dLy*dLy; | |
df = bigNumber*dL2; rs = 1/sqrt(df); | |
xe = xsave + rs*(xx - xsave); ye = ysave + rs*(yy - ysave); | |
xx = xsave; yy = ysave; Lsum = Lsum + log(df); L = 0.721347*Lsum/n; | |
x = xx; y = yy; | |
} | |
return L; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment