杜芬方程的敏感度
为了简化接下来的计算,使用只有初始条件作为参数而其他值固定的 ParametricNDSolveValue:
xp = ParametricNDSolveValue[{x''[t] + δ x'[t] + α x[t] + βx[t] ^ 3 == γ Cos[ω t], x[0] == a, x'[0] == b} /. {δ -> 0.15, α -> -1, β -> 1, γ -> 0.3, ω -> 1}, x, {t, 0, 100}, {a, b}]{xpa = Head[D[xp[a, b], a]], xpb = Head[D[xp[a, b], b]]}GraphicsRow[{Plot[xp[0, 0][t], {t, 0, 100}], LogPlot[Abs[xpa[0, 0][t]], {t, 0, 100}],
LogPlot[Abs[xpb[0, 0][t]], {t, 0, 100}]}, ImageSize -> Large]ϵ = 10 ^ -6;
Plot[{xp[0, 0][t], xp[ϵ, 0][t], xp[0, ϵ][t]}, {t, 0, 100}, ImageSize -> Medium]perp[a_, b_][t_ ? NumberQ] := Module[{f = xp[a, b], dt, do},
dt = Normalize[{f'[t], f''[t]}];
do = Reverse[dt] * {1, -1}
];spar[a_, b_][t_ ? NumberQ] := Module[{s = xpa[a, b], f = xp[a, b]},
Abs[Normalize[{f'[t], f''[t]}].{s[t], s'[t]}]]sperp[a_, b_][t_ ? NumberQ] := Module[{s = xpa[a, b]}, Abs[perp[a, b][t].{s[t], s'[t]}]]scale = 10 ^ -8;Show[ParametricPlot[{xp[0, 0][t], xp[0, 0]'[t]} + s sperp[0, 0][t] perp[0, 0][t], {t, 0, 100}, {s, -scale, scale}, Mesh -> None, PlotPoints -> {1000, 2}], ParametricPlot[{xp[0, 0][t], xp[0, 0]'[t]}, {t, 0, 25}, PlotStyle -> Red], ImageSize -> Medium]