/*------------------------------------------------------------------------
エノン写像とヤコビ行列(線形化したエノン写像)
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 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) = xx;
(*y) = yy;
// ヤコビ行列
// Jacobian matrix
df[0][0] = -2.0 * A * (*x);
df[0][1] = 1.0;
df[1][0] = B;
df[1][1] = 0.0;
/*
| df[0][0] df[0][1] |
df = | |
| df[1][0] df[1][1] |
*/
// ヤコビ行列を用いて微小変位ベクトルを計算
// 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];
}
}
}