/*----------------------------------------------------------------------------------
中村・上田写像とヤコビ行列(線形化した中村・上田写像)
Nakamura-Ueta map and the Jacobian matrix (linearized Nakamura-Ueta map)
solve_nakamura-ueta_eqs.c
----------------------------------------------------------------------------------*/
#include "nakamura-ueta_lyap.h"
void nakamura_ueta_eqs( double (*x), double (*y), double (*z), double dfQ[DIM][DIM], double Q[DIM][DIM] )
{
int i, j, k;
double xx;
double yy;
double zz;
double d2;
double df[DIM][DIM]; // ヤコビ行列
// 中村・上田写像
// Nakamura-Ueta map
xx = A0 + A1 * (*y) + A2 * (*x) * (*z);
yy = (*x);
zz = (*y);
(*x) = xx;
(*y) = yy;
(*z) = zz;
// ヤコビ行列/
// Jacobian matrix
df[0][0] = A2 * (*z);
df[0][1] = A1;
df[0][2] = A2 * (*x);
df[1][0] = 1.0;
df[1][1] = 0.0;
df[1][2] = 0.0;
df[2][0] = 0.0;
df[2][1] = 1.0;
df[2][2] = 0.0;
/*
| 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] |
*/
// ヤコビ行列dfと行列Qの積dfQの計算
// calculate the product dfQ of the Jacobian matrix df and the matrix Q
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] * Q[k][j];
}
dfQ[i][j] = d2;
}
}
}