एनडीएसोल्यूशन एक्सप्रेशन को निकालना और प्लॉट करना

Aug 18 2020

इसलिए मैं NDSolveपरिणामों का उपयोग और साजिश रचते हुए एक अंतर समीकरण हल कर रहा हूं । लेकिन मैं एक .txt फ़ाइल में निर्मित भूखंडों में डेटा बिंदुओं को निकालना चाहता हूं। मुझे किसी फ़ंक्शन के नियमित प्लॉट से डेटा निकालने की विधि के बारे में पता है, लेकिन यह पता नहीं लग सकता है NDSolve। यदि यह ऐसा करने का तरीका नहीं है, तो अन्य तरीके क्या उपलब्ध हैं?

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

जवाब

3 UlrichNeumann Aug 18 2020 at 07:31

समाधान के डेटा पॉइंट प्राप्त करने के लिए प्रयास करें

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दो प्रक्षेप ऑब्जेक्ट शामिल हैं। पहले समाधान के डेटा पॉइंट हैं

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