/*------------------------------------------------------------------------------
池田遅延微分方程式と線形化した方程式
Ikeda delay differential equation (ikeda DDE) and linearized equation
solve_ikeda_DDE1.c
------------------------------------------------------------------------------*/
#include "ikeda_DDE1_lyap.h"
double uu[DIM+1][DIM];
void ikeda_DDE1( double x, double delay, double (*dxdt) )
{
double d1;
d1 = sin( delay - C );
(*dxdt) = A * d1 - B * x;
}
void solve_ikeda_DDE1_using_RK4( double v[DIM], double (*dxdt), double u[DIM][DIM] )
{
int i;
int j;
double dudt;
double vv;
double delay;
double v_k1, v_k2, v_k3, v_k4;
vv = v[0];
delay = v[X_TAU];
/*******************************************************/
// vvとdelayを渡し、v_k1の計算値を得る。
// pass vv and delay, and get the calculated value of v_k1
ikeda_DDE1( vv, delay, &v_k1 );
vv = v[0] + DELTA_T * v_k1/(double)2.0;
ikeda_DDE1( vv, delay, &v_k2 );
vv = v[0] + DELTA_T * v_k2/(double)2.0;
ikeda_DDE1( vv, delay, &v_k3 );
vv = v[0] + DELTA_T * v_k3;
ikeda_DDE1( vv, delay, &v_k4 );
(*dxdt) = (v_k1 + 2.0 * v_k2 + 2.0 * v_k3 + v_k4)/(double)6.0;
vv = v[0] + DELTA_T * (*dxdt);
for ( i = 1; i < DIM; i++ ) {
v[DIM-i] = v[DIM-i-1];
}
v[0] = vv;
/*******************************************************/
// 線形化した池田遅延微分方程式を用いて微小変位ベクトルを計算
// calculate the micro-displacement vectors using linearized ikeda DDE
for ( i = 0; i < DIM; i++ ) {
dudt = u[DIM-1][i] * A * cos( delay - C ) - B * u[0][i];
uu[0][i] = u[0][i] + DELTA_T * dudt;
}
for ( i = 0; i < DIM; i++ ) {
for ( j = 0; j < DIM; j++ ) {
uu[i+1][j] = u[i][j];
u[i][j] = uu[i][j];
}
}
}