We are using Chris K's answer on another question for finding Lyapunov Exponents for a dynamical system (Four-Wing Attractor)
GramSchmidt[w_?MatrixQ] := Module[{v = ConstantArray[0, Length[w]]},
Table[v[[n]] = w[[n]] - Sum[(v[[i]].w[[n]]/v[[i]].v[[i]])*v[[i]], {i, n - 1}], {n, Length[w]}]; v]
LyapunovExponents[eqnsin_List, icsin : ({__Rule} | _Association), nlein_Integer: 0, opts___?OptionQ] := Module[{
(* options *)
tstep, maxsteps, ndsolveopts, logbase, showplot, plotexponents, plotopts,
(* iterators *)
c, i, j,
(* other variables *)
δ, neq, nle, vars, rhs, jac, eqns, unks, ics, cum, res, edat, state, newstate, sol, W, norms},
(* parse options *)
tstep = Evaluate[TStep /. Flatten[{opts, Options[LyapunovExponents]}]];
maxsteps = Evaluate[MaxSteps /. Flatten[{opts, Options[LyapunovExponents]}]];
ndsolveopts = Evaluate[NDSolveOpts /. Flatten[{opts, Options[LyapunovExponents]}]];
logbase =Evaluate[LogBase /. Flatten[{opts, Options[LyapunovExponents]}]];
showplot = Evaluate[ShowPlot /. Flatten[{opts, Options[LyapunovExponents]}]];
plotexponents = Evaluate[PlotExponents /. Flatten[{opts, Options[LyapunovExponents]}]];
plotopts = Evaluate[PlotOpts /. Flatten[{opts, Options[LyapunovExponents]}]];
neq = Length[eqnsin];
If[nlein == 0, nle = neq, nle = nlein]; (* how many exponents *)
(* extract vars and right hand sides from eqnsin *)
vars = eqnsin[[All, 1, 0, 1]];
rhs = eqnsin[[All, 2]];
(* jacobian matrix *)
jac = D[rhs, {Replace[vars, {x_ -> x[t]}, 1]}];
eqns = Join[
eqnsin,
Flatten[Table[δ[i, j]'[t] == (jac.Table[δ[i, j][t], {i, neq}])[[i]], {j, nle}, {i, neq}]]
];
unks = Join[
vars,
Flatten[Table[δ[i, j], {j, nle}, {i, neq}]]
];
ics = Join[
Table[var[0] == (var /. icsin), {var, vars}],
Flatten[Table[δ[i, j][0] == IdentityMatrix[neq][[i, j]], {j, nle}, {i, neq}]]
];
cum = Table[0, {nle}];
state = First@NDSolve`ProcessEquations[Flatten[Join[eqns, ics]], unks, t, Evaluate[Sequence @@ ndsolveopts]];
(* main loop *)
edat = Table[
newstate = First@NDSolveReinitialize[state, ics]; NDSolveIterate[newstate, c tstep];
sol = NDSolve`ProcessSolutions[newstate];
W = GramSchmidt[Evaluate[Table[δ[i, j][c tstep], {j, nle}, {i, neq}] /. sol]];
norms = Map[Norm, W];
(* update running vector magnitudes *)
cum = cum + Log[logbase, norms];
ics = Join[
Table[var[c tstep] == (var[c tstep] /. sol), {var, vars}],
Flatten[Table[δ[i, j][c tstep] == (W/norms)[[j, i]], {j, nle}, {i, neq}]]
];
cum/(c tstep)
, {c, maxsteps}];
If[showplot, Print[ListPlot[Transpose[edat][[1 ;; plotexponents]], Evaluate[Sequence @@ plotopts]]]];
Return[cum/(maxsteps tstep)]
];
Options[LyapunovExponents] = {NDSolveOpts -> {}, TStep -> 1, MaxSteps -> 10^4, LogBase -> E,
ShowPlot -> False, PlotExponents -> 1, PlotOpts -> {}};
Our initial conditions and the equations are given below.
ics = {x -> 0.1, y -> 0.1, z -> 0.1};
equations= {Derivative[1][x][t] == 14 (-x[t] + y[t]) + 4 y[t] z[t],
Derivative[1][z][t] == x[t] y[t] - 43 z[t],
Derivative[1][y][t] == 8.1 x[t] + 16 y[t] - x[t] z[t]}
LyapunovExponents[equations, ics]
{0.000634328, -3.35805, Indeterminate}
However, one of the results is Indeterminate and we are clueless about the cause.
Is there a problem in the code, or does the system genuinely an indeterminate Lyapunov exponent?
Please help us resolve the issue.




