1
$\begingroup$

The following code with varying scaling parameter gives same plot. plz suggest correction.

Clear[x];

r=1;
eqn=x'[t]-1-r*x[t]-x[t]^2==0;
sol=x/.DSolve[{eqn,x[0]==0},x,t][[1,1]];
ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

r=2;
eqn=x'[t]-1-r*x[t]-x[t]^2==0;
ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

r=-2;
eqn=x'[t]-1-r*x[t]-x[t]^2==0;
ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

r=0;
eqn=x'[t]-1-r*x[t]-x[t]^2==0;
ParametricPlot[Evaluate[{sol[t],D[sol[t],t]}],{t,0,100}]

Regards,

$\endgroup$
  • $\begingroup$ The value of "r" has been changed several times.....maybe Clear[r] for each run? $\endgroup$ – thils Oct 12 '15 at 3:15
  • $\begingroup$ If your version of Mathematica supports this form of Table then: Clear[x, r]; Table[eqn = x'[t]-1-r*x[t]-x[t]^2==0; sol=x/.DSolve[{eqn, x[0]==0},x,t][[1,1]]; ParametricPlot[ Evaluate[{sol[t], D[sol[t], t]}], {t,0,100}], {r,{1,2,-2,0}}] $\endgroup$ – Bill Oct 12 '15 at 3:33
  • 1
    $\begingroup$ Because you set r before the DSolve, you have to run DSolve again every time you reset r. Alternatively, don't set r ever and instead replace r with the new value using /. for each ParametricPlot. $\endgroup$ – march Oct 12 '15 at 3:34
3
$\begingroup$

marsh already has explained in a comment why the curves as generated by the code in the question look the same. Here we offer some alternative approaches.

eqn = x'[t] - 1 - r*x[t] - x[t]^2 == 0;
sol = x /. DSolve[{eqn, x[0] == 0}, x, t][[1, 1]];

provides the solution for all r in the range (-2, 2). Plotting the four cases in the question on a single curve shows that they differ. (Note the use of Limit to accommodate r -> 2, -2.)

ParametricPlot[Evaluate[Table[Limit[{sol[t], D[sol[t], t]}, r -> i], {i, {1, 2, -2, 0}}]], 
    {t, 0, 100}, AspectRatio -> 1, PlotRange -> {{-5, 5}, {0, 35}}, PlotPoints -> 1000]

enter image description here

Gaps in two of the curves can be filled by using negative as well as positive values for t.

However, it also is straightforward to obtain D[sol[t], t] as a function of sol[t].

FullSimplify[D[sol[t], t] /. Solve[x == sol[t], t][[1, 1]], C[1] ∈ Integers]
(* 1 + x (r + x) *)

In other words, the curves all are simple parabolas.

Plot[Evaluate[Table[%, {r, {1, 2, -2, 0}}]], {x, -5, 5}, AspectRatio -> 1]

enter image description here

Here, there are no gaps, of course.

$\endgroup$
1
$\begingroup$

I have deliberately confined this post to $t\in (0,1)$ to avoid stiffness issue (as discussed in related question).

f[x_, r_] := 1 + r x + x^2
Manipulate[
 With[{sol = 
    ParametricNDSolve[{x'[t] == f[x[t], s], x[0] == 0}, {x, x'}, {t, 
      0, 0.9}, {s}]},
  Column[{
    Show[Plot[f[x, r], {x, -3, 3}, Frame -> True, 
      PlotRange -> {0, 10}], 
     ParametricPlot[Evaluate[{x[r][t], x'[r][t]} /. sol], {t, 0, 1}, 
      PlotStyle -> {Red, Thick, Dashed}, Frame -> True, 
      PlotRange -> {0, 10}], FrameLabel -> {"x(t)", "x'(t}"}],
    Show[StreamPlot[{1, f[x, r]}, {t, 0, 0.9}, {x, -3, 3}], 
     Plot[Evaluate[x[r][t] /. sol], {t, 0, 0.9}, 
      PlotStyle -> {Red, Thick}], FrameLabel -> {"t", "x(t}"}]
    }]], {r, -2, 2}]

Noting:

  • x' v x can be plotted just by definition (see top plot)
  • use of ParametricNDSolve

enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.