/*---------------------------------------------------------------------------------
池田遅延微分方程式のリアプノフスペクトラムの計算
calculating the Lyapunov spectrum of the Ikeda delay differential equation
dx/dt = A * ( sin[x(t-TAU) - C] ) - B * x(t)
ikeda_DDE1_lyap.h
---------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ITERATION 40000
#define SKIP 20000
#define DIM 100 /* 想定した変数の数 (assumed number of the variables) */
#define X_TAU (DIM-1)
#define DELTA_T (TAU/(double)DIM) /* step size of the fourth-order Runge-Kutta method */
/*------------------------------------------------------------------------*/
/*
#define TAU 2.0
#define A 20.0
#define B 1.0
#define C M_PI/(double)3.0
*/
/*
Reconstruction of Nonlinear Time-Delayed Feedback Models From Optical Data
Henning Voss and Jurgen Kurths
Chaos, Solitons & Fractals 10, 805-809, 1999.
*/
/*------------------------------------------------------------------------*/
/*
#define TAU 5.0
#define A 20.0
#define B 1.0
#define C M_PI/(double)4.0
*/
/*
A simple chaotic delay differential equation
J.C. Sprott
Physics Letters A 366, 397–402, 2007
*/
/*------------------------------------------------------------------------*/
// case 1
/*
#define TAU 1.0
#define A 6.0
#define B 1.0
#define C 0.0
*/
/*
Synchronization in coupled Ikeda delay systems
The European Physical Journal, Special Topics 223, 1465–1479 (2014)
http://dx.doi.org/10.1140/epjst/e2014-02144-8
*/
/*------------------------------------------------------------------------*/
// case 2
#define TAU 0.28
#define A 16.0
#define B 1.0
#define C M_PI/(double)3.0
/* http://www.atomosyd.net/spip.php?article197 */
/*------------------------------------------------------------------------*/
extern void ikeda_DDE1( double x, double delay, double (*dxdt) );
extern void solve_ikeda_DDE1_using_RK4( double x[DIM], double (*dxdt), double u[DIM][DIM] );
extern void quick_sort( int n, double x[DIM] );
extern void calc_lyap_dim( double lyap[DIM], double (*lyap_dim), int (*iii) );
extern void gram_schmidt_orth( double u[DIM][DIM], double e[DIM][DIM] );
extern double log2( double x );