/*------------------------------------------------------------------------
ハイパーカオス写像とヤコビ行列(線形化したハイパーカオス写像)
Hyperchaos map and the Jacobian (linearized Hyperchaos map)
solve_hyperchaos_map_eqs.c
------------------------------------------------------------------------*/
#include "hyperchaos_map_lyap.h"
void hyperchaos_map_eqs( double (*x), double (*y), double (*z), double u[DIM][DIM] )
{
int i, j, k;
double xx;
double yy;
double zz;
double d2;
double df[DIM][DIM];
double dfu[DIM][DIM];
// ハイパーカオス写像
// Hyperchaos map
xx = 3.8 * (*x) * ( 1.0 - (*x) ) - 0.05 * ( (*y) + 0.35 ) * ( 1.0 - 2.0 * (*z) );
yy = 0.1 * (( (*y) + 0.35 ) * ( 1.0 - 2.0 * (*z) ) - 1.0 ) * ( 1.0 - 1.9 * (*x) );
zz = 3.78 * (*z) * ( 1.0 - (*z) ) + 0.2 * (*y);
(*x) = xx;
(*y) = yy;
(*z) = zz;
// ヤコビ行列
// Jacobian matrix
df[0][0] = 3.8 - 7.6 * (*x);
df[0][1] = -0.05 + 0.1 * (*z);
df[0][2] = 0.1 * (*y) + 0.035;
df[1][0] = -0.19 * (*y) + 0.38 * (*y) * (*z) + 0.133 * (*z) + 0.1235;
df[1][1] = 0.1 - 0.2 * (*z) - 0.19 * (*x) + 0.38 * (*x) * (*z);
df[1][2] = -0.2 * (*y) - 0.07 + 0.38 * (*x) * (*y) + 0.133 * (*x);
df[2][0] = 0.0;
df[2][1] = 0.2;
df[2][2] = 3.78 - 7.56 * (*z);
/*
| df[0][0] df[0][1] df[0][2] |
| |
df = | df[1][0] df[1][1] df[1][2] |
| |
| df[2][0] df[2][1] df[2][2] |
*/
// ヤコビ行列を用いて微小変位ベクトルを計算
// 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];
}
}
}