Trích xuất và vẽ biểu thức NDSolve
Aug 18 2020
Vì vậy, tôi đang giải một phương trình vi phân bằng cách sử dụng NDSolvevà vẽ biểu đồ kết quả. Nhưng tôi muốn trích xuất các điểm dữ liệu trong các ô được tạo thành tệp .txt. Tôi biết phương pháp trích xuất dữ liệu từ một biểu đồ thông thường của một hàm, nhưng dường như không thể tìm ra NDSolve. Nếu đây không phải là cách để làm điều đó, thì có những phương pháp nào khác?
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}]
]
Trả lời
3 UlrichNeumann Aug 18 2020 at 07:31
Để có được điểm dữ liệu của giải pháp, hãy thử
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}]
]
solchứa hai đối tượng nội suy. Các điểm dữ liệu của giải pháp đầu tiên là
data1=Transpose[{sol[[1]]["Coordinates"][[1]], sol[[1]]["ValuesOnGrid"]}];
Show[Plot[sol[[1]][t], {t, 0, 5}], ListPlot[data1, PlotStyle -> Red]]