Extraction et représentation d'expressions NDSolve
Aug 18 2020
Je résous donc une équation différentielle en utilisant NDSolve
et en traçant les résultats. Mais je souhaite extraire les points de données des tracés produits dans un fichier .txt. Je connais la méthode pour extraire des données d'un tracé régulier d'une fonction, mais je ne parviens pas à comprendre le fichier NDSolve
. Si ce n'est pas la manière de procéder, quelles sont les autres méthodes disponibles?
Module[{m = 1, b = 1, g = 9.8, k = 100, time = 5},
s = NDSolve[{m g Cos[ϕ[t]] - k (l[t] - b) ==
m (l''[t] - l[t] ϕ'[t]^2),
-g Sin[ϕ[t]] == l[t] ϕ''[t] + 2 l'[t] ϕ'[t],
l[0] == 1.2,
l'[0] == 0, ϕ[0] == 30*π/180, ϕ'[0] == 0},
{l, ϕ}, {t, 0, time}];
Print[
Plot[Evaluate[l[t] /. s], {t, 0, time}, AxesLabel -> {"t", "l"},
ImageSize -> Small]];
Print[
Plot[Evaluate[ϕ[t] /. s], {t, 0, time},
AxesLabel -> {"t", "ϕ"}, ImageSize -> Small]];
(*data = Cases[Plot[Evaluate[l[t]/.s],{t,0,time},Line[data_]:> data, \
-4*)
Animate[
Graphics[{Point[{0, 0}],
Point[{l[t] Sin[ϕ[t]], -l[t] Cos[ϕ[t]]}],
Line[{{0, 0}, {l[t] Sin[ϕ[t]], -l[t] Cos[ϕ[t]]}}]} /. s,
PlotRange -> {{-2 b, 2 b}, {-2 b, 0.1}}], {t, 0, time}]
]

Réponses
3 UlrichNeumann Aug 18 2020 at 07:31
Pour obtenir les points de données de la solution, essayez
sol = Module[{m = 1, b = 1, g = 9.8, k = 100, time = 5},
NDSolveValue[{m g Cos[\[Phi][t]] - k (l[t] - b) ==m (l''[t] - l[t] \[Phi]'[t]^2), -g Sin[\[Phi][t]] ==l[t] \[Phi]''[t] + 2 l'[t] \[Phi]'[t], l[0] == 1.2,l'[0] == 0, \[Phi][0] == 30*\[Pi]/180, \[Phi]'[0] == 0}, {l, \[Phi]}, {t, 0, time}]
]
sol
contient deux objets d'interpolation. Les points de données de la première solution sont
data1=Transpose[{sol[[1]]["Coordinates"][[1]], sol[[1]]["ValuesOnGrid"]}];
Show[Plot[sol[[1]][t], {t, 0, 5}], ListPlot[data1, PlotStyle -> Red]]
