Extraer y trazar expresiones NDSolve
Aug 18 2020
Entonces estoy resolviendo una ecuación diferencial usando NDSolvey graficando los resultados. Pero quiero extraer los puntos de datos en los gráficos producidos a un archivo .txt. Soy consciente del método para extraer datos de un gráfico regular de una función, pero parece que no puedo entender el NDSolve. Si esta no es la forma de hacerlo, ¿qué otros métodos hay 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}]
]
Respuestas
3 UlrichNeumann Aug 18 2020 at 07:31
Para obtener los puntos de datos de la solución, intente
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}]
]
solcontiene dos objetos de interpolación. Los puntos de datos de la primera solución son
data1=Transpose[{sol[[1]]["Coordinates"][[1]], sol[[1]]["ValuesOnGrid"]}];
Show[Plot[sol[[1]][t], {t, 0, 5}], ListPlot[data1, PlotStyle -> Red]]