/*------------------------------------------------------------------------
エノン写像とヤコビ行列(線形化したエノン写像)
Henon map and the Jacobian matrix (linearized Henon map)
solve_henon_eqs.c
------------------------------------------------------------------------*/
#include "henon_lyap.h"
void henon_eqs( double (*x), double (*y), double (*detJ), double u[DIM][DIM] )
{
int i, j, k;
double xx;
double yy;
double d2;
double df[DIM][DIM];
double dfu[DIM][DIM];
// エノン写像
// Henon map
xx = 1.0 - A * (*x) * (*x) + (*y);
yy = B * (*x);
// (*x): x[t], (*y): y[t]
// xx: x[t+1], yy: y[t+1]
// ヤコビ行列
// Jacobian matrix
df[0][0] = -2.0 * A * (*x);
df[0][1] = 1.0;
df[1][0] = B;
df[1][1] = 0.0;
(*x) = xx;
(*y) = yy;
/*
| df[0][0] df[0][1] |
df = | |
| df[1][0] df[1][1] |
*/
// ヤコビアン行列式
// Jacobian determinant
(*detJ) = fabs( df[0][0] * df[1][1] - df[0][1] * df[1][0] );
// ヤコビ行列を用いて微小変位ベクトルを計算
// calculate the micro-displacement vector using the Jacobian matrix
for ( i = 0; i < DIM; i++ ) {
for ( j = 0; j < DIM; j++ ) {
d2 = 0.0;
for ( k = 0; k < DIM; k++ ) {
d2 += df[i][k] * u[k][j];
}
dfu[i][j] = d2;
}
}
for ( i = 0; i < DIM; i++ ) {
for ( j = 0; j < DIM; j++ ) {
u[i][j] = dfu[i][j];
}
}
}