/*------------------------------------------------------------------------------------------
ティンカーベル写像とヤコビ行列(線形化したティンカーベル写像)
Tinkerbell map and the Jacobian matrix (linearized Tinkerbell map)
solve_Peter_de_Jong_eqs.c
------------------------------------------------------------------------------------------*/
#include "tinkerbell_lyap.h"
void tinkerbell_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];
// ティンカーベル写像
// Tinkerbell map
xx = (*x) * (*x) - (*y) * (*y) + A * (*x) + B * (*y);
yy = 2.0 * (*x) * (*y) + C * (*x) + D * (*y);
(*x) = xx;
(*y) = yy;
// ヤコビ行列
// Jacobian matrix
df[0][0] = 2.0 * (*x) + A;
df[0][1] = -2.0 * (*y) + B;
df[1][0] = 2.0 * (*y) + C;
df[1][1] = 2.0 * (*x) + D;
/*
| 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];
}
}
}