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]]