Mengekstrak dan merencanakan ekspresi NDSolve

Aug 18 2020

Jadi saya memecahkan persamaan diferensial menggunakan NDSolvedan memplot hasilnya. Tetapi saya ingin mengekstrak poin data dalam plot yang dihasilkan ke file .txt. Saya mengetahui metode untuk mengekstrak data dari plot biasa dari suatu fungsi, tetapi sepertinya tidak dapat menemukan NDSolve. Jika ini bukan cara untuk melakukannya, metode lain apa yang tersedia?

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

Jawaban

3 UlrichNeumann Aug 18 2020 at 07:31

Untuk mendapatkan titik data solusi coba

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

solberisi dua objek interpolasi. Titik data dari solusi pertama adalah

data1=Transpose[{sol[[1]]["Coordinates"][[1]], sol[[1]]["ValuesOnGrid"]}];
Show[Plot[sol[[1]][t], {t, 0, 5}], ListPlot[data1, PlotStyle -> Red]]